summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/__init__.py2
-rw-r--r--django/conf/__init__.py6
-rw-r--r--django/conf/global_settings.py7
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/django.mobin67366 -> 76835 bytes
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/django.po3655
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/djangojs.mobin1684 -> 2697 bytes
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/djangojs.po128
-rw-r--r--django/conf/locale/cs/LC_MESSAGES/django.mobin76848 -> 77011 bytes
-rw-r--r--django/conf/locale/cs/LC_MESSAGES/django.po186
-rw-r--r--django/conf/locale/cs/LC_MESSAGES/djangojs.mobin2695 -> 2695 bytes
-rw-r--r--django/conf/locale/cs/LC_MESSAGES/djangojs.po4
-rw-r--r--django/conf/locale/da/LC_MESSAGES/djangojs.mobin1662 -> 2587 bytes
-rw-r--r--django/conf/locale/da/LC_MESSAGES/djangojs.po37
-rw-r--r--django/conf/locale/de/LC_MESSAGES/django.mobin77515 -> 77651 bytes
-rw-r--r--django/conf/locale/de/LC_MESSAGES/django.po158
-rw-r--r--django/conf/locale/es_AR/LC_MESSAGES/django.mobin77570 -> 77720 bytes
-rw-r--r--django/conf/locale/es_AR/LC_MESSAGES/django.po186
-rw-r--r--django/conf/locale/es_AR/LC_MESSAGES/djangojs.mobin2828 -> 2512 bytes
-rw-r--r--django/conf/locale/es_AR/LC_MESSAGES/djangojs.po32
-rw-r--r--django/conf/locale/eu/LC_MESSAGES/django.mobin44912 -> 45326 bytes
-rw-r--r--django/conf/locale/eu/LC_MESSAGES/django.po437
-rw-r--r--django/conf/locale/fr/LC_MESSAGES/django.mobin78322 -> 78477 bytes
-rw-r--r--django/conf/locale/fr/LC_MESSAGES/django.po204
-rw-r--r--django/conf/locale/ml/LC_MESSAGES/django.mobin0 -> 64084 bytes
-rw-r--r--django/conf/locale/ml/LC_MESSAGES/django.po5044
-rw-r--r--django/conf/locale/ml/LC_MESSAGES/djangojs.mobin0 -> 4350 bytes
-rw-r--r--django/conf/locale/ml/LC_MESSAGES/djangojs.po156
-rw-r--r--django/conf/locale/ml/__init__.py0
-rw-r--r--django/conf/locale/ml/formats.py38
-rw-r--r--django/conf/locale/nn/LC_MESSAGES/django.mobin72359 -> 72597 bytes
-rw-r--r--django/conf/locale/nn/LC_MESSAGES/django.po206
-rw-r--r--django/conf/locale/pl/formats.py4
-rw-r--r--django/conf/locale/sr/LC_MESSAGES/django.mobin56881 -> 57173 bytes
-rw-r--r--django/conf/locale/sr/LC_MESSAGES/django.po231
-rw-r--r--django/conf/locale/sr/LC_MESSAGES/djangojs.mobin3011 -> 2683 bytes
-rw-r--r--django/conf/locale/sr/LC_MESSAGES/djangojs.po53
-rw-r--r--django/conf/locale/sr/formats.py12
-rw-r--r--django/conf/locale/sr_Latn/LC_MESSAGES/django.mobin45424 -> 45656 bytes
-rw-r--r--django/conf/locale/sr_Latn/LC_MESSAGES/django.po804
-rw-r--r--django/conf/locale/sr_Latn/formats.py12
-rw-r--r--django/conf/project_template/settings.py2
-rw-r--r--django/conf/project_template/urls.py3
-rw-r--r--django/contrib/admin/media/css/base.css13
-rw-r--r--django/contrib/admin/media/css/changelists.css4
-rw-r--r--django/contrib/admin/media/js/dateparse.js20
-rw-r--r--django/contrib/admin/options.py12
-rw-r--r--django/contrib/admin/sites.py6
-rw-r--r--django/contrib/admin/templates/admin/auth/user/add_form.html5
-rw-r--r--django/contrib/admin/templates/admin/base.html4
-rw-r--r--django/contrib/admin/templates/admin/change_list_results.html7
-rw-r--r--django/contrib/admin/templatetags/admin_list.py9
-rw-r--r--django/contrib/admin/widgets.py15
-rw-r--r--django/contrib/admindocs/templates/admin_doc/template_filter_index.html4
-rw-r--r--django/contrib/admindocs/templates/admin_doc/template_tag_index.html4
-rw-r--r--django/contrib/admindocs/views.py8
-rw-r--r--django/contrib/auth/decorators.py3
-rw-r--r--django/contrib/auth/forms.py10
-rw-r--r--django/contrib/auth/tests/__init__.py3
-rw-r--r--django/contrib/auth/tests/decorators.py30
-rw-r--r--django/contrib/auth/tests/forms.py483
-rw-r--r--django/contrib/auth/tests/urls.py5
-rw-r--r--django/contrib/auth/tests/views.py37
-rw-r--r--django/contrib/auth/views.py3
-rw-r--r--django/contrib/databrowse/plugins/calendars.py2
-rw-r--r--django/contrib/databrowse/plugins/fieldchoices.py2
-rw-r--r--django/contrib/flatpages/admin.py4
-rw-r--r--django/contrib/flatpages/fixtures/sample_flatpages.json63
-rw-r--r--django/contrib/flatpages/templatetags/__init__.py0
-rw-r--r--django/contrib/flatpages/templatetags/flatpages.py99
-rw-r--r--django/contrib/flatpages/tests/__init__.py5
-rw-r--r--django/contrib/flatpages/tests/csrf.py76
-rw-r--r--django/contrib/flatpages/tests/forms.py22
-rw-r--r--django/contrib/flatpages/tests/middleware.py67
-rw-r--r--django/contrib/flatpages/tests/templates/404.html1
-rw-r--r--django/contrib/flatpages/tests/templates/flatpages/default.html10
-rw-r--r--django/contrib/flatpages/tests/templates/registration/login.html0
-rw-r--r--django/contrib/flatpages/tests/templatetags.py134
-rw-r--r--django/contrib/flatpages/tests/urls.py8
-rw-r--r--django/contrib/flatpages/tests/views.py72
-rw-r--r--django/contrib/flatpages/views.py14
-rw-r--r--django/contrib/formtools/wizard.py6
-rw-r--r--django/contrib/gis/db/backends/mysql/creation.py2
-rw-r--r--django/contrib/gis/db/backends/postgis/operations.py2
-rw-r--r--django/contrib/gis/db/backends/spatialite/base.py2
-rw-r--r--django/contrib/gis/db/models/sql/compiler.py4
-rw-r--r--django/contrib/gis/gdal/libgdal.py4
-rw-r--r--django/contrib/gis/tests/__init__.py209
-rw-r--r--django/contrib/gis/tests/geogapp/tests.py4
-rw-r--r--django/contrib/gis/tests/relatedapp/models.py5
-rw-r--r--django/contrib/gis/tests/relatedapp/tests.py10
-rw-r--r--django/contrib/localflavor/in_/in_states.py70
-rw-r--r--django/contrib/markup/tests.py2
-rw-r--r--django/contrib/sessions/backends/file.py2
-rw-r--r--django/contrib/sessions/tests.py661
-rw-r--r--django/contrib/sitemaps/__init__.py5
-rw-r--r--django/contrib/sitemaps/models.py1
-rw-r--r--django/contrib/sitemaps/tests/__init__.py1
-rw-r--r--django/contrib/sitemaps/tests/basic.py77
-rw-r--r--django/contrib/sitemaps/tests/urls.py33
-rw-r--r--django/core/cache/__init__.py2
-rw-r--r--django/core/cache/backends/base.py28
-rw-r--r--django/core/cache/backends/db.py105
-rw-r--r--django/core/cache/backends/dummy.py15
-rw-r--r--django/core/cache/backends/filebased.py7
-rw-r--r--django/core/cache/backends/locmem.py5
-rw-r--r--django/core/exceptions.py7
-rw-r--r--django/core/files/images.py19
-rw-r--r--django/core/handlers/base.py3
-rw-r--r--django/core/handlers/modpython.py4
-rw-r--r--django/core/management/__init__.py10
-rw-r--r--django/core/management/base.py24
-rw-r--r--django/core/management/commands/dumpdata.py43
-rw-r--r--django/core/management/commands/flush.py10
-rw-r--r--django/core/management/commands/loaddata.py71
-rw-r--r--django/core/management/commands/syncdb.py14
-rw-r--r--django/core/management/commands/testserver.py5
-rw-r--r--django/core/urlresolvers.py56
-rw-r--r--django/db/__init__.py2
-rw-r--r--django/db/backends/__init__.py5
-rw-r--r--django/db/backends/creation.py17
-rw-r--r--django/db/backends/mysql/base.py2
-rw-r--r--django/db/backends/mysql/client.py5
-rw-r--r--django/db/backends/oracle/base.py2
-rw-r--r--django/db/backends/oracle/creation.py6
-rw-r--r--django/db/backends/postgresql/base.py5
-rw-r--r--django/db/backends/postgresql/creation.py5
-rw-r--r--django/db/backends/postgresql/operations.py31
-rw-r--r--django/db/backends/postgresql_psycopg2/base.py2
-rw-r--r--django/db/backends/signals.py2
-rw-r--r--django/db/backends/sqlite3/base.py2
-rw-r--r--django/db/backends/sqlite3/creation.py6
-rw-r--r--django/db/models/base.py15
-rw-r--r--django/db/models/fields/__init__.py19
-rw-r--r--django/db/models/fields/related.py23
-rw-r--r--django/db/models/query.py5
-rw-r--r--django/db/models/signals.py10
-rw-r--r--django/db/models/sql/query.py5
-rw-r--r--django/dispatch/__init__.py2
-rw-r--r--django/dispatch/dispatcher.py16
-rw-r--r--django/forms/fields.py5
-rw-r--r--django/forms/forms.py20
-rw-r--r--django/forms/formsets.py14
-rw-r--r--django/forms/models.py58
-rw-r--r--django/forms/widgets.py45
-rw-r--r--django/http/__init__.py44
-rw-r--r--django/middleware/csrf.py69
-rw-r--r--django/template/defaultfilters.py16
-rw-r--r--django/template/defaulttags.py13
-rw-r--r--django/test/__init__.py1
-rw-r--r--django/test/client.py31
-rw-r--r--django/test/testcases.py11
-rw-r--r--django/test/utils.py25
-rw-r--r--django/utils/datastructures.py25
-rw-r--r--django/utils/formats.py20
-rw-r--r--django/utils/hashcompat.py8
-rw-r--r--django/utils/text.py12
-rw-r--r--django/utils/translation/trans_real.py2
-rw-r--r--django/views/csrf.py17
-rw-r--r--django/views/debug.py21
-rw-r--r--django/views/generic/simple.py10
160 files changed, 11071 insertions, 3982 deletions
diff --git a/django/__init__.py b/django/__init__.py
index cdaf1ec40e..6293d15c47 100644
--- a/django/__init__.py
+++ b/django/__init__.py
@@ -1,4 +1,4 @@
-VERSION = (1, 2, 1, 'final', 0)
+VERSION = (1, 3, 0, 'alpha', 0)
def get_version():
version = '%s.%s' % (VERSION[0], VERSION[1])
diff --git a/django/conf/__init__.py b/django/conf/__init__.py
index d94f6e9867..bda0ef3691 100644
--- a/django/conf/__init__.py
+++ b/django/conf/__init__.py
@@ -103,6 +103,12 @@ class Settings(object):
self.INSTALLED_APPS = new_installed_apps
if hasattr(time, 'tzset') and getattr(self, 'TIME_ZONE'):
+ # When we can, attempt to validate the timezone. If we can't find
+ # this file, no check happens and it's harmless.
+ zoneinfo_root = '/usr/share/zoneinfo'
+ if (os.path.exists(zoneinfo_root) and not
+ os.path.exists(os.path.join(zoneinfo_root, *(self.TIME_ZONE.split('/'))))):
+ raise ValueError("Incorrect timezone setting: %s" % 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
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 49dc3da8f9..84ca140a45 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -54,7 +54,7 @@ LANGUAGES = (
('en', gettext_noop('English')),
('en-gb', gettext_noop('British English')),
('es', gettext_noop('Spanish')),
- ('es-ar', gettext_noop('Argentinean Spanish')),
+ ('es-ar', gettext_noop('Argentinian Spanish')),
('et', gettext_noop('Estonian')),
('eu', gettext_noop('Basque')),
('fa', gettext_noop('Persian')),
@@ -78,6 +78,7 @@ LANGUAGES = (
('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')),
@@ -372,8 +373,8 @@ DECIMAL_SEPARATOR = '.'
# Boolean that sets whether to add thousand separator when formatting numbers
USE_THOUSAND_SEPARATOR = False
-# Number of digits that will be togheter, when spliting them by THOUSAND_SEPARATOR
-# 0 means no grouping, 3 means splitting by thousands...
+# 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
diff --git a/django/conf/locale/ca/LC_MESSAGES/django.mo b/django/conf/locale/ca/LC_MESSAGES/django.mo
index 457a828047..2002d5e601 100644
--- a/django/conf/locale/ca/LC_MESSAGES/django.mo
+++ b/django/conf/locale/ca/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/ca/LC_MESSAGES/django.po b/django/conf/locale/ca/LC_MESSAGES/django.po
index f8cd8aa609..2ebfc654cd 100644
--- a/django/conf/locale/ca/LC_MESSAGES/django.po
+++ b/django/conf/locale/ca/LC_MESSAGES/django.po
@@ -1,11 +1,11 @@
-# translation of django.po to
+# translation of django.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: 2009-11-30 11:19+0100\n"
+"POT-Creation-Date: 2010-06-03 20:18+0200\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"
@@ -14,225 +14,265 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: conf/global_settings.py:44
+#: .\conf\global_settings.py:44
msgid "Arabic"
-msgstr "aràbic"
+msgstr "àrab"
-#: conf/global_settings.py:45
+#: .\conf\global_settings.py:45
+msgid "Bulgarian"
+msgstr "búlgar"
+
+#: .\conf\global_settings.py:46
msgid "Bengali"
msgstr "bengalí"
-#: conf/global_settings.py:46
-msgid "Bulgarian"
-msgstr "búlgar"
+#: .\conf\global_settings.py:47
+msgid "Bosnian"
+msgstr "bosnià"
-#: conf/global_settings.py:47
+#: .\conf\global_settings.py:48
msgid "Catalan"
msgstr "català"
-#: conf/global_settings.py:48
+#: .\conf\global_settings.py:49
msgid "Czech"
msgstr "txec"
-#: conf/global_settings.py:49
+#: .\conf\global_settings.py:50
msgid "Welsh"
-msgstr "galès"
+msgstr "gal·lès"
-#: conf/global_settings.py:50
+#: .\conf\global_settings.py:51
msgid "Danish"
msgstr "danès"
-#: conf/global_settings.py:51
+#: .\conf\global_settings.py:52
msgid "German"
msgstr "alemany"
-#: conf/global_settings.py:52
+#: .\conf\global_settings.py:53
msgid "Greek"
msgstr "grec"
-#: conf/global_settings.py:53
+#: .\conf\global_settings.py:54
msgid "English"
msgstr "anglès"
-#: conf/global_settings.py:54
+#: .\conf\global_settings.py:55
+msgid "British English"
+msgstr "anglès britànic"
+
+#: .\conf\global_settings.py:56
msgid "Spanish"
msgstr "espanyol"
-#: conf/global_settings.py:55
-msgid "Estonian"
-msgstr "estonià"
-
-#: conf/global_settings.py:56
+#: .\conf\global_settings.py:57
msgid "Argentinean Spanish"
msgstr "castellà argentí"
-#: conf/global_settings.py:57
+#: .\conf\global_settings.py:58
+msgid "Estonian"
+msgstr "estonià"
+
+#: .\conf\global_settings.py:59
msgid "Basque"
msgstr "euskera"
-#: conf/global_settings.py:58
+#: .\conf\global_settings.py:60
msgid "Persian"
msgstr "persa"
-#: conf/global_settings.py:59
+#: .\conf\global_settings.py:61
msgid "Finnish"
msgstr "finlandès"
-#: conf/global_settings.py:60
+#: .\conf\global_settings.py:62
msgid "French"
msgstr "francès"
-#: conf/global_settings.py:61
+#: .\conf\global_settings.py:63
+msgid "Frisian"
+msgstr "frisi"
+
+#: .\conf\global_settings.py:64
msgid "Irish"
msgstr "irlandès"
-#: conf/global_settings.py:62
+#: .\conf\global_settings.py:65
msgid "Galician"
msgstr "gallec"
-#: conf/global_settings.py:63
-msgid "Hungarian"
-msgstr "húngar"
-
-#: conf/global_settings.py:64
+#: .\conf\global_settings.py:66
msgid "Hebrew"
msgstr "hebreu"
-#: conf/global_settings.py:65
+#: .\conf\global_settings.py:67
msgid "Hindi"
msgstr "hindi"
-#: conf/global_settings.py:66
+#: .\conf\global_settings.py:68
msgid "Croatian"
msgstr "croat"
-#: conf/global_settings.py:67
+#: .\conf\global_settings.py:69
+msgid "Hungarian"
+msgstr "hongarès"
+
+#: .\conf\global_settings.py:70
+msgid "Indonesian"
+msgstr "indonesi"
+
+#: .\conf\global_settings.py:71
msgid "Icelandic"
msgstr "islandès"
-#: conf/global_settings.py:68
+#: .\conf\global_settings.py:72
msgid "Italian"
msgstr "italià"
-#: conf/global_settings.py:69
+#: .\conf\global_settings.py:73
msgid "Japanese"
msgstr "japonès"
-#: conf/global_settings.py:70
+#: .\conf\global_settings.py:74
msgid "Georgian"
msgstr "georgià"
-#: conf/global_settings.py:71
-msgid "Korean"
-msgstr "coreà"
-
-#: conf/global_settings.py:72
+#: .\conf\global_settings.py:75
msgid "Khmer"
msgstr "khmer"
-#: conf/global_settings.py:73
+#: .\conf\global_settings.py:76
msgid "Kannada"
-msgstr "canès"
+msgstr "kannarès"
-#: conf/global_settings.py:74
-msgid "Latvian"
-msgstr "letó"
+#: .\conf\global_settings.py:77
+msgid "Korean"
+msgstr "coreà"
-#: conf/global_settings.py:75
+#: .\conf\global_settings.py:78
msgid "Lithuanian"
msgstr "lituà"
-#: conf/global_settings.py:76
+#: .\conf\global_settings.py:79
+msgid "Latvian"
+msgstr "letó"
+
+#: .\conf\global_settings.py:80
msgid "Macedonian"
msgstr "macedoni"
-#: conf/global_settings.py:77
+#: .\conf\global_settings.py:81
+msgid "Mongolian"
+msgstr "mongol"
+
+#: .\conf\global_settings.py:82
msgid "Dutch"
msgstr "holandès"
-#: conf/global_settings.py:78
+#: .\conf\global_settings.py:83
msgid "Norwegian"
-msgstr "norueg"
+msgstr "noruec"
+
+#: .\conf\global_settings.py:84
+msgid "Norwegian Bokmal"
+msgstr "noruec bokmal"
+
+#: .\conf\global_settings.py:85
+msgid "Norwegian Nynorsk"
+msgstr "noruec nynorsk"
-#: conf/global_settings.py:79
+#: .\conf\global_settings.py:86
msgid "Polish"
-msgstr "polac"
+msgstr "polonès"
-#: conf/global_settings.py:80
+#: .\conf\global_settings.py:87
msgid "Portuguese"
msgstr "portuguès"
-#: conf/global_settings.py:81
+#: .\conf\global_settings.py:88
msgid "Brazilian Portuguese"
msgstr "portuguès de brasil"
-#: conf/global_settings.py:82
+#: .\conf\global_settings.py:89
msgid "Romanian"
-msgstr "rumanès"
+msgstr "romanès"
-#: conf/global_settings.py:83
+#: .\conf\global_settings.py:90
msgid "Russian"
-msgstr "rús"
+msgstr "rus"
-#: conf/global_settings.py:84
+#: .\conf\global_settings.py:91
msgid "Slovak"
msgstr "eslovac"
-#: conf/global_settings.py:85
+#: .\conf\global_settings.py:92
msgid "Slovenian"
-msgstr "esloveni"
+msgstr "eslovè"
-#: conf/global_settings.py:86
+#: .\conf\global_settings.py:93
+msgid "Albanian"
+msgstr "albanès"
+
+#: .\conf\global_settings.py:94
msgid "Serbian"
msgstr "serbi"
-#: conf/global_settings.py:87
+#: .\conf\global_settings.py:95
+msgid "Serbian Latin"
+msgstr "serbi llatí"
+
+#: .\conf\global_settings.py:96
msgid "Swedish"
msgstr "suec"
-#: conf/global_settings.py:88
+#: .\conf\global_settings.py:97
msgid "Tamil"
msgstr "tàmil"
-#: conf/global_settings.py:89
+#: .\conf\global_settings.py:98
msgid "Telugu"
msgstr "telugu"
-#: conf/global_settings.py:90
+#: .\conf\global_settings.py:99
msgid "Thai"
msgstr "tailandès"
-#: conf/global_settings.py:91
+#: .\conf\global_settings.py:100
msgid "Turkish"
msgstr "turc"
-#: conf/global_settings.py:92
+#: .\conf\global_settings.py:101
msgid "Ukrainian"
-msgstr "ucranià"
+msgstr "ucraïnès"
+
+#: .\conf\global_settings.py:102
+msgid "Vietnamese"
+msgstr "vietnamita"
-#: conf/global_settings.py:93
+#: .\conf\global_settings.py:103
msgid "Simplified Chinese"
msgstr "xinès simplificat"
-#: conf/global_settings.py:94
+#: .\conf\global_settings.py:104
msgid "Traditional Chinese"
msgstr "xinès tradicional"
-#: contrib/admin/actions.py:60
+#: .\contrib\admin\actions.py:48
#, 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
+#: .\contrib\admin\actions.py:55 .\contrib\admin\options.py:1125
msgid "Are you sure?"
-msgstr "Esteu segurs?"
+msgstr "N'esteu segur?"
-#: contrib/admin/actions.py:85
+#: .\contrib\admin\actions.py:73
#, python-format
msgid "Delete selected %(verbose_name_plural)s"
msgstr "Eliminar els %(verbose_name_plural)s seleccionats"
-#: contrib/admin/filterspecs.py:44
+#: .\contrib\admin\filterspecs.py:44
#, python-format
msgid ""
"<h3>By %s:</h3>\n"
@@ -241,175 +281,197 @@ 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
+#: .\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
+#: .\contrib\admin\filterspecs.py:113
msgid "Any date"
msgstr "Qualsevol data"
-#: contrib/admin/filterspecs.py:114
+#: .\contrib\admin\filterspecs.py:114
msgid "Today"
msgstr "Avui"
-#: contrib/admin/filterspecs.py:117
+#: .\contrib\admin\filterspecs.py:117
msgid "Past 7 days"
msgstr "Últims 7 dies"
-#: contrib/admin/filterspecs.py:119
+#: .\contrib\admin\filterspecs.py:119
msgid "This month"
msgstr "Aquest mes"
-#: contrib/admin/filterspecs.py:121
+#: .\contrib\admin\filterspecs.py:121
msgid "This year"
msgstr "Aquest any"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+#: .\contrib\admin\filterspecs.py:147 .\forms\widgets.py:466
msgid "Yes"
-msgstr "Si"
+msgstr "Sí"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:435
+#: .\contrib\admin\filterspecs.py:147 .\forms\widgets.py:466
msgid "No"
msgstr "No"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:435
+#: .\contrib\admin\filterspecs.py:154 .\forms\widgets.py:466
msgid "Unknown"
msgstr "Desconegut"
-#: contrib/admin/helpers.py:14
+#: .\contrib\admin\helpers.py:20
msgid "Action:"
msgstr "Acció:"
-#: contrib/admin/models.py:19
+#: .\contrib\admin\models.py:19
msgid "action time"
msgstr "moment de l'acció"
-#: contrib/admin/models.py:22
+#: .\contrib\admin\models.py:22
msgid "object id"
-msgstr "id del objecte"
+msgstr "id de l'objecte"
-#: contrib/admin/models.py:23
+#: .\contrib\admin\models.py:23
msgid "object repr"
msgstr "'repr' de l'objecte"
-#: contrib/admin/models.py:24
+#: .\contrib\admin\models.py:24
msgid "action flag"
-msgstr "marca de l'acció"
+msgstr "indicador de l'acció"
-#: contrib/admin/models.py:25
+#: .\contrib\admin\models.py:25
msgid "change message"
msgstr "missatge del canvi"
-#: contrib/admin/models.py:28
+#: .\contrib\admin\models.py:28
msgid "log entry"
msgstr "entrada del registre"
-#: contrib/admin/models.py:29
+#: .\contrib\admin\models.py:29
msgid "log entries"
msgstr "entrades del registre"
-#: contrib/admin/options.py:134 contrib/admin/options.py:148
+#: .\contrib\admin\options.py:138 .\contrib\admin\options.py:153
msgid "None"
msgstr "cap"
-#: contrib/admin/options.py:521
+#: .\contrib\admin\options.py:559
#, 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
+#: .\contrib\admin\options.py:559 .\contrib\admin\options.py:569
+#: .\contrib\comments\templates\comments\preview.html.py:16
+#: .\db\models\base.py:845 .\forms\models.py:568
msgid "and"
msgstr "i"
-#: contrib/admin/options.py:526
+#: .\contrib\admin\options.py:564
#, python-format
msgid "Added %(name)s \"%(object)s\"."
msgstr "Afegit %(name)s \"%(object)s\""
-#: contrib/admin/options.py:530
+#: .\contrib\admin\options.py:568
#, 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
+#: .\contrib\admin\options.py:573
#, python-format
msgid "Deleted %(name)s \"%(object)s\"."
msgstr "Eliminat %(name)s \"%(object)s\"."
-#: contrib/admin/options.py:539
+#: .\contrib\admin\options.py:577
msgid "No fields changed."
-msgstr "Cap camp canviat."
+msgstr "Cap camp modificat."
-#: contrib/admin/options.py:601 contrib/auth/admin.py:67
+#: .\contrib\admin\options.py:643
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr "El/la %(name)s \"%(obj)s\".ha estat afegit/da amb èxit."
+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
+#: .\contrib\admin\options.py:647 .\contrib\admin\options.py:680
msgid "You may edit it again below."
-msgstr "Podeu editar-lo de nou a baix."
+msgstr "Podeu editar-lo de nou a sota."
-#: contrib/admin/options.py:615 contrib/admin/options.py:648
+#: .\contrib\admin\options.py:657 .\contrib\admin\options.py:690
#, python-format
msgid "You may add another %s below."
-msgstr "Podeu afegir un altre %s a baix."
+msgstr "Podeu afegir un altre %s a sota."
-#: contrib/admin/options.py:636
+#: .\contrib\admin\options.py:678
#, 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
+#: .\contrib\admin\options.py:686
#, 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."
+"S'ha afegit amb èxit el/la %(name)s \"%(obj)s\". Pot editar-lo de nou a sota."
-#: contrib/admin/options.py:777
+#: .\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 ""
+"Heu de seleccionar els elements per poder realitzar-hi accions. "
+"No heu seleccionat cap element."
+
+#: .\contrib\admin\options.py:759
+msgid "No action selected."
+msgstr "no heu seleccionat cap acció"
+
+#: .\contrib\admin\options.py:840
#, python-format
msgid "Add %s"
msgstr "Afegir %s"
-#: contrib/admin/options.py:809 contrib/admin/options.py:1011
+#: .\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 existèix cap objecte %(name)s amb la clau primària %(key)r."
+msgstr "No existeix cap objecte %(name)s amb la clau primària %(key)r."
-#: contrib/admin/options.py:866
+#: .\contrib\admin\options.py:931
#, python-format
msgid "Change %s"
msgstr "Modificar %s"
-#: contrib/admin/options.py:910
+#: .\contrib\admin\options.py:977
msgid "Database error"
msgstr "Error de base de dades"
-#: contrib/admin/options.py:946
+#: .\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 s'ha modificat amb èxit."
msgstr[1] "%(count)s %(name)s s'han modificat amb èxit."
-#: contrib/admin/options.py:1026
+#: .\contrib\admin\options.py:1066
+#, python-format
+msgid "%(total_count)s selected"
+msgid_plural "All %(total_count)s selected"
+msgstr[0] "%(total_count)s seleccionat(s)"
+msgstr[1] "Tots %(total_count)s seleccionat(s)"
+
+#: .\contrib\admin\options.py:1071
+#, python-format
+msgid "0 of %(cnt)s selected"
+msgstr "0 de %(cnt)s seleccionats"
+
+#: .\contrib\admin\options.py:1118
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr "El/la %(name)s \"%(obj)s\" ha estat eliminat amb èxit."
+msgstr "El/la %(name)s \"%(obj)s\" s'ha eliminat amb èxit."
-#: contrib/admin/options.py:1063
+#: .\contrib\admin\options.py:1155
#, 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
+#: .\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."
@@ -417,216 +479,223 @@ 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
+#: .\contrib\admin\sites.py:307 .\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."
+msgstr "Si us plau, entreu de nou perquè la vostra sessió ha caducat."
-#: contrib/admin/sites.py:299 contrib/admin/views/decorators.py:47
+#: .\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 ""
-"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. "
+"Sembla ser que el vostre navegador no està configurat per acceptar galetes "
+"('cookies'). Si us plau, habiliteu les galetes, 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
+#: .\contrib\admin\sites.py:330 .\contrib\admin\sites.py:336
+#: .\contrib\admin\views\decorators.py:66
msgid "Usernames cannot contain the '@' character."
-msgstr "Els noms d'usuari no poden contenir el caracter '@'."
+msgstr "Els noms d'usuari no poden contenir el caràcter '@'."
-#: contrib/admin/sites.py:318 contrib/admin/views/decorators.py:62
+#: .\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 ""
-"La vostra adreça de correu no és el vostre nom d'usuari. Provi '%s' en tot "
-"cas."
+"La vostra adreça de correu no és el vostre nom d'usuari. Provi '%s' en el "
+"seu lloc."
-#: contrib/admin/sites.py:374
+#: .\contrib\admin\sites.py:389
msgid "Site administration"
-msgstr "Lloc administratiu"
+msgstr "Administració del lloc"
-#: 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
+#: .\contrib\admin\sites.py:403
+#: .\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 "Iniciar sessió"
-#: contrib/admin/sites.py:433
+#: .\contrib\admin\sites.py:448
#, 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
+#: .\contrib\admin\widgets.py:75
msgid "Date:"
msgstr "Data:"
-#: contrib/admin/widgets.py:72
+#: .\contrib\admin\widgets.py:75
msgid "Time:"
msgstr "Hora:"
-#: contrib/admin/widgets.py:96
+#: .\contrib\admin\widgets.py:99
msgid "Currently:"
msgstr "Actualment:"
-#: contrib/admin/widgets.py:96
+#: .\contrib\admin\widgets.py:99
msgid "Change:"
msgstr "Modificar:"
-#: contrib/admin/widgets.py:125
+#: .\contrib\admin\widgets.py:129
msgid "Lookup"
msgstr "Cercar"
-#: contrib/admin/widgets.py:237
+#: .\contrib\admin\widgets.py:244
msgid "Add Another"
-msgstr "Afegir un altre"
+msgstr "Afegir-ne un altre"
-#: contrib/admin/templates/admin/404.html:4
-#: contrib/admin/templates/admin/404.html:8
+#: .\contrib\admin\templates\admin\404.html.py:4
+#: .\contrib\admin\templates\admin\404.html.py:8
msgid "Page not found"
msgstr "No s'ha pogut trobar la pàgina"
-#: contrib/admin/templates/admin/404.html:10
+#: .\contrib\admin\templates\admin\404.html.py: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
+#: .\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 "Inici"
-#: contrib/admin/templates/admin/500.html:4
+#: .\contrib\admin\templates\admin\500.html.py:4
msgid "Server error"
msgstr "Error del servidor"
-#: contrib/admin/templates/admin/500.html:6
+#: .\contrib\admin\templates\admin\500.html.py:6
msgid "Server error (500)"
msgstr "Error del servidor (500)"
-#: contrib/admin/templates/admin/500.html:9
+#: .\contrib\admin\templates\admin\500.html.py:9
msgid "Server Error <em>(500)</em>"
msgstr "Error del servidor <em>(500)</em>"
-#: contrib/admin/templates/admin/500.html:10
+#: .\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 ""
-"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."
+"S'ha produït un error. Se n'ha informat els administradors del lloc per "
+"correu electrònic, i hauria d'arreglar-se en breu. Gràcies per la vostra "
+"paciència."
-#: contrib/admin/templates/admin/actions.html:4
+#: .\contrib\admin\templates\admin\actions.html.py:4
msgid "Run the selected action"
-msgstr "Executar la acció seleccionada"
+msgstr "Executar l'acció seleccionada"
-#: contrib/admin/templates/admin/actions.html:4
+#: .\contrib\admin\templates\admin\actions.html.py:4
msgid "Go"
msgstr "Anar"
-#: contrib/admin/templates/admin/app_index.html:10
-#: contrib/admin/templates/admin/index.html:19
+#: .\contrib\admin\templates\admin\actions.html.py:11
+msgid "Click here to select the objects across all pages"
+msgstr "Feu clic aquí per seleccionar els objectes a totes les pàgines"
+
+#: .\contrib\admin\templates\admin\actions.html.py:11
+#, python-format
+msgid "Select all %(total_count)s %(module_name)s"
+msgstr "Seleccioneu tots %(total_count)s %(module_name)s"
+
+#: .\contrib\admin\templates\admin\actions.html.py:13
+msgid "Clear selection"
+msgstr "Netejar la selecció"
+
+#: .\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:27
+#: .\contrib\admin\templates\admin\base.html.py:28
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
+#: .\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 "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
+#: .\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 "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
+#: .\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 "Finalitzar sessió"
-#: contrib/admin/templates/admin/base_site.html:4
+#: .\contrib\admin\templates\admin\base_site.html.py:4
msgid "Django site admin"
msgstr "Lloc administratiu de Django"
-#: contrib/admin/templates/admin/base_site.html:7
+#: .\contrib\admin\templates\admin\base_site.html.py:7
msgid "Django administration"
msgstr "Administració de Django"
-#: contrib/admin/templates/admin/change_form.html:20
-#: contrib/admin/templates/admin/index.html:29
+#: .\contrib\admin\templates\admin\change_form.html.py:21
+#: .\contrib\admin\templates\admin\index.html.py:29
msgid "Add"
msgstr "Afegir"
-#: contrib/admin/templates/admin/change_form.html:27
-#: contrib/admin/templates/admin/object_history.html:10
+#: .\contrib\admin\templates\admin\change_form.html.py:28
+#: .\contrib\admin\templates\admin\object_history.html.py: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
+#: .\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 "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
+#: .\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] "Si us plau, corregiu l'error mostrat a baix."
-msgstr[1] "Si us plau, corregiu els errors mostrats a baix."
+msgstr[0] "Si us plau, corregiu l'error mostrat a sota."
+msgstr[1] "Si us plau, corregiu els errors mostrats a sota."
-#: contrib/admin/templates/admin/change_list.html:46
+#: .\contrib\admin\templates\admin\change_list.html.py:63
#, python-format
msgid "Add %(name)s"
msgstr "Afegir %(name)s"
-#: contrib/admin/templates/admin/change_list.html:65
+#: .\contrib\admin\templates\admin\change_list.html.py:82
msgid "Filter"
msgstr "Filtre"
-#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
+#: .\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 "Eliminar"
-#: contrib/admin/templates/admin/delete_confirmation.html:16
+#: .\contrib\admin\templates\admin\delete_confirmation.html.py:16
#, python-format
msgid ""
"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting "
@@ -634,10 +703,10 @@ msgid ""
"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 "
+"d'objectes relacionats, però el vostre compte no te permisos per esborrar "
"els tipus d'objecte següents:"
-#: contrib/admin/templates/admin/delete_confirmation.html:23
+#: .\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\"? "
@@ -646,16 +715,16 @@ 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
+#: .\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 "Si, estic segur"
+msgstr "Sí, n'estic segur"
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:9
+#: .\contrib\admin\templates\admin\delete_selected_confirmation.html.py:9
msgid "Delete multiple objects"
-msgstr "Eliminar multiples objectes"
+msgstr "Eliminar múltiples objectes"
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:15
+#: .\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 "
@@ -663,500 +732,426 @@ msgid ""
"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 "
+"relacionats, però el vostre compte no te permisos per esborrar els tipus "
"d'objecte següents:"
-#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
+#: .\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 ""
-"Esteu segurs de voler esborrar els/les %(object_name)s seleccionats? Tots "
+"Esteu segur 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
+#: .\contrib\admin\templates\admin\filter.html.py:2
#, python-format
msgid " By %(filter_title)s "
msgstr "Per %(filter_title)s "
-#: contrib/admin/templates/admin/index.html:18
+#: .\contrib\admin\templates\admin\index.html.py: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
+#: .\contrib\admin\templates\admin\index.html.py:35
msgid "Change"
msgstr "Modificar"
-#: contrib/admin/templates/admin/index.html:45
+#: .\contrib\admin\templates\admin\index.html.py: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
+#: .\contrib\admin\templates\admin\index.html.py:53
msgid "Recent Actions"
msgstr "Accions recents"
-#: contrib/admin/templates/admin/index.html:54
+#: .\contrib\admin\templates\admin\index.html.py:54
msgid "My Actions"
msgstr "Les meves accions"
-#: contrib/admin/templates/admin/index.html:58
+#: .\contrib\admin\templates\admin\index.html.py:58
msgid "None available"
msgstr "Cap disponible"
-#: contrib/admin/templates/admin/index.html:72
+#: .\contrib\admin\templates\admin\index.html.py:72
msgid "Unknown content"
msgstr "Contingut desconegut"
-#: contrib/admin/templates/admin/invalid_setup.html:7
+#: .\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 ""
-"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."
+"Hi ha algun problema a la instal·lació de la vostra base de dades. Assegureu-"
+"vos que s'han creat les taules adients, i que la base de dades és llegible "
+"per l'usuari apropiat."
-#: contrib/admin/templates/admin/login.html:19
+#: .\contrib\admin\templates\admin\login.html.py:19
msgid "Username:"
-msgstr "Usuari:"
+msgstr "Nom d'usuari:"
-#: contrib/admin/templates/admin/login.html:22
+#: .\contrib\admin\templates\admin\login.html.py:22
msgid "Password:"
msgstr "Contrasenya:"
-#: contrib/admin/templates/admin/object_history.html:22
+#: .\contrib\admin\templates\admin\object_history.html.py:22
msgid "Date/time"
msgstr "Data/hora"
-#: contrib/admin/templates/admin/object_history.html:23
+#: .\contrib\admin\templates\admin\object_history.html.py:23
msgid "User"
msgstr "Usuari"
-#: contrib/admin/templates/admin/object_history.html:24
+#: .\contrib\admin\templates\admin\object_history.html.py: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
+#: .\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 ""
-"Aquest objecte no té historial de canvis. Probablement no va ser afegit "
+"Aquest objecte no té historial de canvis. Probablement no es va afegir "
"utilitzant aquest lloc administratiu."
-#: contrib/admin/templates/admin/pagination.html:10
+#: .\contrib\admin\templates\admin\pagination.html.py:10
msgid "Show all"
msgstr "Mostrar tots"
-#: contrib/admin/templates/admin/pagination.html:11
-#: contrib/admin/templates/admin/submit_line.html:3
+#: .\contrib\admin\templates\admin\pagination.html.py:11
+#: .\contrib\admin\templates\admin\submit_line.html.py:3
msgid "Save"
msgstr "Desar"
-#: contrib/admin/templates/admin/search_form.html:8
+#: .\contrib\admin\templates\admin\search_form.html.py:8
msgid "Search"
msgstr "Cerca"
-#: contrib/admin/templates/admin/search_form.html:10
+#: .\contrib\admin\templates\admin\search_form.html.py: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
+#: .\contrib\admin\templates\admin\search_form.html.py:10
#, python-format
msgid "%(full_result_count)s total"
msgstr "%(full_result_count)s en total"
-#: contrib/admin/templates/admin/submit_line.html:5
+#: .\contrib\admin\templates\admin\submit_line.html.py:5
msgid "Save as new"
msgstr "Desar com a nou"
-#: contrib/admin/templates/admin/submit_line.html:6
+#: .\contrib\admin\templates\admin\submit_line.html.py:6
msgid "Save and add another"
msgstr "Desar i afegir-ne un de nou"
-#: contrib/admin/templates/admin/submit_line.html:7
+#: .\contrib\admin\templates\admin\submit_line.html.py:7
msgid "Save and continue editing"
msgstr "Desar i continuar editant"
-#: contrib/admin/templates/admin/auth/user/add_form.html:6
+#: .\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 ""
-"Primer, entreu un usuari i una contrasenya. Després podreu editar més "
+"Primer, entreu un nom d'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\change_password.html.py:28
+#, 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/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
+#: .\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 "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
+#: .\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 "Contrasenya (de nou)"
-#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:41
+#: .\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 "Introduïu la mateixa contrasenya de dalt, per fer-ne la verificació."
-#: contrib/admin/templates/admin/auth/user/change_password.html:27
+#: .\contrib\admin\templates\admin\edit_inline\stacked.html.py:64
+#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:110
#, 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>"
+msgid "Add another %(verbose_name)s"
+msgstr "Afegir un/a altre/a %(verbose_name)s."
-#: contrib/admin/templates/admin/edit_inline/tabular.html:15
+#: .\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 "Eliminar"
+
+#: .\contrib\admin\templates\admin\edit_inline\tabular.html.py:15
msgid "Delete?"
msgstr "Eliminar?"
-#: contrib/admin/templates/registration/logged_out.html:8
+#: .\contrib\admin\templates\registration\logged_out.html.py: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."
+msgstr "Gràcies per passar una estona de qualitat al web durant el dia d'avui."
-#: contrib/admin/templates/registration/logged_out.html:10
+#: .\contrib\admin\templates\registration\logged_out.html.py: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
+#: .\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 "Canvi de contrasenya"
-#: contrib/admin/templates/registration/password_change_done.html:6
-#: contrib/admin/templates/registration/password_change_done.html:10
+#: .\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 "Contrasenya canviada amb èxit"
-#: contrib/admin/templates/registration/password_change_done.html:12
+#: .\contrib\admin\templates\registration\password_change_done.html.py:12
msgid "Your password was changed."
msgstr "La seva contrasenya ha estat canviada."
-#: contrib/admin/templates/registration/password_change_form.html:12
+#: .\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 ""
"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."
+"l'heu escrita 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.py:27
+#: .\contrib\auth\forms.py:170
+msgid "Old password"
+msgstr "Contrasenya antiga"
-#: 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.py:32
+#: .\contrib\auth\forms.py:144
+msgid "New password"
+msgstr "Contrasenya nova"
-#: contrib/admin/templates/registration/password_change_form.html:23
-#: contrib/admin/templates/registration/password_reset_confirm.html:21
+#: .\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 "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
+msgstr "Canviar la meva contrasenya:"
+
+#: .\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 "Restablir contrasenya"
-#: contrib/admin/templates/registration/password_reset_complete.html:6
-#: contrib/admin/templates/registration/password_reset_complete.html:10
+#: .\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 "Contrasenya restablerta"
-#: contrib/admin/templates/registration/password_reset_complete.html:12
+#: .\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 ""
-"La seva contrasenya ha estat canviada. Ara pot continuar i iniciar sessió."
+"S'ha canviat la vostra contrasenya. Ara podeu continuar i iniciar sessió."
-#: contrib/admin/templates/registration/password_reset_confirm.html:4
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:4
msgid "Password reset confirmation"
-msgstr "Confirmació de reestabliment de contrasenya"
+msgstr "Confirmació de restabliment de contrasenya"
-#: contrib/admin/templates/registration/password_reset_confirm.html:12
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:12
msgid "Enter new password"
-msgstr "Introdueixi la nova contrasenya"
+msgstr "Introduïu la nova contrasenya"
-#: contrib/admin/templates/registration/password_reset_confirm.html:14
+#: .\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 ""
"Si us plau, introduïu la vostra nova contrasenya dues vegades, per verificar "
-"que l'heu escrit correctament."
+"que l'heu escrita correctament."
-#: contrib/admin/templates/registration/password_reset_confirm.html:26
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:18
+msgid "New password:"
+msgstr "Contrasenya nova:"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:20
+msgid "Confirm password:"
+msgstr "Confirmar contrasenya:"
+
+#: .\contrib\admin\templates\registration\password_reset_confirm.html.py:26
msgid "Password reset unsuccessful"
-msgstr "Restabliment de contrasenya fallit"
+msgstr "Restabliment de contrasenya fallat"
-#: contrib/admin/templates/registration/password_reset_confirm.html:28
+#: .\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 ""
-"L'enllaç de restabliment de contrasenya era invàlid, segurament ja deu haver "
-"estat utilitzat. Per favor, soliciti un nou reestabliment de contrasenya."
+"L'enllaç de restabliment de contrasenya era invàlid, potser perquè ja s'ha "
+"utilitzat. Si us plau, sol·liciteu un nou reestabliment de contrasenya."
-#: contrib/admin/templates/registration/password_reset_done.html:6
-#: contrib/admin/templates/registration/password_reset_done.html:10
+#: .\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 "Restabliment de contrasenya exitós"
+msgstr "Restabliment de contrasenya amb èxit"
-#: contrib/admin/templates/registration/password_reset_done.html:12
+#: .\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 ""
"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."
+"de correu electrònic que ens heu indicat. L'hauríeu de rebre en breu."
-#: contrib/admin/templates/registration/password_reset_email.html:2
+#: .\contrib\admin\templates\registration\password_reset_email.html.py: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 "
+"Esteu rebent aquest missatge perquè vau sol·licitar un restabliment de "
"contrasenya."
-#: contrib/admin/templates/registration/password_reset_email.html:3
+#: .\contrib\admin\templates\registration\password_reset_email.html.py: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
+#: .\contrib\admin\templates\registration\password_reset_email.html.py: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:"
+msgstr ""
+"Si us plau, aneu a la pàgina següent i escolliu una nova contrasenya:"
-#: contrib/admin/templates/registration/password_reset_email.html:9
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:9
msgid "Your username, in case you've forgotten:"
-msgstr "El vostre nom d'usuari, en cas d'haver-lo oblidat:"
+msgstr "El vostre nom d'usuari, en cas que l'hagueu oblidat:"
-#: contrib/admin/templates/registration/password_reset_email.html:11
+#: .\contrib\admin\templates\registration\password_reset_email.html.py:11
msgid "Thanks for using our site!"
-msgstr "Gràcies per fer us del nostre lloc!"
+msgstr "Gràcies per fer ús del nostre lloc!"
-#: contrib/admin/templates/registration/password_reset_email.html:13
+#: .\contrib\admin\templates\registration\password_reset_email.html.py: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
+#: .\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 ""
"Heu oblidat la vostra contrasenya? Introduïu la vostra adreça de correu "
-"electrònic i li enviarem instruccions per canviar-la."
+"electrònic a sota, i us enviarem instruccions per canviar-la."
-#: contrib/admin/templates/registration/password_reset_form.html:16
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
msgid "E-mail address:"
msgstr "Adreça de correu electrònic:"
-#: contrib/admin/templates/registration/password_reset_form.html:16
+#: .\contrib\admin\templates\registration\password_reset_form.html.py:16
msgid "Reset my password"
msgstr "Restablir la meva contrasenya"
-#: contrib/admin/templatetags/admin_list.py:304
+#: .\contrib\admin\templatetags\admin_list.py:257
msgid "All dates"
msgstr "Totes les dates"
-#: contrib/admin/views/main.py:70
+#: .\contrib\admin\views\main.py:65
#, python-format
msgid "Select %s"
msgstr "Seleccioneu %s"
-#: contrib/admin/views/main.py:70
+#: .\contrib\admin\views\main.py:65
#, python-format
msgid "Select %s to change"
msgstr "Seleccioneu %s per modificar"
-#: contrib/admin/views/template.py:37 contrib/sites/models.py:38
+#: .\contrib\admin\views\template.py:38 .\contrib\sites\models.py:38
msgid "site"
msgstr "lloc"
-#: contrib/admin/views/template.py:39
+#: .\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
+#: .\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
+#: .\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
+#: .\contrib\admindocs\views.py:158 .\contrib\admindocs\views.py:160
+#: .\contrib\admindocs\views.py:162
msgid "view:"
msgstr "vista:"
-#: contrib/admindocs/views.py:190
+#: .\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
+#: .\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"
+msgstr "El model %(model_name)r no s'ha trobat a l'aplicació %(app_label)r"
-#: contrib/admindocs/views.py:209
+#: .\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
+#: .\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
+#: .\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
+#: .\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
+#: .\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
+#: .\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
+#: .\contrib\admindocs\views.py:361
#, 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
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:3
msgid "Bookmarklets"
msgstr "'Bookmarklets'"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:4
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:4
msgid "Documentation bookmarklets"
msgstr "'Bookmarklets' de documentació"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:8
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:8
msgid ""
"\n"
"<p class=\"help\">To install bookmarklets, drag the link to your bookmarks\n"
@@ -1167,203 +1162,197 @@ msgid ""
"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"
+"<p class=\"help\">Per tal d'instal·lar 'bookmarklets', arrosegueu l'enllaç\n"
+"a la vostra barra de marcadors, o feu click amb el botó dret a l'enllaç i\n"
+"afegiu-lo 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"
+"Observeu que per a alguns d'aquests 'bookmarklets' cal que estigueu veient\n"
+"el lloc des d'un ordinador designat com a \"intern\" (parleu\n"
+"amb el vostre administrador de sistemes si no esteu segurs si el vostre "
+"ordinador és \"intern\").</p>\n"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:18
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:18
msgid "Documentation for this page"
msgstr "Documentació d'aquesta pàgina"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:19
+#: .\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 ""
-"Us porta des de qualsevol pàgina de la documentació a la vista que la genera."
+"Us porta des de qualsevol pàgina a la documentació de la vista que la genera."
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:21
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:21
msgid "Show object ID"
-msgstr "Mostra el ID de l'objecte"
+msgstr "Mostra l'ID de l'objecte"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:22
+#: .\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 ""
-"Mostra el 'content-type' (tipus de contingut) i el ID inequívoc de les "
+"Mostra el 'content-type' (tipus de contingut) i l'ID inequívoc de les "
"pàgines que representen un únic objecte."
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:24
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:24
msgid "Edit this object (current window)"
msgstr "Editar aquest objecte (finestra actual)"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:25
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py: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
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py:27
msgid "Edit this object (new window)"
msgstr "Editar aquest objecte (nova finestra)"
-#: contrib/admindocs/templates/admin_doc/bookmarklets.html:28
+#: .\contrib\admindocs\templates\admin_doc\bookmarklets.html.py: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
+#: .\contrib\auth\admin.py:29
msgid "Personal info"
msgstr "Informació personal"
-#: contrib/auth/admin.py:22
+#: .\contrib\auth\admin.py:30
msgid "Permissions"
-msgstr "permisos"
+msgstr "Permisos"
-#: contrib/auth/admin.py:23
+#: .\contrib\auth\admin.py:31
msgid "Important dates"
msgstr "Dates importants"
-#: contrib/auth/admin.py:24
+#: .\contrib\auth\admin.py:32
msgid "Groups"
msgstr "Grups"
-#: contrib/auth/admin.py:80
-msgid "Add user"
-msgstr "Afegir usuari"
-
-#: contrib/auth/admin.py:106
+#: .\contrib\auth\admin.py:114
msgid "Password changed successfully."
-msgstr "Contrasenya cambiada amb èxit"
+msgstr "Contrasenya canviada amb èxit"
-#: contrib/auth/admin.py:112
+#: .\contrib\auth\admin.py:124
#, 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)."
+#: .\contrib\auth\forms.py:14 .\contrib\auth\forms.py:48
+#: .\contrib\auth\forms.py:60
+msgid "Username"
+msgstr "Nom d'usuari"
+
+#: .\contrib\auth\forms.py:15 .\contrib\auth\forms.py:49
+msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
msgstr ""
-"Obligatori. 30 o menys caràcters. Només caràcters alfanumèrics (lletres, "
-"dígits i el guió baix)."
+"Obligatori. 30 o menys caràcters. Només lletres, dígits i @/./+/-/_."
-#: 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:16 .\contrib\auth\forms.py:50
+msgid "This value may contain only letters, numbers and @/./+/-/_ characters."
+msgstr "Aquest valor ha de contenir només lletres, números i @/./+/-/_."
-#: contrib/auth/forms.py:18
+#: .\contrib\auth\forms.py:18
msgid "Password confirmation"
msgstr "Confirmació de contrasenya"
-#: contrib/auth/forms.py:30
+#: .\contrib\auth\forms.py:31
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
+#: .\contrib\auth\forms.py:37 .\contrib\auth\forms.py:156
+#: .\contrib\auth\forms.py:198
msgid "The two password fields didn't match."
msgstr "Els dos camps de contrasenya no coincideixen."
-#: contrib/auth/forms.py:82
+#: .\contrib\auth\forms.py:83
msgid "This account is inactive."
msgstr "Aquest compte està inactiu"
-#: contrib/auth/forms.py:87
+#: .\contrib\auth\forms.py:88
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ó."
+"El vostre navegador no sembla tenir les galetes ('cookies') activades. "
+"Aquestes són necessàries per iniciar la sessió."
-#: contrib/auth/forms.py:100
+#: .\contrib\auth\forms.py:101
msgid "E-mail"
msgstr "Correu electrònic"
-#: contrib/auth/forms.py:109
+#: .\contrib\auth\forms.py:110
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?"
+"Aquesta adreça de correu no té associat cap compte d'usuari. Esteu segurs "
+"que s'ha registrat?"
-#: contrib/auth/forms.py:135
+#: .\contrib\auth\forms.py:136
#, 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
+#: .\contrib\auth\forms.py:145
msgid "New password confirmation"
msgstr "Contrasenya nova confirmada"
-#: contrib/auth/forms.py:169
-msgid "Old password"
-msgstr "Contrasenya antiga"
-
-#: contrib/auth/forms.py:177
+#: .\contrib\auth\forms.py:178
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."
+"La vostra antiga contrasenya no és correcta. Si us plau, introduïu-la de nou."
-#: contrib/auth/models.py:63 contrib/auth/models.py:86
+#: .\contrib\auth\models.py:66 .\contrib\auth\models.py:94
msgid "name"
msgstr "nom"
-#: contrib/auth/models.py:65
+#: .\contrib\auth\models.py:68
msgid "codename"
msgstr "nom en clau"
-#: contrib/auth/models.py:68
+#: .\contrib\auth\models.py:72
msgid "permission"
msgstr "permís"
-#: contrib/auth/models.py:69 contrib/auth/models.py:87
+#: .\contrib\auth\models.py:73 .\contrib\auth\models.py:95
msgid "permissions"
msgstr "permisos"
-#: contrib/auth/models.py:90
+#: .\contrib\auth\models.py:98
msgid "group"
msgstr "grup"
-#: contrib/auth/models.py:91 contrib/auth/models.py:138
+#: .\contrib\auth\models.py:99 .\contrib\auth\models.py:206
msgid "groups"
msgstr "grups"
-#: contrib/auth/models.py:128
+#: .\contrib\auth\models.py:196
msgid "username"
msgstr "nom d'usuari"
-#: contrib/auth/models.py:129
+#: .\contrib\auth\models.py:196
+msgid ""
+"Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"
+msgstr ""
+"Obligatori. 30 o menys caràcters. Només lletres, números i @/./+/-/_"
+
+#: .\contrib\auth\models.py:197
msgid "first name"
msgstr "nom propi"
-#: contrib/auth/models.py:130
+#: .\contrib\auth\models.py:198
msgid "last name"
msgstr "cognoms"
-#: contrib/auth/models.py:131
+#: .\contrib\auth\models.py:199
msgid "e-mail address"
msgstr "adreça de correu electrònic"
-#: contrib/auth/models.py:132
+#: .\contrib\auth\models.py:200
msgid "password"
msgstr "contrasenya"
-#: contrib/auth/models.py:132
+#: .\contrib\auth\models.py:200
msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>."
@@ -1371,19 +1360,19 @@ msgstr ""
"Utilitzeu '[algo]$[salt]$[hexdigest]' o el <a href=\"password/\">formulari "
"de canvi de contrasenya</a>."
-#: contrib/auth/models.py:133
+#: .\contrib\auth\models.py:201
msgid "staff status"
msgstr "membre del personal"
-#: contrib/auth/models.py:133
+#: .\contrib\auth\models.py:201
msgid "Designates whether the user can log into this admin site."
-msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
+msgstr "Designa si l'usuari pot entrar al lloc administratiu."
-#: contrib/auth/models.py:134
+#: .\contrib\auth\models.py:202
msgid "active"
msgstr "actiu"
-#: contrib/auth/models.py:134
+#: .\contrib\auth\models.py:202
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
@@ -1391,122 +1380,134 @@ 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
+#: .\contrib\auth\models.py:203
msgid "superuser status"
msgstr "estat de superusuari"
-#: contrib/auth/models.py:135
+#: .\contrib\auth\models.py:203
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr ""
-"Designa que aquest usuari té tots els permissos sense assignar-los "
+"Designa que aquest usuari té tots els permisos sense assignar-los "
"explícitament."
-#: contrib/auth/models.py:136
+#: .\contrib\auth\models.py:204
msgid "last login"
msgstr "últim inici de sessió"
-#: contrib/auth/models.py:137
+#: .\contrib\auth\models.py:205
msgid "date joined"
-msgstr "data de creació"
+msgstr "data d'incorporació"
-#: contrib/auth/models.py:139
+#: .\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 ""
-"Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els "
-"permissos dels grups dels que sigui membre."
+"A més dels permisos assignats manualment, aquest usuari tindrà també els "
+"permisos dels grups dels que sigui membre."
-#: contrib/auth/models.py:140
+#: .\contrib\auth\models.py:208
msgid "user permissions"
-msgstr "permissos de l'usuari"
+msgstr "permisos de l'usuari"
-#: contrib/auth/models.py:144 contrib/comments/models.py:50
-#: contrib/comments/models.py:168
+#: .\contrib\auth\models.py:212 .\contrib\comments\models.py:50
+#: .\contrib\comments\models.py:168
msgid "user"
msgstr "usuari"
-#: contrib/auth/models.py:145
+#: .\contrib\auth\models.py:213
msgid "users"
msgstr "usuaris"
-#: contrib/auth/models.py:301
+#: .\contrib\auth\models.py:394
msgid "message"
msgstr "missatge"
-#: contrib/auth/views.py:60
+#: .\contrib\auth\views.py:79
msgid "Logged out"
msgstr "Sessió finalitzada"
-#: contrib/auth/management/commands/createsuperuser.py:23 forms/fields.py:428
+#: .\contrib\auth\management\commands\createsuperuser.py:24
+#: .\core\validators.py:120 .\forms\fields.py:427
msgid "Enter a valid e-mail address."
msgstr "Introduïu una adreça de correu vàlida."
-#: contrib/comments/admin.py:12
+#: .\contrib\comments\admin.py:12
msgid "Content"
-msgstr "contingut"
+msgstr "Contingut"
-#: contrib/comments/admin.py:15
+#: .\contrib\comments\admin.py:15
msgid "Metadata"
-msgstr "metadades"
+msgstr "Metadades"
# Context problem... waitting for comments from django-i18n
-#: contrib/comments/admin.py:39
+#: .\contrib\comments\admin.py:40
msgid "flagged"
-msgstr "marcat"
+msgid_plural "flagged"
+msgstr[0] "marcat"
+msgstr[1] "marcats"
-#: contrib/comments/admin.py:40
+#: .\contrib\comments\admin.py:41
msgid "Flag selected comments"
msgstr "Marcar els comentaris seleccionats"
-#: contrib/comments/admin.py:43
+#: .\contrib\comments\admin.py:45
msgid "approved"
-msgstr "aprovat"
+msgid_plural "approved"
+msgstr[0] "aprovat"
+msgstr[1] "aprovats"
-#: contrib/comments/admin.py:44
+#: .\contrib\comments\admin.py:46
msgid "Approve selected comments"
msgstr "Aprovar els comentaris seleccionats"
-#: contrib/comments/admin.py:47
+#: .\contrib\comments\admin.py:50
msgid "removed"
-msgstr "eliminat"
+msgid_plural "removed"
+msgstr[0] "eliminat"
+msgstr[1] "eliminats"
-#: contrib/comments/admin.py:48
+#: .\contrib\comments\admin.py:51
msgid "Remove selected comments"
msgstr "Eliminar els comentaris seleccionats"
-#: contrib/comments/admin.py:60
+#: .\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 comentari ha estat %(action)s satisfactòriament."
msgstr[1] "%(count)s comentaris han estat %(action)s satisfactòriament."
-#: contrib/comments/feeds.py:13
+#: .\contrib\comments\feeds.py:13
#, python-format
msgid "%(site_name)s comments"
msgstr "comentaris de %(site_name)s"
-#: contrib/comments/feeds.py:23
+#: .\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
+#: .\contrib\comments\forms.py:93
msgid "Name"
-msgstr "nom"
+msgstr "Nom"
-#: contrib/comments/forms.py:94
+#: .\contrib\comments\forms.py:94
msgid "Email address"
msgstr "Adreça de correu electrònic"
-#: contrib/comments/forms.py:96
+#: .\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 "Comentari"
-#: contrib/comments/forms.py:173
+#: .\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."
@@ -1514,78 +1515,82 @@ 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
+#: .\contrib\comments\forms.py:182
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 "
+"Si entreu qualsevol cosa en aquest camp el vostre comentari es tractarà com "
"a spam"
-#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+#: .\contrib\comments\models.py:22 .\contrib\contenttypes\models.py:81
msgid "content type"
msgstr "tipus de contingut"
-#: contrib/comments/models.py:24
+#: .\contrib\comments\models.py:24
msgid "object ID"
msgstr "ID de l'objecte"
-#: contrib/comments/models.py:52
+#: .\contrib\comments\models.py:52
msgid "user's name"
-msgstr "nom d'usuari"
+msgstr "nom de l'usuari"
-#: contrib/comments/models.py:53
+#: .\contrib\comments\models.py:53
msgid "user's email address"
-msgstr "adreça de correu electrònic del usuari"
+msgstr "adreça de correu electrònic de l'usuari"
-#: contrib/comments/models.py:54
+#: .\contrib\comments\models.py:54
msgid "user's URL"
-msgstr "URL del usuari"
+msgstr "URL de l'usuari"
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
-#: contrib/comments/models.py:169
+#: .\contrib\comments\models.py:56 .\contrib\comments\models.py:76
+#: .\contrib\comments\models.py:169
msgid "comment"
msgstr "comentari"
-#: contrib/comments/models.py:59
+#: .\contrib\comments\models.py:59
msgid "date/time submitted"
msgstr "data/hora d'enviament"
-#: contrib/comments/models.py:61
+#: .\contrib\comments\models.py:60 .\db\models\fields\__init__.py:896
+msgid "IP address"
+msgstr "Adreça IP"
+
+#: .\contrib\comments\models.py:61
msgid "is public"
msgstr "és públic"
-#: contrib/comments/models.py:62
+#: .\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."
+"Desmarqueu aquesta casella per fer desaparèixer aquest comentari del lloc "
+"web de forma efectiva."
-#: contrib/comments/models.py:64
+#: .\contrib\comments\models.py:64
msgid "is removed"
msgstr "està eliminat"
-#: contrib/comments/models.py:65
+#: .\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 "
+"Marqueu aquesta casella si el comentari no és apropiat. En lloc seu es "
"mostrarà \"Aquest comentari ha estat eliminat\" "
-#: contrib/comments/models.py:77
+#: .\contrib\comments\models.py:77
msgid "comments"
msgstr "comentaris"
-#: contrib/comments/models.py:119
+#: .\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."
+"nom no es pot modificar."
-#: contrib/comments/models.py:128
+#: .\contrib\comments\models.py:128
msgid ""
"This comment was posted by an authenticated user and thus the email is read-"
"only."
@@ -1593,7 +1598,7 @@ 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
+#: .\contrib\comments\models.py:153
#, python-format
msgid ""
"Posted by %(user)s at %(date)s\n"
@@ -1609,379 +1614,410 @@ msgstr ""
"http://%(domain)s%(url)s"
# Context problem... waitting for comments from django-i18n
-#: contrib/comments/models.py:170
+#: .\contrib\comments\models.py:170
msgid "flag"
msgstr "marcar"
-#: contrib/comments/models.py:171
+#: .\contrib\comments\models.py:171
msgid "date"
msgstr "data"
-#: contrib/comments/models.py:181
+#: .\contrib\comments\models.py:181
msgid "comment flag"
msgstr "marca del comentari"
-#: contrib/comments/models.py:182
+#: .\contrib\comments\models.py:182
msgid "comment flags"
-msgstr "marques de comentari"
+msgstr "marques del comentari"
-#: contrib/comments/templates/comments/approve.html:4
+#: .\contrib\comments\templates\comments\approve.html.py:4
msgid "Approve a comment"
msgstr "Aprovar un comentari"
-#: contrib/comments/templates/comments/approve.html:7
+#: .\contrib\comments\templates\comments\approve.html.py:7
msgid "Really make this comment public?"
-msgstr "Realment vol fer aquest comentari públic?"
+msgstr "Voleu realment fer públic aquest comentari?"
-#: contrib/comments/templates/comments/approve.html:12
+#: .\contrib\comments\templates\comments\approve.html.py:12
msgid "Approve"
msgstr "Aprovar"
-#: contrib/comments/templates/comments/approved.html:4
+#: .\contrib\comments\templates\comments\approved.html.py: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
+#: .\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 ""
"Gràcies per dedicar el temps a millorar la qualitat del debat al nostre lloc"
-#: contrib/comments/templates/comments/delete.html:4
+#: .\contrib\comments\templates\comments\delete.html.py:4
msgid "Remove a comment"
-msgstr "Eliminar un comentaris"
+msgstr "Eliminar un comentari"
-#: contrib/comments/templates/comments/delete.html:7
+#: .\contrib\comments\templates\comments\delete.html.py:7
msgid "Really remove this comment?"
-msgstr "Realment vol eliminar aquest comentari?"
-
-#: contrib/comments/templates/comments/delete.html:12
-msgid "Remove"
-msgstr "Eliminar"
+msgstr "Realment voleu eliminar aquest comentari?"
-#: contrib/comments/templates/comments/deleted.html:4
+#: .\contrib\comments\templates\comments\deleted.html.py:4
msgid "Thanks for removing"
msgstr "Gràcies per eliminar"
-#: contrib/comments/templates/comments/flag.html:4
+#: .\contrib\comments\templates\comments\flag.html.py:4
msgid "Flag this comment"
msgstr "Marcar aquest comentari"
-#: contrib/comments/templates/comments/flag.html:7
+#: .\contrib\comments\templates\comments\flag.html.py:7
msgid "Really flag this comment?"
-msgstr "Realment vol marcar aquest comentari?"
+msgstr "Realment voleu marcar aquest comentari?"
# Context problem... waitting for comments from django-i18n
-#: contrib/comments/templates/comments/flag.html:12
+#: .\contrib\comments\templates\comments\flag.html.py:12
msgid "Flag"
msgstr "Marcar"
-#: contrib/comments/templates/comments/flagged.html:4
+#: .\contrib\comments\templates\comments\flagged.html.py:4
msgid "Thanks for flagging"
msgstr "Gràcies per marcar"
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
+#: .\contrib\comments\templates\comments\form.html.py:17
+#: .\contrib\comments\templates\comments\preview.html.py:32
msgid "Post"
msgstr "Publicar"
-#: contrib/comments/templates/comments/form.html:18
-#: contrib/comments/templates/comments/preview.html:33
+#: .\contrib\comments\templates\comments\form.html.py:18
+#: .\contrib\comments\templates\comments\preview.html.py:33
msgid "Preview"
msgstr "Vista prèvia"
-#: contrib/comments/templates/comments/posted.html:4
+#: .\contrib\comments\templates\comments\posted.html.py:4
msgid "Thanks for commenting"
msgstr "Gràcies per comentar"
-#: contrib/comments/templates/comments/posted.html:7
+#: .\contrib\comments\templates\comments\posted.html.py:7
msgid "Thank you for your comment"
-msgstr "Gràcies pel seu comentari"
+msgstr "Gràcies pel vostre comentari"
-#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:13
+#: .\contrib\comments\templates\comments\preview.html.py:4
+#: .\contrib\comments\templates\comments\preview.html.py:13
msgid "Preview your comment"
-msgstr "Previsualitzar el seu comentari"
+msgstr "Previsualitzar el vostre comentari"
-#: contrib/comments/templates/comments/preview.html:11
+#: .\contrib\comments\templates\comments\preview.html.py: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."
+msgstr[0] "Si us plau, corregiu l'error mostrat a sota."
+msgstr[1] "Si us plau, corregiu els errors mostrats a sota."
-#: contrib/comments/templates/comments/preview.html:16
+#: .\contrib\comments\templates\comments\preview.html.py:16
msgid "Post your comment"
msgstr "Enviar el seu comentari"
-#: contrib/comments/templates/comments/preview.html:16
+#: .\contrib\comments\templates\comments\preview.html.py:16
msgid "or make changes"
-msgstr "o faci canvis."
+msgstr "o feu canvis."
-#: contrib/contenttypes/models.py:70
+#: .\contrib\contenttypes\models.py:77
msgid "python model class name"
msgstr "nom de la classe del model en python"
-#: contrib/contenttypes/models.py:75
+#: .\contrib\contenttypes\models.py:82
msgid "content types"
msgstr "tipus de continguts"
-#: contrib/flatpages/admin.py:9
+#: .\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
+#: .\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 "
+"Aquest valor ha de contenir només lletres, números, guions baixos, guions o "
"barres (/)."
-#: contrib/flatpages/admin.py:22
+#: .\contrib\flatpages\admin.py:22
msgid "Advanced options"
msgstr "Opcions avançades"
-#: contrib/flatpages/models.py:8
+#: .\contrib\flatpages\models.py:8
msgid "title"
msgstr "títol"
-#: contrib/flatpages/models.py:9
+#: .\contrib\flatpages\models.py:9
msgid "content"
msgstr "contingut"
-#: contrib/flatpages/models.py:10
+#: .\contrib\flatpages\models.py:10
msgid "enable comments"
msgstr "habilitar comentaris"
-#: contrib/flatpages/models.py:11
+#: .\contrib\flatpages\models.py:11
msgid "template name"
msgstr "nom de la plantilla"
-#: contrib/flatpages/models.py:12
+#: .\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'."
+"utilitzarà 'flatpages/default.html'."
-#: contrib/flatpages/models.py:13
+#: .\contrib\flatpages\models.py:13
msgid "registration required"
msgstr "cal estar registrat"
-#: contrib/flatpages/models.py:13
+#: .\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
+#: .\contrib\flatpages\models.py:18
msgid "flat page"
msgstr "pàgina estàtica"
-#: contrib/flatpages/models.py:19
+#: .\contrib\flatpages\models.py:19
msgid "flat pages"
msgstr "pàgines estàtiques"
-#: contrib/formtools/wizard.py:132
+#: .\contrib\formtools\wizard.py:140
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."
+"Ho sentim, pero el vostre formulari ha caducat. Si us plau, continueu "
+"omplint el formulari en aquesta pàgina."
+
+#: .\contrib\gis\db\models\fields.py:50
+msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type."
+msgstr "El camp GIS base -- correspon al tipus 'Geometry' de l'especificació "
+"OpenGIS."
+
+#: .\contrib\gis\db\models\fields.py:270
+msgid "Point"
+msgstr "Punt"
+
+#: .\contrib\gis\db\models\fields.py:274
+msgid "Line string"
+msgstr "Cadena de línies"
+
+#: .\contrib\gis\db\models\fields.py:278
+msgid "Polygon"
+msgstr "Polígon"
+
+#: .\contrib\gis\db\models\fields.py:282
+msgid "Multi-point"
+msgstr "Multi-punt"
-#: contrib/gis/forms/fields.py:17
+#: .\contrib\gis\db\models\fields.py:286
+msgid "Multi-line string"
+msgstr "Cadena de multi-línies"
+
+#: .\contrib\gis\db\models\fields.py:290
+msgid "Multi polygon"
+msgstr "Multi polígon"
+
+#: .\contrib\gis\db\models\fields.py:294
+msgid "Geometry collection"
+msgstr "Col·leció de geometria"
+
+#: .\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
+#: .\contrib\gis\forms\fields.py:18
msgid "Invalid geometry value."
msgstr "Valor de geometria invàlid."
-#: contrib/gis/forms/fields.py:19
+#: .\contrib\gis\forms\fields.py:19
msgid "Invalid geometry type."
msgstr "Tipus de geometria invàlid."
-#: contrib/gis/forms/fields.py:20
+#: .\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."
+"S'ha produït un error en transformar la geometria al SRID del camp de "
+"geometria del formulari."
-#: contrib/humanize/templatetags/humanize.py:19
+#: .\contrib\humanize\templatetags\humanize.py:19
msgid "th"
-msgstr "rt"
+msgstr "è"
-#: contrib/humanize/templatetags/humanize.py:19
+# problema: 4t, 5è, 6è...
+# o posem t o posem è, i t només aplica a 4t.
+#: .\contrib\humanize\templatetags\humanize.py:19
msgid "st"
msgstr "r"
-#: contrib/humanize/templatetags/humanize.py:19
+#: .\contrib\humanize\templatetags\humanize.py:19
msgid "nd"
msgstr "n"
-#: contrib/humanize/templatetags/humanize.py:19
+#: .\contrib\humanize\templatetags\humanize.py:19
msgid "rd"
msgstr "r"
-#: contrib/humanize/templatetags/humanize.py:51
+#: .\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
+#: .\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
+#: .\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
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "one"
msgstr "un"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "two"
msgstr "dos"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "three"
msgstr "tres"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "four"
msgstr "quatre"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "five"
msgstr "cinc"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "six"
msgstr "sis"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "seven"
msgstr "set"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "eight"
msgstr "vuit"
-#: contrib/humanize/templatetags/humanize.py:73
+#: .\contrib\humanize\templatetags\humanize.py:73
msgid "nine"
msgstr "nou"
-#: contrib/humanize/templatetags/humanize.py:93
+#: .\contrib\humanize\templatetags\humanize.py:93
msgid "today"
msgstr "avui"
-#: contrib/humanize/templatetags/humanize.py:95
+#: .\contrib\humanize\templatetags\humanize.py:95
msgid "tomorrow"
msgstr "demà"
-#: contrib/humanize/templatetags/humanize.py:97
+#: .\contrib\humanize\templatetags\humanize.py:97
msgid "yesterday"
msgstr "ahir"
-#: contrib/localflavor/ar/forms.py:27
+#: .\contrib\localflavor\ar\forms.py:28
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
+#: .\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 "Aquest camp precisa només números."
-#: contrib/localflavor/ar/forms.py:50
+#: .\contrib\localflavor\ar\forms.py:51
msgid "This field requires 7 or 8 digits."
msgstr "Aquest camp precisa 7 o 8 dígits."
-#: contrib/localflavor/ar/forms.py:79
+#: .\contrib\localflavor\ar\forms.py:80
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
+#: .\contrib\localflavor\ar\forms.py:81
msgid "Invalid CUIT."
-msgstr "Invàlid CUIT."
+msgstr "CUIT invàlid."
-#: contrib/localflavor/at/at_states.py:5
+#: .\contrib\localflavor\at\at_states.py:5
msgid "Burgenland"
msgstr "Burgenland"
-#: contrib/localflavor/at/at_states.py:6
+#: .\contrib\localflavor\at\at_states.py:6
msgid "Carinthia"
msgstr "Carinthia"
-#: contrib/localflavor/at/at_states.py:7
+#: .\contrib\localflavor\at\at_states.py:7
msgid "Lower Austria"
-msgstr "Lower Austria"
+msgstr "Àustria Inferior"
-#: contrib/localflavor/at/at_states.py:8
+#: .\contrib\localflavor\at\at_states.py:8
msgid "Upper Austria"
-msgstr "Upper Austria"
+msgstr "Àustria Superior"
-#: contrib/localflavor/at/at_states.py:9
+#: .\contrib\localflavor\at\at_states.py:9
msgid "Salzburg"
msgstr "Salzburg"
-#: contrib/localflavor/at/at_states.py:10
+#: .\contrib\localflavor\at\at_states.py:10
msgid "Styria"
msgstr "Styria"
-#: contrib/localflavor/at/at_states.py:11
+#: .\contrib\localflavor\at\at_states.py:11
msgid "Tyrol"
-msgstr "Tyrol"
+msgstr "Tirol"
-#: contrib/localflavor/at/at_states.py:12
+#: .\contrib\localflavor\at\at_states.py:12
msgid "Vorarlberg"
msgstr "Vorarlberg"
-#: contrib/localflavor/at/at_states.py:13
+#: .\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
+#: .\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 "Introduïu un codi zip en el format XXXX."
-#: contrib/localflavor/at/forms.py:48
+#: .\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 "
+"Introduïu un número vàlid de la Seguretat Social Austríaca en el format XXXX "
"XXXXXX."
-#: contrib/localflavor/au/forms.py:16
+#: .\contrib\localflavor\au\forms.py:17
msgid "Enter a 4 digit post code."
msgstr "Introduïu un codi postal de 4 dígits."
-#: contrib/localflavor/br/forms.py:21
+#: .\contrib\localflavor\br\forms.py:17
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
+#: .\contrib\localflavor\br\forms.py:26
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."
+msgstr "El número de telèfon ha d'estar en el format XX-XXXX-XXXX."
-#: contrib/localflavor/br/forms.py:58
+#: .\contrib\localflavor\br\forms.py:54
msgid ""
"Select a valid brazilian state. That state is not one of the available "
"states."
@@ -1989,137 +2025,137 @@ msgstr ""
"Seleccioneu un estat brasiler vàlid. Aquest estat no és un dels estats "
"disponibles."
-#: contrib/localflavor/br/forms.py:94
+#: .\contrib\localflavor\br\forms.py:90
msgid "Invalid CPF number."
msgstr "Número CPF invàlid."
-#: contrib/localflavor/br/forms.py:95
+#: .\contrib\localflavor\br\forms.py:91
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."
+msgstr "Aquest camp precisa com a màxim 11 dígits o 14 caràcters."
-#: contrib/localflavor/br/forms.py:134
+#: .\contrib\localflavor\br\forms.py:130
msgid "Invalid CNPJ number."
msgstr "Número CNPJ invàlid."
-#: contrib/localflavor/br/forms.py:136
+#: .\contrib\localflavor\br\forms.py:132
msgid "This field requires at least 14 digits"
msgstr "Aquest camp precisa almenys 14 dígits."
-#: contrib/localflavor/ca/forms.py:17
+#: .\contrib\localflavor\ca\forms.py:25
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
+#: .\contrib\localflavor\ca\forms.py:96
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."
+"Introduïu un número vàlid de la Seguretat Social de Canadà en el format XXX-"
+"XXX-XXX."
-#: contrib/localflavor/ch/ch_states.py:5
+#: .\contrib\localflavor\ch\ch_states.py:5
msgid "Aargau"
msgstr "Argau"
-#: contrib/localflavor/ch/ch_states.py:6
+#: .\contrib\localflavor\ch\ch_states.py:6
msgid "Appenzell Innerrhoden"
msgstr "Appenzell Inner-Rhoden"
-#: contrib/localflavor/ch/ch_states.py:7
+#: .\contrib\localflavor\ch\ch_states.py:7
msgid "Appenzell Ausserrhoden"
msgstr "Appenzell Ausser-Rhoden"
-#: contrib/localflavor/ch/ch_states.py:8
+#: .\contrib\localflavor\ch\ch_states.py:8
msgid "Basel-Stadt"
-msgstr "Basel-Ciutat"
+msgstr "Basilea-Ciutat"
-#: contrib/localflavor/ch/ch_states.py:9
+#: .\contrib\localflavor\ch\ch_states.py:9
msgid "Basel-Land"
-msgstr "Basel-Camp"
+msgstr "Basilea-Land"
-#: contrib/localflavor/ch/ch_states.py:10
+#: .\contrib\localflavor\ch\ch_states.py:10
msgid "Berne"
msgstr "Berna"
-#: contrib/localflavor/ch/ch_states.py:11
+#: .\contrib\localflavor\ch\ch_states.py:11
msgid "Fribourg"
msgstr "Friburg"
-#: contrib/localflavor/ch/ch_states.py:12
+#: .\contrib\localflavor\ch\ch_states.py:12
msgid "Geneva"
msgstr "Ginebra"
-#: contrib/localflavor/ch/ch_states.py:13
+#: .\contrib\localflavor\ch\ch_states.py:13
msgid "Glarus"
msgstr "Glarus"
-#: contrib/localflavor/ch/ch_states.py:14
+#: .\contrib\localflavor\ch\ch_states.py:14
msgid "Graubuenden"
msgstr "Graubuenden"
-#: contrib/localflavor/ch/ch_states.py:15
+#: .\contrib\localflavor\ch\ch_states.py:15
msgid "Jura"
msgstr "Jura"
-#: contrib/localflavor/ch/ch_states.py:16
+#: .\contrib\localflavor\ch\ch_states.py:16
msgid "Lucerne"
msgstr "Lucerna"
-#: contrib/localflavor/ch/ch_states.py:17
+#: .\contrib\localflavor\ch\ch_states.py:17
msgid "Neuchatel"
msgstr "Neuchatel"
-#: contrib/localflavor/ch/ch_states.py:18
+#: .\contrib\localflavor\ch\ch_states.py:18
msgid "Nidwalden"
msgstr "Nidwalden"
-#: contrib/localflavor/ch/ch_states.py:19
+#: .\contrib\localflavor\ch\ch_states.py:19
msgid "Obwalden"
msgstr "Obwalden"
-#: contrib/localflavor/ch/ch_states.py:20
+#: .\contrib\localflavor\ch\ch_states.py:20
msgid "Schaffhausen"
msgstr "Schaffhausen"
-#: contrib/localflavor/ch/ch_states.py:21
+#: .\contrib\localflavor\ch\ch_states.py:21
msgid "Schwyz"
msgstr "Schwyz"
-#: contrib/localflavor/ch/ch_states.py:22
+#: .\contrib\localflavor\ch\ch_states.py:22
msgid "Solothurn"
msgstr "Solothurn"
-#: contrib/localflavor/ch/ch_states.py:23
+#: .\contrib\localflavor\ch\ch_states.py:23
msgid "St. Gallen"
msgstr "St. Gallen"
-#: contrib/localflavor/ch/ch_states.py:24
+#: .\contrib\localflavor\ch\ch_states.py:24
msgid "Thurgau"
msgstr "Thurgau"
-#: contrib/localflavor/ch/ch_states.py:25
+#: .\contrib\localflavor\ch\ch_states.py:25
msgid "Ticino"
msgstr "Ticino"
-#: contrib/localflavor/ch/ch_states.py:26
+#: .\contrib\localflavor\ch\ch_states.py:26
msgid "Uri"
msgstr "Uri"
-#: contrib/localflavor/ch/ch_states.py:27
+#: .\contrib\localflavor\ch\ch_states.py:27
msgid "Valais"
msgstr "Valais"
-#: contrib/localflavor/ch/ch_states.py:28
+#: .\contrib\localflavor\ch\ch_states.py:28
msgid "Vaud"
msgstr "Vaud"
-#: contrib/localflavor/ch/ch_states.py:29
+#: .\contrib\localflavor\ch\ch_states.py:29
msgid "Zug"
msgstr "Zug"
-#: contrib/localflavor/ch/ch_states.py:30
+#: .\contrib\localflavor\ch\ch_states.py:30
msgid "Zurich"
msgstr "Zuric"
-#: contrib/localflavor/ch/forms.py:64
+#: .\contrib\localflavor\ch\forms.py:65
msgid ""
"Enter a valid Swiss identity or passport card number in X1234567<0 or "
"1234567890 format."
@@ -2127,445 +2163,445 @@ 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
+#: .\contrib\localflavor\cl\forms.py:30
msgid "Enter a valid Chilean RUT."
msgstr "Introduïu un RUT Xilè vàlid."
-#: contrib/localflavor/cl/forms.py:30
+#: .\contrib\localflavor\cl\forms.py:31
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
+#: .\contrib\localflavor\cl\forms.py:32
msgid "The Chilean RUT is not valid."
msgstr "El RUT Xilè no és vàlid."
-#: contrib/localflavor/cz/cz_regions.py:8
+#: .\contrib\localflavor\cz\cz_regions.py:8
msgid "Prague"
msgstr "Praga"
-#: contrib/localflavor/cz/cz_regions.py:9
+#: .\contrib\localflavor\cz\cz_regions.py:9
msgid "Central Bohemian Region"
msgstr "Regió Bohèmia Central"
-#: contrib/localflavor/cz/cz_regions.py:10
+#: .\contrib\localflavor\cz\cz_regions.py:10
msgid "South Bohemian Region"
msgstr "Regió Bohèmia Sur"
-#: contrib/localflavor/cz/cz_regions.py:11
+#: .\contrib\localflavor\cz\cz_regions.py:11
msgid "Pilsen Region"
msgstr "Regió Pilsen"
-#: contrib/localflavor/cz/cz_regions.py:12
+#: .\contrib\localflavor\cz\cz_regions.py:12
msgid "Carlsbad Region"
msgstr "Regió Carlsbad"
-#: contrib/localflavor/cz/cz_regions.py:13
+#: .\contrib\localflavor\cz\cz_regions.py:13
msgid "Usti Region"
msgstr "Regió Usti"
-#: contrib/localflavor/cz/cz_regions.py:14
+#: .\contrib\localflavor\cz\cz_regions.py:14
msgid "Liberec Region"
msgstr "Regió Liberec"
-#: contrib/localflavor/cz/cz_regions.py:15
+#: .\contrib\localflavor\cz\cz_regions.py:15
msgid "Hradec Region"
msgstr "Regió Hradec"
-#: contrib/localflavor/cz/cz_regions.py:16
+#: .\contrib\localflavor\cz\cz_regions.py:16
msgid "Pardubice Region"
msgstr "Regió Pardubice"
-#: contrib/localflavor/cz/cz_regions.py:17
+#: .\contrib\localflavor\cz\cz_regions.py:17
msgid "Vysocina Region"
msgstr "Regió Vysocina"
-#: contrib/localflavor/cz/cz_regions.py:18
+#: .\contrib\localflavor\cz\cz_regions.py:18
msgid "South Moravian Region"
msgstr "Regió Moràvia Sur"
-#: contrib/localflavor/cz/cz_regions.py:19
+#: .\contrib\localflavor\cz\cz_regions.py:19
msgid "Olomouc Region"
msgstr "Regió Olomouc"
-#: contrib/localflavor/cz/cz_regions.py:20
+#: .\contrib\localflavor\cz\cz_regions.py:20
msgid "Zlin Region"
msgstr "Regió Zlin"
-#: contrib/localflavor/cz/cz_regions.py:21
+#: .\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
+#: .\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 "Introduïu un codi postal en el format XXXXX or XXX XX."
+msgstr "Introduïu un codi postal en el format XXXXX o XXX XX."
-#: contrib/localflavor/cz/forms.py:47
+#: .\contrib\localflavor\cz\forms.py:48
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
+#: .\contrib\localflavor\cz\forms.py:49
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
+#: .\contrib\localflavor\cz\forms.py:50
msgid "Enter a valid birth number."
msgstr "Introduïu un número de naixement vàlid."
-#: contrib/localflavor/cz/forms.py:106
+#: .\contrib\localflavor\cz\forms.py:107
msgid "Enter a valid IC number."
-msgstr "Intrduïu un número de IC vàlid."
+msgstr "Introduïu un número de IC vàlid."
-#: contrib/localflavor/de/de_states.py:5
+#: .\contrib\localflavor\de\de_states.py:5
msgid "Baden-Wuerttemberg"
msgstr "Baden-Württemberg"
-#: contrib/localflavor/de/de_states.py:6
+#: .\contrib\localflavor\de\de_states.py:6
msgid "Bavaria"
msgstr "Baviera"
-#: contrib/localflavor/de/de_states.py:7
+#: .\contrib\localflavor\de\de_states.py:7
msgid "Berlin"
msgstr "Berlín"
-#: contrib/localflavor/de/de_states.py:8
+#: .\contrib\localflavor\de\de_states.py:8
msgid "Brandenburg"
msgstr "Brandenburg"
-#: contrib/localflavor/de/de_states.py:9
+#: .\contrib\localflavor\de\de_states.py:9
msgid "Bremen"
msgstr "Bremen"
-#: contrib/localflavor/de/de_states.py:10
+#: .\contrib\localflavor\de\de_states.py:10
msgid "Hamburg"
msgstr "Hamburg"
-#: contrib/localflavor/de/de_states.py:11
+#: .\contrib\localflavor\de\de_states.py:11
msgid "Hessen"
msgstr "Hessen"
-#: contrib/localflavor/de/de_states.py:12
+#: .\contrib\localflavor\de\de_states.py:12
msgid "Mecklenburg-Western Pomerania"
msgstr "Mecklenburg-Pomerània Occidental"
-#: contrib/localflavor/de/de_states.py:13
+#: .\contrib\localflavor\de\de_states.py:13
msgid "Lower Saxony"
msgstr "Baixa Saxònia"
-#: contrib/localflavor/de/de_states.py:14
+#: .\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
+#: .\contrib\localflavor\de\de_states.py:15
msgid "Rhineland-Palatinate"
msgstr "Renània-Palatinat"
-#: contrib/localflavor/de/de_states.py:16
+#: .\contrib\localflavor\de\de_states.py:16
msgid "Saarland"
msgstr "Saarland"
-#: contrib/localflavor/de/de_states.py:17
+#: .\contrib\localflavor\de\de_states.py:17
msgid "Saxony"
msgstr "Saxònia"
-#: contrib/localflavor/de/de_states.py:18
+#: .\contrib\localflavor\de\de_states.py:18
msgid "Saxony-Anhalt"
msgstr "Saxònia-Anhalt"
-#: contrib/localflavor/de/de_states.py:19
+#: .\contrib\localflavor\de\de_states.py:19
msgid "Schleswig-Holstein"
msgstr "Slesvig-Holstein"
-#: contrib/localflavor/de/de_states.py:20
+#: .\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
+#: .\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 "Introduïu un codi zip en el format XXXXX."
-#: contrib/localflavor/de/forms.py:41
+#: .\contrib\localflavor\de\forms.py:42
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 "
+"Introduïu un número vàlid de tarjeta d'identificació alemanya en el format "
"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X."
-#: contrib/localflavor/es/es_provinces.py:5
+#: .\contrib\localflavor\es\es_provinces.py:5
msgid "Arava"
msgstr "Àlaba"
-#: contrib/localflavor/es/es_provinces.py:6
+#: .\contrib\localflavor\es\es_provinces.py:6
msgid "Albacete"
msgstr "Albacete"
-#: contrib/localflavor/es/es_provinces.py:7
+#: .\contrib\localflavor\es\es_provinces.py:7
msgid "Alacant"
msgstr "Alacant"
-#: contrib/localflavor/es/es_provinces.py:8
+#: .\contrib\localflavor\es\es_provinces.py:8
msgid "Almeria"
msgstr "Almeria"
-#: contrib/localflavor/es/es_provinces.py:9
+#: .\contrib\localflavor\es\es_provinces.py:9
msgid "Avila"
msgstr "Àvila"
-#: contrib/localflavor/es/es_provinces.py:10
+#: .\contrib\localflavor\es\es_provinces.py:10
msgid "Badajoz"
msgstr "Badajoz"
-#: contrib/localflavor/es/es_provinces.py:11
+#: .\contrib\localflavor\es\es_provinces.py:11
msgid "Illes Balears"
msgstr "Illes Balears"
-#: contrib/localflavor/es/es_provinces.py:12
+#: .\contrib\localflavor\es\es_provinces.py:12
msgid "Barcelona"
msgstr "Barcelona"
-#: contrib/localflavor/es/es_provinces.py:13
+#: .\contrib\localflavor\es\es_provinces.py:13
msgid "Burgos"
msgstr "Burgos"
-#: contrib/localflavor/es/es_provinces.py:14
+#: .\contrib\localflavor\es\es_provinces.py:14
msgid "Caceres"
msgstr "Càceres"
-#: contrib/localflavor/es/es_provinces.py:15
+#: .\contrib\localflavor\es\es_provinces.py:15
msgid "Cadiz"
msgstr "Cadis"
-#: contrib/localflavor/es/es_provinces.py:16
+#: .\contrib\localflavor\es\es_provinces.py:16
msgid "Castello"
msgstr "Castelló"
-#: contrib/localflavor/es/es_provinces.py:17
+#: .\contrib\localflavor\es\es_provinces.py:17
msgid "Ciudad Real"
msgstr "Ciudad Real"
-#: contrib/localflavor/es/es_provinces.py:18
+#: .\contrib\localflavor\es\es_provinces.py:18
msgid "Cordoba"
msgstr "Còrdova"
-#: contrib/localflavor/es/es_provinces.py:19
+#: .\contrib\localflavor\es\es_provinces.py:19
msgid "A Coruna"
msgstr "La Corunya"
-#: contrib/localflavor/es/es_provinces.py:20
+#: .\contrib\localflavor\es\es_provinces.py:20
msgid "Cuenca"
msgstr "Conca"
-#: contrib/localflavor/es/es_provinces.py:21
+#: .\contrib\localflavor\es\es_provinces.py:21
msgid "Girona"
msgstr "Girona"
-#: contrib/localflavor/es/es_provinces.py:22
+#: .\contrib\localflavor\es\es_provinces.py:22
msgid "Granada"
msgstr "Granada"
-#: contrib/localflavor/es/es_provinces.py:23
+#: .\contrib\localflavor\es\es_provinces.py:23
msgid "Guadalajara"
msgstr "Guadalajara"
-#: contrib/localflavor/es/es_provinces.py:24
+#: .\contrib\localflavor\es\es_provinces.py:24
msgid "Guipuzkoa"
msgstr "Guipúscoa"
-#: contrib/localflavor/es/es_provinces.py:25
+#: .\contrib\localflavor\es\es_provinces.py:25
msgid "Huelva"
msgstr "Huelva"
-#: contrib/localflavor/es/es_provinces.py:26
+#: .\contrib\localflavor\es\es_provinces.py:26
msgid "Huesca"
msgstr "Osca"
-#: contrib/localflavor/es/es_provinces.py:27
+#: .\contrib\localflavor\es\es_provinces.py:27
msgid "Jaen"
msgstr "Jaén"
-#: contrib/localflavor/es/es_provinces.py:28
+#: .\contrib\localflavor\es\es_provinces.py:28
msgid "Leon"
msgstr "Lleó"
-#: contrib/localflavor/es/es_provinces.py:29
+#: .\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
+#: .\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
+#: .\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
+#: .\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
+#: .\contrib\localflavor\es\es_provinces.py:33
msgid "Malaga"
msgstr "Màlaga"
-#: contrib/localflavor/es/es_provinces.py:34
+#: .\contrib\localflavor\es\es_provinces.py:34
msgid "Murcia"
msgstr "Múrcia"
-#: contrib/localflavor/es/es_provinces.py:35
+#: .\contrib\localflavor\es\es_provinces.py:35
msgid "Navarre"
msgstr "Navarra"
-#: contrib/localflavor/es/es_provinces.py:36
+#: .\contrib\localflavor\es\es_provinces.py:36
msgid "Ourense"
msgstr "Ourense"
-#: contrib/localflavor/es/es_provinces.py:37
+#: .\contrib\localflavor\es\es_provinces.py:37
msgid "Asturias"
msgstr "Astúries"
-#: contrib/localflavor/es/es_provinces.py:38
+#: .\contrib\localflavor\es\es_provinces.py:38
msgid "Palencia"
msgstr "Palència"
-#: contrib/localflavor/es/es_provinces.py:39
+#: .\contrib\localflavor\es\es_provinces.py:39
msgid "Las Palmas"
msgstr "Las Palmas"
-#: contrib/localflavor/es/es_provinces.py:40
+#: .\contrib\localflavor\es\es_provinces.py:40
msgid "Pontevedra"
msgstr "Pontevedra"
-#: contrib/localflavor/es/es_provinces.py:41
+#: .\contrib\localflavor\es\es_provinces.py:41
msgid "Salamanca"
msgstr "Salamanca"
-#: contrib/localflavor/es/es_provinces.py:42
+#: .\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
+#: .\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
+#: .\contrib\localflavor\es\es_provinces.py:44
msgid "Segovia"
msgstr "Segòvia"
-#: contrib/localflavor/es/es_provinces.py:45
+#: .\contrib\localflavor\es\es_provinces.py:45
msgid "Seville"
msgstr "Sevilla"
-#: contrib/localflavor/es/es_provinces.py:46
+#: .\contrib\localflavor\es\es_provinces.py:46
msgid "Soria"
msgstr "Sòria"
-#: contrib/localflavor/es/es_provinces.py:47
+#: .\contrib\localflavor\es\es_provinces.py:47
msgid "Tarragona"
msgstr "Tarragona"
-#: contrib/localflavor/es/es_provinces.py:48
+#: .\contrib\localflavor\es\es_provinces.py:48
msgid "Teruel"
msgstr "Terol"
-#: contrib/localflavor/es/es_provinces.py:49
+#: .\contrib\localflavor\es\es_provinces.py:49
msgid "Toledo"
msgstr "Toledo"
-#: contrib/localflavor/es/es_provinces.py:50
+#: .\contrib\localflavor\es\es_provinces.py:50
msgid "Valencia"
msgstr "València"
-#: contrib/localflavor/es/es_provinces.py:51
+#: .\contrib\localflavor\es\es_provinces.py:51
msgid "Valladolid"
msgstr "Valladolid"
-#: contrib/localflavor/es/es_provinces.py:52
+#: .\contrib\localflavor\es\es_provinces.py:52
msgid "Bizkaia"
msgstr "Biscaia"
-#: contrib/localflavor/es/es_provinces.py:53
+#: .\contrib\localflavor\es\es_provinces.py:53
msgid "Zamora"
msgstr "Zamora"
-#: contrib/localflavor/es/es_provinces.py:54
+#: .\contrib\localflavor\es\es_provinces.py:54
msgid "Zaragoza"
msgstr "Saragossa"
-#: contrib/localflavor/es/es_provinces.py:55
+#: .\contrib\localflavor\es\es_provinces.py:55
msgid "Ceuta"
msgstr "Ceuta"
-#: contrib/localflavor/es/es_provinces.py:56
+#: .\contrib\localflavor\es\es_provinces.py:56
msgid "Melilla"
msgstr "Melilla"
-#: contrib/localflavor/es/es_regions.py:5
+#: .\contrib\localflavor\es\es_regions.py:5
msgid "Andalusia"
msgstr "Andalusia"
-#: contrib/localflavor/es/es_regions.py:6
+#: .\contrib\localflavor\es\es_regions.py:6
msgid "Aragon"
msgstr "Aragó"
-#: contrib/localflavor/es/es_regions.py:7
+#: .\contrib\localflavor\es\es_regions.py:7
msgid "Principality of Asturias"
msgstr "Principat d'Astúries"
-#: contrib/localflavor/es/es_regions.py:8
+#: .\contrib\localflavor\es\es_regions.py:8
msgid "Balearic Islands"
msgstr "Illes Balears"
-#: contrib/localflavor/es/es_regions.py:9
+#: .\contrib\localflavor\es\es_regions.py:9
msgid "Basque Country"
msgstr "Euskadi"
-#: contrib/localflavor/es/es_regions.py:10
+#: .\contrib\localflavor\es\es_regions.py:10
msgid "Canary Islands"
msgstr "Canàries"
-#: contrib/localflavor/es/es_regions.py:12
+#: .\contrib\localflavor\es\es_regions.py:12
msgid "Castile-La Mancha"
msgstr "Castella-La Mancha"
-#: contrib/localflavor/es/es_regions.py:13
+#: .\contrib\localflavor\es\es_regions.py:13
msgid "Castile and Leon"
msgstr "Castella i Lleó"
-#: contrib/localflavor/es/es_regions.py:14
+#: .\contrib\localflavor\es\es_regions.py:14
msgid "Catalonia"
msgstr "Catalunya"
-#: contrib/localflavor/es/es_regions.py:15
+#: .\contrib\localflavor\es\es_regions.py:15
msgid "Extremadura"
msgstr "Extremadura"
-#: contrib/localflavor/es/es_regions.py:16
+#: .\contrib\localflavor\es\es_regions.py:16
msgid "Galicia"
msgstr "Galícia"
-#: contrib/localflavor/es/es_regions.py:19
+#: .\contrib\localflavor\es\es_regions.py:19
msgid "Region of Murcia"
msgstr "Regió de Múrcia"
-#: contrib/localflavor/es/es_regions.py:20
+#: .\contrib\localflavor\es\es_regions.py:20
msgid "Foral Community of Navarre"
msgstr "Comunitat Foral de Navarra"
-#: contrib/localflavor/es/es_regions.py:21
+#: .\contrib\localflavor\es\es_regions.py:21
msgid "Valencian Community"
msgstr "Comunitat Valenciana"
-#: contrib/localflavor/es/forms.py:19
+#: .\contrib\localflavor\es\forms.py:20
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
+#: .\contrib\localflavor\es\forms.py:40
msgid ""
"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or "
"9XXXXXXXX."
@@ -2573,1382 +2609,2112 @@ 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
+#: .\contrib\localflavor\es\forms.py:67
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
+#: .\contrib\localflavor\es\forms.py:68
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
+#: .\contrib\localflavor\es\forms.py:69
msgid "Invalid checksum for NIF."
-msgstr "Validació invàlida del NIF."
+msgstr "Verificació del NIF invàlida."
-#: contrib/localflavor/es/forms.py:69
+#: .\contrib\localflavor\es\forms.py:70
msgid "Invalid checksum for NIE."
-msgstr "Validació invàlida del NIE."
+msgstr "Verificació del NIE invàlida."
-#: contrib/localflavor/es/forms.py:70
+#: .\contrib\localflavor\es\forms.py:71
msgid "Invalid checksum for CIF."
-msgstr "Validació invàlida del CIF."
+msgstr "Verificació del CIF invàlida."
-#: contrib/localflavor/es/forms.py:142
+#: .\contrib\localflavor\es\forms.py:143
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
+#: .\contrib\localflavor\es\forms.py:144
msgid "Invalid checksum for bank account number."
-msgstr "Validació invàlida del número de compte bancari."
+msgstr "Verificació del número de compte bancari invàlida."
-#: contrib/localflavor/fi/forms.py:28
+#: .\contrib\localflavor\fi\forms.py:29
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
+#: .\contrib\localflavor\fr\forms.py:31
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
+#: .\contrib\localflavor\id\forms.py:28
+msgid "Enter a valid post code"
+msgstr "Introduïu un codi postal vàlid."
+
+#: .\contrib\localflavor\id\forms.py:68 .\contrib\localflavor\nl\forms.py:53
+msgid "Enter a valid phone number"
+msgstr "Introduïu un número de telèfon vàlid."
+
+#: .\contrib\localflavor\id\forms.py:107
+msgid "Enter a valid vehicle license plate number"
+msgstr "Introduïu un número de matrícula vàlid."
+
+#: .\contrib\localflavor\id\forms.py:170
+msgid "Enter a valid NIK/KTP number"
+msgstr "Introduïu un número NIK/KTP vàlid."
+
+#: .\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 "Govern 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 "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 "Introduïu un codi zip en el format XXXXXXX."
+msgstr "Introduïu un codi postal en el format XXXXXXX."
-#: contrib/localflavor/is_/forms.py:17
+#: .\contrib\localflavor\is_\forms.py:18
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."
+"Introduïu un número vàlid d'identificació d'Islàndia. El format és XXXXXX-"
+"XXXX."
-#: contrib/localflavor/is_/forms.py:18
+#: .\contrib\localflavor\is_\forms.py:19
msgid "The Icelandic identification number is not valid."
-msgstr "El número de identificació d'Islàndia no és vàlid."
+msgstr "El número d'identificació d'Islàndia no és vàlid."
-#: contrib/localflavor/it/forms.py:14
+#: .\contrib\localflavor\it\forms.py:15
msgid "Enter a valid zip code."
msgstr "Introduïu un codi zip vàlid."
-#: contrib/localflavor/it/forms.py:43
+#: .\contrib\localflavor\it\forms.py:44
msgid "Enter a valid Social Security number."
msgstr "Introduïu un número valid de la Seguretat Social."
-#: contrib/localflavor/it/forms.py:68
+#: .\contrib\localflavor\it\forms.py:69
msgid "Enter a valid VAT number."
-msgstr "Introduïu un número de IVA (VAT) vàlid."
+msgstr "Introduïu un número d'IVA (VAT) vàlid."
-#: contrib/localflavor/jp/forms.py:16
+#: .\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
+#: .\contrib\localflavor\jp\jp_prefectures.py:4
msgid "Hokkaido"
msgstr "Hokkaido"
-#: contrib/localflavor/jp/jp_prefectures.py:5
+#: .\contrib\localflavor\jp\jp_prefectures.py:5
msgid "Aomori"
msgstr "Aomori"
-#: contrib/localflavor/jp/jp_prefectures.py:6
+#: .\contrib\localflavor\jp\jp_prefectures.py:6
msgid "Iwate"
msgstr "Iwate"
-#: contrib/localflavor/jp/jp_prefectures.py:7
+#: .\contrib\localflavor\jp\jp_prefectures.py:7
msgid "Miyagi"
msgstr "Miyagi"
-#: contrib/localflavor/jp/jp_prefectures.py:8
+#: .\contrib\localflavor\jp\jp_prefectures.py:8
msgid "Akita"
msgstr "Akita"
-#: contrib/localflavor/jp/jp_prefectures.py:9
+#: .\contrib\localflavor\jp\jp_prefectures.py:9
msgid "Yamagata"
msgstr "Yamagata"
-#: contrib/localflavor/jp/jp_prefectures.py:10
+#: .\contrib\localflavor\jp\jp_prefectures.py:10
msgid "Fukushima"
msgstr "Fukushima"
-#: contrib/localflavor/jp/jp_prefectures.py:11
+#: .\contrib\localflavor\jp\jp_prefectures.py:11
msgid "Ibaraki"
msgstr "Ibaraki"
-#: contrib/localflavor/jp/jp_prefectures.py:12
+#: .\contrib\localflavor\jp\jp_prefectures.py:12
msgid "Tochigi"
msgstr "Tochigi"
-#: contrib/localflavor/jp/jp_prefectures.py:13
+#: .\contrib\localflavor\jp\jp_prefectures.py:13
msgid "Gunma"
msgstr "Gunma"
-#: contrib/localflavor/jp/jp_prefectures.py:14
+#: .\contrib\localflavor\jp\jp_prefectures.py:14
msgid "Saitama"
msgstr "Saitama"
-#: contrib/localflavor/jp/jp_prefectures.py:15
+#: .\contrib\localflavor\jp\jp_prefectures.py:15
msgid "Chiba"
msgstr "Chiba"
-#: contrib/localflavor/jp/jp_prefectures.py:16
+#: .\contrib\localflavor\jp\jp_prefectures.py:16
msgid "Tokyo"
msgstr "Tokyo"
-#: contrib/localflavor/jp/jp_prefectures.py:17
+#: .\contrib\localflavor\jp\jp_prefectures.py:17
msgid "Kanagawa"
msgstr "Kanagawa"
-#: contrib/localflavor/jp/jp_prefectures.py:18
+#: .\contrib\localflavor\jp\jp_prefectures.py:18
msgid "Yamanashi"
msgstr "Yamanashi"
-#: contrib/localflavor/jp/jp_prefectures.py:19
+#: .\contrib\localflavor\jp\jp_prefectures.py:19
msgid "Nagano"
msgstr "Nagano"
-#: contrib/localflavor/jp/jp_prefectures.py:20
+#: .\contrib\localflavor\jp\jp_prefectures.py:20
msgid "Niigata"
msgstr "Niigata"
-#: contrib/localflavor/jp/jp_prefectures.py:21
+#: .\contrib\localflavor\jp\jp_prefectures.py:21
msgid "Toyama"
msgstr "Toyama"
-#: contrib/localflavor/jp/jp_prefectures.py:22
+#: .\contrib\localflavor\jp\jp_prefectures.py:22
msgid "Ishikawa"
msgstr "Ishikawa"
-#: contrib/localflavor/jp/jp_prefectures.py:23
+#: .\contrib\localflavor\jp\jp_prefectures.py:23
msgid "Fukui"
msgstr "Fukui"
-#: contrib/localflavor/jp/jp_prefectures.py:24
+#: .\contrib\localflavor\jp\jp_prefectures.py:24
msgid "Gifu"
msgstr "Gifu"
-#: contrib/localflavor/jp/jp_prefectures.py:25
+#: .\contrib\localflavor\jp\jp_prefectures.py:25
msgid "Shizuoka"
msgstr "Shizuoka"
-#: contrib/localflavor/jp/jp_prefectures.py:26
+#: .\contrib\localflavor\jp\jp_prefectures.py:26
msgid "Aichi"
msgstr "Aichi"
-#: contrib/localflavor/jp/jp_prefectures.py:27
+#: .\contrib\localflavor\jp\jp_prefectures.py:27
msgid "Mie"
msgstr "Mie"
-#: contrib/localflavor/jp/jp_prefectures.py:28
+#: .\contrib\localflavor\jp\jp_prefectures.py:28
msgid "Shiga"
msgstr "Shiga"
-#: contrib/localflavor/jp/jp_prefectures.py:29
+#: .\contrib\localflavor\jp\jp_prefectures.py:29
msgid "Kyoto"
msgstr "Kyoto"
-#: contrib/localflavor/jp/jp_prefectures.py:30
+#: .\contrib\localflavor\jp\jp_prefectures.py:30
msgid "Osaka"
msgstr "Osaka"
-#: contrib/localflavor/jp/jp_prefectures.py:31
+#: .\contrib\localflavor\jp\jp_prefectures.py:31
msgid "Hyogo"
msgstr "Hyogo"
-#: contrib/localflavor/jp/jp_prefectures.py:32
+#: .\contrib\localflavor\jp\jp_prefectures.py:32
msgid "Nara"
msgstr "Nara"
-#: contrib/localflavor/jp/jp_prefectures.py:33
+#: .\contrib\localflavor\jp\jp_prefectures.py:33
msgid "Wakayama"
msgstr "Wakayama"
-#: contrib/localflavor/jp/jp_prefectures.py:34
+#: .\contrib\localflavor\jp\jp_prefectures.py:34
msgid "Tottori"
msgstr "Tottori"
-#: contrib/localflavor/jp/jp_prefectures.py:35
+#: .\contrib\localflavor\jp\jp_prefectures.py:35
msgid "Shimane"
msgstr "Shimane"
-#: contrib/localflavor/jp/jp_prefectures.py:36
+#: .\contrib\localflavor\jp\jp_prefectures.py:36
msgid "Okayama"
msgstr "Okayama"
-#: contrib/localflavor/jp/jp_prefectures.py:37
+#: .\contrib\localflavor\jp\jp_prefectures.py:37
msgid "Hiroshima"
msgstr "Hiroshima"
-#: contrib/localflavor/jp/jp_prefectures.py:38
+#: .\contrib\localflavor\jp\jp_prefectures.py:38
msgid "Yamaguchi"
msgstr "Yamaguchi"
-#: contrib/localflavor/jp/jp_prefectures.py:39
+#: .\contrib\localflavor\jp\jp_prefectures.py:39
msgid "Tokushima"
msgstr "Tokushima"
-#: contrib/localflavor/jp/jp_prefectures.py:40
+#: .\contrib\localflavor\jp\jp_prefectures.py:40
msgid "Kagawa"
msgstr "Kagawa"
-#: contrib/localflavor/jp/jp_prefectures.py:41
+#: .\contrib\localflavor\jp\jp_prefectures.py:41
msgid "Ehime"
msgstr "Ehime"
-#: contrib/localflavor/jp/jp_prefectures.py:42
+#: .\contrib\localflavor\jp\jp_prefectures.py:42
msgid "Kochi"
msgstr "Kochi"
-#: contrib/localflavor/jp/jp_prefectures.py:43
+#: .\contrib\localflavor\jp\jp_prefectures.py:43
msgid "Fukuoka"
msgstr "Fukuoka"
-#: contrib/localflavor/jp/jp_prefectures.py:44
+#: .\contrib\localflavor\jp\jp_prefectures.py:44
msgid "Saga"
msgstr "Saga"
-#: contrib/localflavor/jp/jp_prefectures.py:45
+#: .\contrib\localflavor\jp\jp_prefectures.py:45
msgid "Nagasaki"
msgstr "Nagasaki"
-#: contrib/localflavor/jp/jp_prefectures.py:46
+#: .\contrib\localflavor\jp\jp_prefectures.py:46
msgid "Kumamoto"
msgstr "Kumamoto"
-#: contrib/localflavor/jp/jp_prefectures.py:47
+#: .\contrib\localflavor\jp\jp_prefectures.py:47
msgid "Oita"
msgstr "Oita"
-#: contrib/localflavor/jp/jp_prefectures.py:48
+#: .\contrib\localflavor\jp\jp_prefectures.py:48
msgid "Miyazaki"
msgstr "Miyazaki"
-#: contrib/localflavor/jp/jp_prefectures.py:49
+#: .\contrib\localflavor\jp\jp_prefectures.py:49
msgid "Kagoshima"
msgstr "Kagoshima"
-#: contrib/localflavor/jp/jp_prefectures.py:50
+#: .\contrib\localflavor\jp\jp_prefectures.py:50
msgid "Okinawa"
msgstr "Okinawa"
-#: contrib/localflavor/mx/mx_states.py:12
+#: .\contrib\localflavor\kw\forms.py:25
+msgid "Enter a valid Kuwaiti Civil ID number"
+msgstr "Introduïu un número d'Identitat Kuwaitià vàlid"
+
+#: .\contrib\localflavor\mx\mx_states.py:12
msgid "Aguascalientes"
msgstr "Aguascalientes"
-#: contrib/localflavor/mx/mx_states.py:13
+#: .\contrib\localflavor\mx\mx_states.py:13
msgid "Baja California"
-msgstr "Baixa California"
+msgstr "Baixa Califòrnia"
-#: contrib/localflavor/mx/mx_states.py:14
+#: .\contrib\localflavor\mx\mx_states.py:14
msgid "Baja California Sur"
-msgstr "Baixa California Sud"
+msgstr "Baixa Califòrnia Sud"
-#: contrib/localflavor/mx/mx_states.py:15
+#: .\contrib\localflavor\mx\mx_states.py:15
msgid "Campeche"
msgstr "Campeche"
-#: contrib/localflavor/mx/mx_states.py:16
+#: .\contrib\localflavor\mx\mx_states.py:16
msgid "Chihuahua"
msgstr "Chihuahua"
-#: contrib/localflavor/mx/mx_states.py:17
+#: .\contrib\localflavor\mx\mx_states.py:17
msgid "Chiapas"
msgstr "Chiapas"
-#: contrib/localflavor/mx/mx_states.py:18
+#: .\contrib\localflavor\mx\mx_states.py:18
msgid "Coahuila"
msgstr "Coahuila"
-#: contrib/localflavor/mx/mx_states.py:19
+#: .\contrib\localflavor\mx\mx_states.py:19
msgid "Colima"
msgstr "Colima"
-#: contrib/localflavor/mx/mx_states.py:20
+#: .\contrib\localflavor\mx\mx_states.py:20
msgid "Distrito Federal"
msgstr "Districte Federal"
-#: contrib/localflavor/mx/mx_states.py:21
+#: .\contrib\localflavor\mx\mx_states.py:21
msgid "Durango"
msgstr "Durango"
-#: contrib/localflavor/mx/mx_states.py:22
+#: .\contrib\localflavor\mx\mx_states.py:22
msgid "Guerrero"
msgstr "Guerrero"
-#: contrib/localflavor/mx/mx_states.py:23
+#: .\contrib\localflavor\mx\mx_states.py:23
msgid "Guanajuato"
msgstr "Guanajuato"
-#: contrib/localflavor/mx/mx_states.py:24
+#: .\contrib\localflavor\mx\mx_states.py:24
msgid "Hidalgo"
msgstr "Hidalgo"
-#: contrib/localflavor/mx/mx_states.py:25
+#: .\contrib\localflavor\mx\mx_states.py:25
msgid "Jalisco"
msgstr "Jalisco"
-#: contrib/localflavor/mx/mx_states.py:26
+#: .\contrib\localflavor\mx\mx_states.py:26
msgid "Estado de México"
msgstr "Estat de Mèxic"
-#: contrib/localflavor/mx/mx_states.py:27
+#: .\contrib\localflavor\mx\mx_states.py:27
msgid "Michoacán"
msgstr "Michoacán"
-#: contrib/localflavor/mx/mx_states.py:28
+#: .\contrib\localflavor\mx\mx_states.py:28
msgid "Morelos"
msgstr "Morelos"
-#: contrib/localflavor/mx/mx_states.py:29
+#: .\contrib\localflavor\mx\mx_states.py:29
msgid "Nayarit"
msgstr "Nayarit"
-#: contrib/localflavor/mx/mx_states.py:30
+#: .\contrib\localflavor\mx\mx_states.py:30
msgid "Nuevo León"
msgstr "Nuevo León"
-#: contrib/localflavor/mx/mx_states.py:31
+#: .\contrib\localflavor\mx\mx_states.py:31
msgid "Oaxaca"
msgstr "Oaxaca"
-#: contrib/localflavor/mx/mx_states.py:32
+#: .\contrib\localflavor\mx\mx_states.py:32
msgid "Puebla"
msgstr "Puebla"
-#: contrib/localflavor/mx/mx_states.py:33
+#: .\contrib\localflavor\mx\mx_states.py:33
msgid "Querétaro"
msgstr "Querétaro"
-#: contrib/localflavor/mx/mx_states.py:34
+#: .\contrib\localflavor\mx\mx_states.py:34
msgid "Quintana Roo"
msgstr "Quintana Roo"
-#: contrib/localflavor/mx/mx_states.py:35
+#: .\contrib\localflavor\mx\mx_states.py:35
msgid "Sinaloa"
msgstr "Sinaloa"
-#: contrib/localflavor/mx/mx_states.py:36
+#: .\contrib\localflavor\mx\mx_states.py:36
msgid "San Luis Potosí"
msgstr "San Luis Potosí"
-#: contrib/localflavor/mx/mx_states.py:37
+#: .\contrib\localflavor\mx\mx_states.py:37
msgid "Sonora"
msgstr "Sonora"
-#: contrib/localflavor/mx/mx_states.py:38
+#: .\contrib\localflavor\mx\mx_states.py:38
msgid "Tabasco"
msgstr "Tabasco"
-#: contrib/localflavor/mx/mx_states.py:39
+#: .\contrib\localflavor\mx\mx_states.py:39
msgid "Tamaulipas"
msgstr "Tamaulipas"
-#: contrib/localflavor/mx/mx_states.py:40
+#: .\contrib\localflavor\mx\mx_states.py:40
msgid "Tlaxcala"
msgstr "Tlaxcala"
-#: contrib/localflavor/mx/mx_states.py:41
+#: .\contrib\localflavor\mx\mx_states.py:41
msgid "Veracruz"
msgstr "Veracruz"
-#: contrib/localflavor/mx/mx_states.py:42
+#: .\contrib\localflavor\mx\mx_states.py:42
msgid "Yucatán"
msgstr "Yucatán"
-#: contrib/localflavor/mx/mx_states.py:43
+#: .\contrib\localflavor\mx\mx_states.py:43
msgid "Zacatecas"
msgstr "Zacatecas"
-#: contrib/localflavor/nl/forms.py:21
+#: .\contrib\localflavor\nl\forms.py:22
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
+#: .\contrib\localflavor\nl\forms.py:79
msgid "Enter a valid SoFi number"
msgstr "Introduïu un número SoFi vàlid."
-#: contrib/localflavor/nl/nl_provinces.py:4
+#: .\contrib\localflavor\nl\nl_provinces.py:4
msgid "Drenthe"
msgstr "Drenthe"
-#: contrib/localflavor/nl/nl_provinces.py:5
+#: .\contrib\localflavor\nl\nl_provinces.py:5
msgid "Flevoland"
msgstr "Flevoland"
-#: contrib/localflavor/nl/nl_provinces.py:6
+#: .\contrib\localflavor\nl\nl_provinces.py:6
msgid "Friesland"
msgstr "Friesland"
-#: contrib/localflavor/nl/nl_provinces.py:7
+#: .\contrib\localflavor\nl\nl_provinces.py:7
msgid "Gelderland"
msgstr "Gelderland"
-#: contrib/localflavor/nl/nl_provinces.py:8
+#: .\contrib\localflavor\nl\nl_provinces.py:8
msgid "Groningen"
msgstr "Groningen"
-#: contrib/localflavor/nl/nl_provinces.py:9
+#: .\contrib\localflavor\nl\nl_provinces.py:9
msgid "Limburg"
msgstr "Limburg"
-#: contrib/localflavor/nl/nl_provinces.py:10
+#: .\contrib\localflavor\nl\nl_provinces.py:10
msgid "Noord-Brabant"
msgstr "Noord-Brabant"
-#: contrib/localflavor/nl/nl_provinces.py:11
+#: .\contrib\localflavor\nl\nl_provinces.py:11
msgid "Noord-Holland"
msgstr "Noord-Holland"
-#: contrib/localflavor/nl/nl_provinces.py:12
+#: .\contrib\localflavor\nl\nl_provinces.py:12
msgid "Overijssel"
msgstr "Overijssel"
-#: contrib/localflavor/nl/nl_provinces.py:13
+#: .\contrib\localflavor\nl\nl_provinces.py:13
msgid "Utrecht"
msgstr "Utrecht"
-#: contrib/localflavor/nl/nl_provinces.py:14
+#: .\contrib\localflavor\nl\nl_provinces.py:14
msgid "Zeeland"
msgstr "Zeeland"
-#: contrib/localflavor/nl/nl_provinces.py:15
+#: .\contrib\localflavor\nl\nl_provinces.py:15
msgid "Zuid-Holland"
msgstr "Zuid-Holland"
-#: contrib/localflavor/no/forms.py:33
+#: .\contrib\localflavor\no\forms.py:34
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
+#: .\contrib\localflavor\pe\forms.py:25
msgid "This field requires 8 digits."
msgstr "Aquest camp precisa 8 dígits."
-#: contrib/localflavor/pe/forms.py:52
+#: .\contrib\localflavor\pe\forms.py:53
msgid "This field requires 11 digits."
msgstr "Aquest camp precisa 11 dígits."
-#: contrib/localflavor/pl/forms.py:38
+#: .\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
+#: .\contrib\localflavor\pl\forms.py:39
msgid "Wrong checksum for the National Identification Number."
-msgstr "Validació invàlida del número d'identificació nacional."
+msgstr "Verificació del número d'identificació nacional invàlida."
-#: contrib/localflavor/pl/forms.py:71
+#: .\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
+#: .\contrib\localflavor\pl\forms.py:72
msgid "Wrong checksum for the Tax Number (NIP)."
-msgstr "Validació invàlida del número tributari (NIP)."
+msgstr "Verificació del número tributari (NIP) invàlida."
-#: contrib/localflavor/pl/forms.py:109
+#: .\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 "
+"El número nacional de registre de negocis (REGON) està compost de 9 o 14 "
"dígits."
-#: contrib/localflavor/pl/forms.py:110
+#: .\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."
+msgstr "Verificació del número nacional de registre de negocis invàlida."
-#: contrib/localflavor/pl/forms.py:148
+#: .\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
+#: .\contrib\localflavor\pl\pl_voivodeships.py:8
msgid "Lower Silesia"
-msgstr "Lower Silesia"
+msgstr "Baixa Silèsia"
-#: contrib/localflavor/pl/pl_voivodeships.py:9
+#: .\contrib\localflavor\pl\pl_voivodeships.py:9
msgid "Kuyavia-Pomerania"
msgstr "Kuyavia-Pomerania"
-#: contrib/localflavor/pl/pl_voivodeships.py:10
+#: .\contrib\localflavor\pl\pl_voivodeships.py:10
msgid "Lublin"
msgstr "Lublin"
-#: contrib/localflavor/pl/pl_voivodeships.py:11
+#: .\contrib\localflavor\pl\pl_voivodeships.py:11
msgid "Lubusz"
msgstr "Lubusz"
-#: contrib/localflavor/pl/pl_voivodeships.py:12
+#: .\contrib\localflavor\pl\pl_voivodeships.py:12
msgid "Lodz"
msgstr "Lodz"
-#: contrib/localflavor/pl/pl_voivodeships.py:13
+#: .\contrib\localflavor\pl\pl_voivodeships.py:13
msgid "Lesser Poland"
-msgstr "Lesser Poland"
+msgstr "Polònia Menor"
-#: contrib/localflavor/pl/pl_voivodeships.py:14
+#: .\contrib\localflavor\pl\pl_voivodeships.py:14
msgid "Masovia"
msgstr "Masovia"
-#: contrib/localflavor/pl/pl_voivodeships.py:15
+#: .\contrib\localflavor\pl\pl_voivodeships.py:15
msgid "Opole"
msgstr "Opole"
-#: contrib/localflavor/pl/pl_voivodeships.py:16
+#: .\contrib\localflavor\pl\pl_voivodeships.py:16
msgid "Subcarpatia"
msgstr "Subcarpatia"
-#: contrib/localflavor/pl/pl_voivodeships.py:17
+#: .\contrib\localflavor\pl\pl_voivodeships.py:17
msgid "Podlasie"
msgstr "Podlasie"
-#: contrib/localflavor/pl/pl_voivodeships.py:18
+#: .\contrib\localflavor\pl\pl_voivodeships.py:18
msgid "Pomerania"
-msgstr "Pomerania"
+msgstr "Pomerània"
-#: contrib/localflavor/pl/pl_voivodeships.py:19
+#: .\contrib\localflavor\pl\pl_voivodeships.py:19
msgid "Silesia"
-msgstr "Silesia"
+msgstr "Silèsia"
-#: contrib/localflavor/pl/pl_voivodeships.py:20
+#: .\contrib\localflavor\pl\pl_voivodeships.py:20
msgid "Swietokrzyskie"
msgstr "Swietokrzyskie"
-#: contrib/localflavor/pl/pl_voivodeships.py:21
+#: .\contrib\localflavor\pl\pl_voivodeships.py:21
msgid "Warmia-Masuria"
msgstr "Warmia-Masuria"
-#: contrib/localflavor/pl/pl_voivodeships.py:22
+#: .\contrib\localflavor\pl\pl_voivodeships.py:22
msgid "Greater Poland"
-msgstr "Greater Poland"
+msgstr "Polònia Major"
-#: contrib/localflavor/pl/pl_voivodeships.py:23
+#: .\contrib\localflavor\pl\pl_voivodeships.py:23
msgid "West Pomerania"
-msgstr "West Pomerania"
+msgstr "Pomerània Oest"
-#: contrib/localflavor/ro/forms.py:19
+#: .\contrib\localflavor\pt\forms.py:17
+msgid "Enter a zip code in the format XXXX-XXX."
+msgstr "Introduïu un codi postal en el format XXXX-XXX."
+
+#: .\contrib\localflavor\pt\forms.py:37
+msgid "Phone numbers must have 9 digits, or start by + or 00."
+msgstr "Els números de telèfon han de tenir 9 dígits, o començar per "
+"+ o 00."
+
+#: .\contrib\localflavor\ro\forms.py:19
msgid "Enter a valid CIF."
msgstr "Introduïu un CIF vàlid."
-#: contrib/localflavor/ro/forms.py:56
+#: .\contrib\localflavor\ro\forms.py:56
msgid "Enter a valid CNP."
msgstr "Introduïu un CNP vàlid."
-#: contrib/localflavor/ro/forms.py:141
+#: .\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
+#: .\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."
+msgstr "El número de telèfon ha d'estar en el format XXXX-XXXXXX."
-#: contrib/localflavor/ro/forms.py:194
+#: .\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
+#: .\contrib\localflavor\se\forms.py:50
+msgid "Enter a valid Swedish organisation number."
+msgstr "Introduïu un número d'organització Sueca vàlid."
+
+#: .\contrib\localflavor\se\forms.py:107
+msgid "Enter a valid Swedish personal identity number."
+msgstr "Introduïu un número d'identitat personal suec vàlid."
+
+#: .\contrib\localflavor\se\forms.py:108
+msgid "Co-ordination numbers are not allowed."
+msgstr "No es permeten números de coordinació."
+
+#: .\contrib\localflavor\se\forms.py:150
+msgid "Enter a Swedish postal code in the format XXXXX."
+msgstr "Introduïu un codi postal suec en el format XXXXX."
+
+#: .\contrib\localflavor\se\se_counties.py:15
+msgid "Stockholm"
+msgstr "Estocolm"
+
+#: .\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
+#: .\contrib\localflavor\sk\sk_districts.py:9
msgid "Banska Stiavnica"
msgstr "Banska Stiavnica"
-#: contrib/localflavor/sk/sk_districts.py:10
+#: .\contrib\localflavor\sk\sk_districts.py:10
msgid "Bardejov"
msgstr "Bardejov"
-#: contrib/localflavor/sk/sk_districts.py:11
+#: .\contrib\localflavor\sk\sk_districts.py:11
msgid "Banovce nad Bebravou"
msgstr "Banovce nad Bebravou"
-#: contrib/localflavor/sk/sk_districts.py:12
+#: .\contrib\localflavor\sk\sk_districts.py:12
msgid "Brezno"
msgstr "Brezno"
-#: contrib/localflavor/sk/sk_districts.py:13
+#: .\contrib\localflavor\sk\sk_districts.py:13
msgid "Bratislava I"
msgstr "Bratislava I"
-#: contrib/localflavor/sk/sk_districts.py:14
+#: .\contrib\localflavor\sk\sk_districts.py:14
msgid "Bratislava II"
msgstr "Bratislava II"
-#: contrib/localflavor/sk/sk_districts.py:15
+#: .\contrib\localflavor\sk\sk_districts.py:15
msgid "Bratislava III"
msgstr "Bratislava III"
-#: contrib/localflavor/sk/sk_districts.py:16
+#: .\contrib\localflavor\sk\sk_districts.py:16
msgid "Bratislava IV"
msgstr "Bratislava IV"
-#: contrib/localflavor/sk/sk_districts.py:17
+#: .\contrib\localflavor\sk\sk_districts.py:17
msgid "Bratislava V"
msgstr "Bratislava V"
-#: contrib/localflavor/sk/sk_districts.py:18
+#: .\contrib\localflavor\sk\sk_districts.py:18
msgid "Bytca"
msgstr "Bytca"
-#: contrib/localflavor/sk/sk_districts.py:19
+#: .\contrib\localflavor\sk\sk_districts.py:19
msgid "Cadca"
msgstr "Cadca"
-#: contrib/localflavor/sk/sk_districts.py:20
+#: .\contrib\localflavor\sk\sk_districts.py:20
msgid "Detva"
msgstr "Detva"
-#: contrib/localflavor/sk/sk_districts.py:21
+#: .\contrib\localflavor\sk\sk_districts.py:21
msgid "Dolny Kubin"
msgstr "Dolny Kubin"
-#: contrib/localflavor/sk/sk_districts.py:22
+#: .\contrib\localflavor\sk\sk_districts.py:22
msgid "Dunajska Streda"
msgstr "Dunajska Streda"
-#: contrib/localflavor/sk/sk_districts.py:23
+#: .\contrib\localflavor\sk\sk_districts.py:23
msgid "Galanta"
msgstr "Galanta"
-#: contrib/localflavor/sk/sk_districts.py:24
+#: .\contrib\localflavor\sk\sk_districts.py:24
msgid "Gelnica"
msgstr "Gelnica"
-#: contrib/localflavor/sk/sk_districts.py:25
+#: .\contrib\localflavor\sk\sk_districts.py:25
msgid "Hlohovec"
msgstr "Hlohovec"
-#: contrib/localflavor/sk/sk_districts.py:26
+#: .\contrib\localflavor\sk\sk_districts.py:26
msgid "Humenne"
msgstr "Humenne"
-#: contrib/localflavor/sk/sk_districts.py:27
+#: .\contrib\localflavor\sk\sk_districts.py:27
msgid "Ilava"
msgstr "Ilava"
-#: contrib/localflavor/sk/sk_districts.py:28
+#: .\contrib\localflavor\sk\sk_districts.py:28
msgid "Kezmarok"
msgstr "Kezmarok"
-#: contrib/localflavor/sk/sk_districts.py:29
+#: .\contrib\localflavor\sk\sk_districts.py:29
msgid "Komarno"
msgstr "Komarno"
-#: contrib/localflavor/sk/sk_districts.py:30
+#: .\contrib\localflavor\sk\sk_districts.py:30
msgid "Kosice I"
msgstr "Kosice I"
-#: contrib/localflavor/sk/sk_districts.py:31
+#: .\contrib\localflavor\sk\sk_districts.py:31
msgid "Kosice II"
msgstr "Kosice II"
-#: contrib/localflavor/sk/sk_districts.py:32
+#: .\contrib\localflavor\sk\sk_districts.py:32
msgid "Kosice III"
msgstr "Kosice III"
-#: contrib/localflavor/sk/sk_districts.py:33
+#: .\contrib\localflavor\sk\sk_districts.py:33
msgid "Kosice IV"
msgstr "Kosice IV"
-#: contrib/localflavor/sk/sk_districts.py:34
+#: .\contrib\localflavor\sk\sk_districts.py:34
msgid "Kosice - okolie"
msgstr "Kosice - okolie"
-#: contrib/localflavor/sk/sk_districts.py:35
+#: .\contrib\localflavor\sk\sk_districts.py:35
msgid "Krupina"
msgstr "Krupina"
-#: contrib/localflavor/sk/sk_districts.py:36
+#: .\contrib\localflavor\sk\sk_districts.py:36
msgid "Kysucke Nove Mesto"
msgstr "Kysucke Nove Mesto"
-#: contrib/localflavor/sk/sk_districts.py:37
+#: .\contrib\localflavor\sk\sk_districts.py:37
msgid "Levice"
msgstr "Levice"
-#: contrib/localflavor/sk/sk_districts.py:38
+#: .\contrib\localflavor\sk\sk_districts.py:38
msgid "Levoca"
msgstr "Levoca"
-#: contrib/localflavor/sk/sk_districts.py:39
+#: .\contrib\localflavor\sk\sk_districts.py:39
msgid "Liptovsky Mikulas"
msgstr "Liptovsky Mikulas"
-#: contrib/localflavor/sk/sk_districts.py:40
+#: .\contrib\localflavor\sk\sk_districts.py:40
msgid "Lucenec"
msgstr "Lucenec"
-#: contrib/localflavor/sk/sk_districts.py:41
+#: .\contrib\localflavor\sk\sk_districts.py:41
msgid "Malacky"
msgstr "Malacky"
-#: contrib/localflavor/sk/sk_districts.py:42
+#: .\contrib\localflavor\sk\sk_districts.py:42
msgid "Martin"
msgstr "Martin"
-#: contrib/localflavor/sk/sk_districts.py:43
+#: .\contrib\localflavor\sk\sk_districts.py:43
msgid "Medzilaborce"
msgstr "Medzilaborce"
-#: contrib/localflavor/sk/sk_districts.py:44
+#: .\contrib\localflavor\sk\sk_districts.py:44
msgid "Michalovce"
msgstr "Michalovce"
-#: contrib/localflavor/sk/sk_districts.py:45
+#: .\contrib\localflavor\sk\sk_districts.py:45
msgid "Myjava"
msgstr "Myjava"
-#: contrib/localflavor/sk/sk_districts.py:46
+#: .\contrib\localflavor\sk\sk_districts.py:46
msgid "Namestovo"
msgstr "Namestovo"
-#: contrib/localflavor/sk/sk_districts.py:47
+#: .\contrib\localflavor\sk\sk_districts.py:47
msgid "Nitra"
msgstr "Nitra"
-#: contrib/localflavor/sk/sk_districts.py:48
+#: .\contrib\localflavor\sk\sk_districts.py:48
msgid "Nove Mesto nad Vahom"
msgstr "Nove Mesto nad Vahom"
-#: contrib/localflavor/sk/sk_districts.py:49
+#: .\contrib\localflavor\sk\sk_districts.py:49
msgid "Nove Zamky"
msgstr "Nove Zamky"
-#: contrib/localflavor/sk/sk_districts.py:50
+#: .\contrib\localflavor\sk\sk_districts.py:50
msgid "Partizanske"
msgstr "Partizanske"
-#: contrib/localflavor/sk/sk_districts.py:51
+#: .\contrib\localflavor\sk\sk_districts.py:51
msgid "Pezinok"
msgstr "Pezinok"
-#: contrib/localflavor/sk/sk_districts.py:52
+#: .\contrib\localflavor\sk\sk_districts.py:52
msgid "Piestany"
msgstr "Piestany"
-#: contrib/localflavor/sk/sk_districts.py:53
+#: .\contrib\localflavor\sk\sk_districts.py:53
msgid "Poltar"
msgstr "Poltar"
-#: contrib/localflavor/sk/sk_districts.py:54
+#: .\contrib\localflavor\sk\sk_districts.py:54
msgid "Poprad"
msgstr "Poprad"
-#: contrib/localflavor/sk/sk_districts.py:55
+#: .\contrib\localflavor\sk\sk_districts.py:55
msgid "Povazska Bystrica"
msgstr "Povazska Bystrica"
-#: contrib/localflavor/sk/sk_districts.py:56
+#: .\contrib\localflavor\sk\sk_districts.py:56
msgid "Presov"
msgstr "Presov"
-#: contrib/localflavor/sk/sk_districts.py:57
+#: .\contrib\localflavor\sk\sk_districts.py:57
msgid "Prievidza"
msgstr "Prievidza"
-#: contrib/localflavor/sk/sk_districts.py:58
+#: .\contrib\localflavor\sk\sk_districts.py:58
msgid "Puchov"
msgstr "Puchov"
-#: contrib/localflavor/sk/sk_districts.py:59
+#: .\contrib\localflavor\sk\sk_districts.py:59
msgid "Revuca"
msgstr "Revuca"
-#: contrib/localflavor/sk/sk_districts.py:60
+#: .\contrib\localflavor\sk\sk_districts.py:60
msgid "Rimavska Sobota"
msgstr "Rimavska Sobota"
-#: contrib/localflavor/sk/sk_districts.py:61
+#: .\contrib\localflavor\sk\sk_districts.py:61
msgid "Roznava"
msgstr "Roznava"
-#: contrib/localflavor/sk/sk_districts.py:62
+#: .\contrib\localflavor\sk\sk_districts.py:62
msgid "Ruzomberok"
msgstr "Ruzomberok"
-#: contrib/localflavor/sk/sk_districts.py:63
+#: .\contrib\localflavor\sk\sk_districts.py:63
msgid "Sabinov"
msgstr "Sabinov"
-#: contrib/localflavor/sk/sk_districts.py:64
+#: .\contrib\localflavor\sk\sk_districts.py:64
msgid "Senec"
msgstr "Senec"
-#: contrib/localflavor/sk/sk_districts.py:65
+#: .\contrib\localflavor\sk\sk_districts.py:65
msgid "Senica"
msgstr "Senica"
-#: contrib/localflavor/sk/sk_districts.py:66
+#: .\contrib\localflavor\sk\sk_districts.py:66
msgid "Skalica"
msgstr "Skalica"
-#: contrib/localflavor/sk/sk_districts.py:67
+#: .\contrib\localflavor\sk\sk_districts.py:67
msgid "Snina"
msgstr "Snina"
-#: contrib/localflavor/sk/sk_districts.py:68
+#: .\contrib\localflavor\sk\sk_districts.py:68
msgid "Sobrance"
msgstr "Sobrance"
-#: contrib/localflavor/sk/sk_districts.py:69
+#: .\contrib\localflavor\sk\sk_districts.py:69
msgid "Spisska Nova Ves"
msgstr "Spisska Nova Ves"
-#: contrib/localflavor/sk/sk_districts.py:70
+#: .\contrib\localflavor\sk\sk_districts.py:70
msgid "Stara Lubovna"
msgstr "Stara Lubovna"
-#: contrib/localflavor/sk/sk_districts.py:71
+#: .\contrib\localflavor\sk\sk_districts.py:71
msgid "Stropkov"
msgstr "Stropkov"
-#: contrib/localflavor/sk/sk_districts.py:72
+#: .\contrib\localflavor\sk\sk_districts.py:72
msgid "Svidnik"
msgstr "Svidnik"
-#: contrib/localflavor/sk/sk_districts.py:73
+#: .\contrib\localflavor\sk\sk_districts.py:73
msgid "Sala"
msgstr "Sala"
-#: contrib/localflavor/sk/sk_districts.py:74
+#: .\contrib\localflavor\sk\sk_districts.py:74
msgid "Topolcany"
msgstr "Topolcany"
-#: contrib/localflavor/sk/sk_districts.py:75
+#: .\contrib\localflavor\sk\sk_districts.py:75
msgid "Trebisov"
msgstr "Trebisov"
-#: contrib/localflavor/sk/sk_districts.py:76
+#: .\contrib\localflavor\sk\sk_districts.py:76
msgid "Trencin"
msgstr "Trencin"
-#: contrib/localflavor/sk/sk_districts.py:77
+#: .\contrib\localflavor\sk\sk_districts.py:77
msgid "Trnava"
msgstr "Trnava"
-#: contrib/localflavor/sk/sk_districts.py:78
+#: .\contrib\localflavor\sk\sk_districts.py:78
msgid "Turcianske Teplice"
msgstr "Turcianske Teplice"
-#: contrib/localflavor/sk/sk_districts.py:79
+#: .\contrib\localflavor\sk\sk_districts.py:79
msgid "Tvrdosin"
msgstr "Tvrdosin"
-#: contrib/localflavor/sk/sk_districts.py:80
+#: .\contrib\localflavor\sk\sk_districts.py:80
msgid "Velky Krtis"
msgstr "Velky Krtis"
-#: contrib/localflavor/sk/sk_districts.py:81
+#: .\contrib\localflavor\sk\sk_districts.py:81
msgid "Vranov nad Toplou"
msgstr "Vranov nad Toplou"
-#: contrib/localflavor/sk/sk_districts.py:82
+#: .\contrib\localflavor\sk\sk_districts.py:82
msgid "Zlate Moravce"
msgstr "Zlate Moravce"
-#: contrib/localflavor/sk/sk_districts.py:83
+#: .\contrib\localflavor\sk\sk_districts.py:83
msgid "Zvolen"
msgstr "Zvolen"
-#: contrib/localflavor/sk/sk_districts.py:84
+#: .\contrib\localflavor\sk\sk_districts.py:84
msgid "Zarnovica"
msgstr "Zarnovica"
-#: contrib/localflavor/sk/sk_districts.py:85
+#: .\contrib\localflavor\sk\sk_districts.py:85
msgid "Ziar nad Hronom"
msgstr "Ziar nad Hronom"
-#: contrib/localflavor/sk/sk_districts.py:86
+#: .\contrib\localflavor\sk\sk_districts.py:86
msgid "Zilina"
msgstr "Zilina"
-#: contrib/localflavor/sk/sk_regions.py:8
+#: .\contrib\localflavor\sk\sk_regions.py:8
msgid "Banska Bystrica region"
msgstr "Regió de Banska Bystrica"
-#: contrib/localflavor/sk/sk_regions.py:9
+#: .\contrib\localflavor\sk\sk_regions.py:9
msgid "Bratislava region"
msgstr "Regió de Bratislava"
-#: contrib/localflavor/sk/sk_regions.py:10
+#: .\contrib\localflavor\sk\sk_regions.py:10
msgid "Kosice region"
msgstr "Regió de Kosice"
-#: contrib/localflavor/sk/sk_regions.py:11
+#: .\contrib\localflavor\sk\sk_regions.py:11
msgid "Nitra region"
msgstr "Regió de Nitra"
-#: contrib/localflavor/sk/sk_regions.py:12
+#: .\contrib\localflavor\sk\sk_regions.py:12
msgid "Presov region"
msgstr "Regió de Presov"
-#: contrib/localflavor/sk/sk_regions.py:13
+#: .\contrib\localflavor\sk\sk_regions.py:13
msgid "Trencin region"
msgstr "Regió de Trencin"
-#: contrib/localflavor/sk/sk_regions.py:14
+#: .\contrib\localflavor\sk\sk_regions.py:14
msgid "Trnava region"
msgstr "Regió de Trnava"
-#: contrib/localflavor/sk/sk_regions.py:15
+#: .\contrib\localflavor\sk\sk_regions.py:15
msgid "Zilina region"
msgstr "Regió de Zilina"
-#: contrib/localflavor/uk/forms.py:21
+#: .\contrib\localflavor\uk\forms.py:21
msgid "Enter a valid postcode."
-msgstr "Introdueix un codi postal vàlid."
+msgstr "Introduïu un codi postal vàlid."
-#: contrib/localflavor/uk/uk_regions.py:11
+#: .\contrib\localflavor\uk\uk_regions.py:11
msgid "Bedfordshire"
msgstr "Bedfordshire"
-#: contrib/localflavor/uk/uk_regions.py:12
+#: .\contrib\localflavor\uk\uk_regions.py:12
msgid "Buckinghamshire"
msgstr "Buckinghamshire"
-#: contrib/localflavor/uk/uk_regions.py:14
+#: .\contrib\localflavor\uk\uk_regions.py:14
msgid "Cheshire"
msgstr "Cheshire"
-#: contrib/localflavor/uk/uk_regions.py:15
+#: .\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
+#: .\contrib\localflavor\uk\uk_regions.py:16
msgid "Cumbria"
msgstr "Cumbria"
-#: contrib/localflavor/uk/uk_regions.py:17
+#: .\contrib\localflavor\uk\uk_regions.py:17
msgid "Derbyshire"
msgstr "Derbyshire"
-#: contrib/localflavor/uk/uk_regions.py:18
+#: .\contrib\localflavor\uk\uk_regions.py:18
msgid "Devon"
msgstr "Devon"
-#: contrib/localflavor/uk/uk_regions.py:19
+#: .\contrib\localflavor\uk\uk_regions.py:19
msgid "Dorset"
msgstr "Dorset"
-#: contrib/localflavor/uk/uk_regions.py:20
+#: .\contrib\localflavor\uk\uk_regions.py:20
msgid "Durham"
msgstr "Durham"
-#: contrib/localflavor/uk/uk_regions.py:21
+#: .\contrib\localflavor\uk\uk_regions.py:21
msgid "East Sussex"
msgstr "East Sussex"
-#: contrib/localflavor/uk/uk_regions.py:22
+#: .\contrib\localflavor\uk\uk_regions.py:22
msgid "Essex"
msgstr "Essex"
-#: contrib/localflavor/uk/uk_regions.py:23
+#: .\contrib\localflavor\uk\uk_regions.py:23
msgid "Gloucestershire"
msgstr "Gloucestershire"
-#: contrib/localflavor/uk/uk_regions.py:24
+#: .\contrib\localflavor\uk\uk_regions.py:24
msgid "Greater London"
msgstr "Greater London"
-#: contrib/localflavor/uk/uk_regions.py:25
+#: .\contrib\localflavor\uk\uk_regions.py:25
msgid "Greater Manchester"
msgstr "Greater Manchester"
-#: contrib/localflavor/uk/uk_regions.py:26
+#: .\contrib\localflavor\uk\uk_regions.py:26
msgid "Hampshire"
msgstr "Hampshire"
-#: contrib/localflavor/uk/uk_regions.py:27
+#: .\contrib\localflavor\uk\uk_regions.py:27
msgid "Hertfordshire"
msgstr "Hertfordshire"
-#: contrib/localflavor/uk/uk_regions.py:28
+#: .\contrib\localflavor\uk\uk_regions.py:28
msgid "Kent"
msgstr "Kent"
-#: contrib/localflavor/uk/uk_regions.py:29
+#: .\contrib\localflavor\uk\uk_regions.py:29
msgid "Lancashire"
msgstr "Lancashire"
-#: contrib/localflavor/uk/uk_regions.py:30
+#: .\contrib\localflavor\uk\uk_regions.py:30
msgid "Leicestershire"
msgstr "Leicestershire"
-#: contrib/localflavor/uk/uk_regions.py:31
+#: .\contrib\localflavor\uk\uk_regions.py:31
msgid "Lincolnshire"
msgstr "Lincolnshire"
-#: contrib/localflavor/uk/uk_regions.py:32
+#: .\contrib\localflavor\uk\uk_regions.py:32
msgid "Merseyside"
msgstr "Merseyside"
-#: contrib/localflavor/uk/uk_regions.py:33
+#: .\contrib\localflavor\uk\uk_regions.py:33
msgid "Norfolk"
msgstr "Norfolk"
-#: contrib/localflavor/uk/uk_regions.py:34
+#: .\contrib\localflavor\uk\uk_regions.py:34
msgid "North Yorkshire"
msgstr "North Yorkshire"
-#: contrib/localflavor/uk/uk_regions.py:35
+#: .\contrib\localflavor\uk\uk_regions.py:35
msgid "Northamptonshire"
msgstr "Northamptonshire"
-#: contrib/localflavor/uk/uk_regions.py:36
+#: .\contrib\localflavor\uk\uk_regions.py:36
msgid "Northumberland"
msgstr "Northumberland"
-#: contrib/localflavor/uk/uk_regions.py:37
+#: .\contrib\localflavor\uk\uk_regions.py:37
msgid "Nottinghamshire"
msgstr "Nottinghamshire"
-#: contrib/localflavor/uk/uk_regions.py:38
+#: .\contrib\localflavor\uk\uk_regions.py:38
msgid "Oxfordshire"
msgstr "Oxfordshire"
-#: contrib/localflavor/uk/uk_regions.py:39
+#: .\contrib\localflavor\uk\uk_regions.py:39
msgid "Shropshire"
msgstr "Shropshire"
-#: contrib/localflavor/uk/uk_regions.py:40
+#: .\contrib\localflavor\uk\uk_regions.py:40
msgid "Somerset"
msgstr "Somerset"
-#: contrib/localflavor/uk/uk_regions.py:41
+#: .\contrib\localflavor\uk\uk_regions.py:41
msgid "South Yorkshire"
msgstr "South Yorkshire"
-#: contrib/localflavor/uk/uk_regions.py:42
+#: .\contrib\localflavor\uk\uk_regions.py:42
msgid "Staffordshire"
msgstr "Staffordshire"
-#: contrib/localflavor/uk/uk_regions.py:43
+#: .\contrib\localflavor\uk\uk_regions.py:43
msgid "Suffolk"
msgstr "Suffolk"
-#: contrib/localflavor/uk/uk_regions.py:44
+#: .\contrib\localflavor\uk\uk_regions.py:44
msgid "Surrey"
msgstr "Surrey"
-#: contrib/localflavor/uk/uk_regions.py:45
+#: .\contrib\localflavor\uk\uk_regions.py:45
msgid "Tyne and Wear"
msgstr "Tyne and Wear"
-#: contrib/localflavor/uk/uk_regions.py:46
+#: .\contrib\localflavor\uk\uk_regions.py:46
msgid "Warwickshire"
msgstr "Warwickshire"
-#: contrib/localflavor/uk/uk_regions.py:47
+#: .\contrib\localflavor\uk\uk_regions.py:47
msgid "West Midlands"
msgstr "West Midlands"
-#: contrib/localflavor/uk/uk_regions.py:48
+#: .\contrib\localflavor\uk\uk_regions.py:48
msgid "West Sussex"
msgstr "West Sussex"
-#: contrib/localflavor/uk/uk_regions.py:49
+#: .\contrib\localflavor\uk\uk_regions.py:49
msgid "West Yorkshire"
msgstr "West Yorkshire"
-#: contrib/localflavor/uk/uk_regions.py:50
+#: .\contrib\localflavor\uk\uk_regions.py:50
msgid "Wiltshire"
msgstr "Wiltshire"
-#: contrib/localflavor/uk/uk_regions.py:51
+#: .\contrib\localflavor\uk\uk_regions.py:51
msgid "Worcestershire"
msgstr "Worcestershire"
-#: contrib/localflavor/uk/uk_regions.py:55
+#: .\contrib\localflavor\uk\uk_regions.py:55
msgid "County Antrim"
msgstr "County Antrim"
-#: contrib/localflavor/uk/uk_regions.py:56
+#: .\contrib\localflavor\uk\uk_regions.py:56
msgid "County Armagh"
msgstr "County Armagh"
-#: contrib/localflavor/uk/uk_regions.py:57
+#: .\contrib\localflavor\uk\uk_regions.py:57
msgid "County Down"
msgstr "County Down"
-#: contrib/localflavor/uk/uk_regions.py:58
+#: .\contrib\localflavor\uk\uk_regions.py:58
msgid "County Fermanagh"
-msgstr "Comptat de Fermanagh"
+msgstr "County Fermanagh"
-#: contrib/localflavor/uk/uk_regions.py:59
+#: .\contrib\localflavor\uk\uk_regions.py:59
msgid "County Londonderry"
msgstr "County Londonderry"
-#: contrib/localflavor/uk/uk_regions.py:60
+#: .\contrib\localflavor\uk\uk_regions.py:60
msgid "County Tyrone"
msgstr "County Tyrone"
-#: contrib/localflavor/uk/uk_regions.py:64
+#: .\contrib\localflavor\uk\uk_regions.py:64
msgid "Clwyd"
msgstr "Clwyd"
-#: contrib/localflavor/uk/uk_regions.py:65
+#: .\contrib\localflavor\uk\uk_regions.py:65
msgid "Dyfed"
msgstr "Dyfed"
-#: contrib/localflavor/uk/uk_regions.py:66
+#: .\contrib\localflavor\uk\uk_regions.py:66
msgid "Gwent"
msgstr "Gwent"
-#: contrib/localflavor/uk/uk_regions.py:67
+#: .\contrib\localflavor\uk\uk_regions.py:67
msgid "Gwynedd"
msgstr "Gwynedd"
-#: contrib/localflavor/uk/uk_regions.py:68
+#: .\contrib\localflavor\uk\uk_regions.py:68
msgid "Mid Glamorgan"
msgstr "Mid Glamorgan"
-#: contrib/localflavor/uk/uk_regions.py:69
+#: .\contrib\localflavor\uk\uk_regions.py:69
msgid "Powys"
msgstr "Powys"
-#: contrib/localflavor/uk/uk_regions.py:70
+#: .\contrib\localflavor\uk\uk_regions.py:70
msgid "South Glamorgan"
msgstr "Glamorgan Sud"
-#: contrib/localflavor/uk/uk_regions.py:71
+#: .\contrib\localflavor\uk\uk_regions.py:71
msgid "West Glamorgan"
msgstr "Glamorgan Oest"
-#: contrib/localflavor/uk/uk_regions.py:75
+#: .\contrib\localflavor\uk\uk_regions.py:75
msgid "Borders"
msgstr "Borders"
-#: contrib/localflavor/uk/uk_regions.py:76
+#: .\contrib\localflavor\uk\uk_regions.py:76
msgid "Central Scotland"
msgstr "Escòcia central"
-#: contrib/localflavor/uk/uk_regions.py:77
+#: .\contrib\localflavor\uk\uk_regions.py:77
msgid "Dumfries and Galloway"
msgstr "Dumfries and Galloway"
-#: contrib/localflavor/uk/uk_regions.py:78
+#: .\contrib\localflavor\uk\uk_regions.py:78
msgid "Fife"
msgstr "Fife"
-#: contrib/localflavor/uk/uk_regions.py:79
+#: .\contrib\localflavor\uk\uk_regions.py:79
msgid "Grampian"
msgstr "Grampian"
-#: contrib/localflavor/uk/uk_regions.py:80
+#: .\contrib\localflavor\uk\uk_regions.py:80
msgid "Highland"
msgstr "Highland"
-#: contrib/localflavor/uk/uk_regions.py:81
+#: .\contrib\localflavor\uk\uk_regions.py:81
msgid "Lothian"
msgstr "Lothian"
-#: contrib/localflavor/uk/uk_regions.py:82
+#: .\contrib\localflavor\uk\uk_regions.py:82
msgid "Orkney Islands"
-msgstr "Orkney Islands"
+msgstr "Illes Orkney"
-#: contrib/localflavor/uk/uk_regions.py:83
+#: .\contrib\localflavor\uk\uk_regions.py:83
msgid "Shetland Islands"
-msgstr "Shetland Islands"
+msgstr "Illes Shetland"
-#: contrib/localflavor/uk/uk_regions.py:84
+#: .\contrib\localflavor\uk\uk_regions.py:84
msgid "Strathclyde"
msgstr "Strathclyde"
-#: contrib/localflavor/uk/uk_regions.py:85
+#: .\contrib\localflavor\uk\uk_regions.py:85
msgid "Tayside"
msgstr "Tayside"
-#: contrib/localflavor/uk/uk_regions.py:86
+#: .\contrib\localflavor\uk\uk_regions.py:86
msgid "Western Isles"
-msgstr "Western Isles"
+msgstr "Illes Occidentals"
-#: contrib/localflavor/uk/uk_regions.py:90
+#: .\contrib\localflavor\uk\uk_regions.py:90
msgid "England"
msgstr "Anglaterra"
-#: contrib/localflavor/uk/uk_regions.py:91
+#: .\contrib\localflavor\uk\uk_regions.py:91
msgid "Northern Ireland"
msgstr "Irlanda del Nord"
-#: contrib/localflavor/uk/uk_regions.py:92
+#: .\contrib\localflavor\uk\uk_regions.py:92
msgid "Scotland"
msgstr "Escòcia"
-#: contrib/localflavor/uk/uk_regions.py:93
+#: .\contrib\localflavor\uk\uk_regions.py:93
msgid "Wales"
msgstr "Gal·les"
-#: contrib/localflavor/us/forms.py:16
+#: .\contrib\localflavor\us\forms.py:17
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."
+msgstr "Introduïu un codi postal en el format XXXXX o XXXXX-XXXX."
-#: contrib/localflavor/us/forms.py:54
+#: .\contrib\localflavor\us\forms.py:26
+msgid "Phone numbers must be in XXX-XXX-XXXX format."
+msgstr "Els números de telèfon han d'estar en el 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 ""
"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
+#: .\contrib\localflavor\us\forms.py:88
+msgid "Enter a U.S. state or territory."
+msgstr "Introduïu un estat o territori dels E.U.A."
+
+#: .\contrib\localflavor\us\models.py:8
+msgid "U.S. state (two uppercase letters)"
+msgstr "Estat dels E.U.A. (dues lletres majúscules)"
+
+#: .\contrib\localflavor\us\models.py:17
+msgid "Phone number"
+msgstr "Número de telèfon"
+
+#: .\contrib\localflavor\uy\forms.py:28
+msgid "Enter a valid CI number in X.XXX.XXX-X,XXXXXXX-X or XXXXXXXX format."
+msgstr ""
+"Introduïu un número CI vàlid en el format X.XXX.XXX-X,XXXXXXX-X o XXXXXXXX."
+
+#: .\contrib\localflavor\uy\forms.py:30
+msgid "Enter a valid CI number."
+msgstr "Introduïu un número CI vàlid."
+
+#: .\contrib\localflavor\za\forms.py:21
msgid "Enter a valid South African ID number"
-msgstr "Introduïu un número d'Identitat Sud Africà valid"
+msgstr "Introduïu un número d'Identitat Sud Africà vàlid"
-#: contrib/localflavor/za/forms.py:54
+#: .\contrib\localflavor\za\forms.py:55
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
+#: .\contrib\localflavor\za\za_provinces.py:4
msgid "Eastern Cape"
msgstr "Cap Oriental"
-#: contrib/localflavor/za/za_provinces.py:5
+#: .\contrib\localflavor\za\za_provinces.py:5
msgid "Free State"
msgstr "Estat lliure"
-#: contrib/localflavor/za/za_provinces.py:6
+#: .\contrib\localflavor\za\za_provinces.py:6
msgid "Gauteng"
msgstr "Gauteng"
-#: contrib/localflavor/za/za_provinces.py:7
+#: .\contrib\localflavor\za\za_provinces.py:7
msgid "KwaZulu-Natal"
msgstr "KwaZulu-Natal"
-#: contrib/localflavor/za/za_provinces.py:8
+#: .\contrib\localflavor\za\za_provinces.py:8
msgid "Limpopo"
msgstr "Limpopo"
-#: contrib/localflavor/za/za_provinces.py:9
+#: .\contrib\localflavor\za\za_provinces.py:9
msgid "Mpumalanga"
msgstr "Mpumalanga"
-#: contrib/localflavor/za/za_provinces.py:10
+#: .\contrib\localflavor\za\za_provinces.py:10
msgid "Northern Cape"
msgstr "Cap Nord"
-#: contrib/localflavor/za/za_provinces.py:11
+#: .\contrib\localflavor\za\za_provinces.py:11
msgid "North West"
msgstr "Cap Oest"
-#: contrib/localflavor/za/za_provinces.py:12
+#: .\contrib\localflavor\za\za_provinces.py:12
msgid "Western Cape"
msgstr "Cap Occidental"
-#: contrib/redirects/models.py:7
+#: .\contrib\messages\tests\base.py:101
+msgid "lazy message"
+msgstr "missatge gandul"
+
+#: .\contrib\redirects\models.py:7
msgid "redirect from"
-msgstr "redreçar des de"
+msgstr "redirecció des de"
-#: contrib/redirects/models.py:8
+#: .\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. "
+"Aquesta ruta hauria de ser un camí absolut, excloent-ne el nom del domini. "
"Exemple '/events/search/'."
-#: contrib/redirects/models.py:9
+#: .\contrib\redirects\models.py:9
msgid "redirect to"
-msgstr "redreçar a"
+msgstr "redirigir a"
-#: contrib/redirects/models.py:10
+#: .\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:// ."
+"Això pot ser bé una ruta absoluta (com a sobre) o una URL completa que "
+"comenci per 'http://'."
-#: contrib/redirects/models.py:13
+#: .\contrib\redirects\models.py:13
msgid "redirect"
-msgstr "redreçament"
+msgstr "redirecció"
-#: contrib/redirects/models.py:14
+#: .\contrib\redirects\models.py:14
msgid "redirects"
-msgstr "redreçaments"
+msgstr "redireccions"
-#: contrib/sessions/models.py:45
+#: .\contrib\sessions\models.py:45
msgid "session key"
msgstr "clau de la sessió"
-#: contrib/sessions/models.py:47
+#: .\contrib\sessions\models.py:47
msgid "session data"
msgstr "dades de la sessió"
-#: contrib/sessions/models.py:48
+#: .\contrib\sessions\models.py:48
msgid "expire date"
msgstr "data de caducitat"
-#: contrib/sessions/models.py:53
+#: .\contrib\sessions\models.py:53
msgid "session"
msgstr "sessió"
-#: contrib/sessions/models.py:54
+#: .\contrib\sessions\models.py:54
msgid "sessions"
msgstr "sessions"
-#: contrib/sites/models.py:32
+#: .\contrib\sites\models.py:32
msgid "domain name"
msgstr "nom del domini"
-#: contrib/sites/models.py:33
+#: .\contrib\sites\models.py:33
msgid "display name"
msgstr "nom per mostrar"
-#: contrib/sites/models.py:39
+#: .\contrib\sites\models.py:39
msgid "sites"
msgstr "llocs"
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
+#: .\core\validators.py:20 .\forms\fields.py:66
+msgid "Enter a valid value."
+msgstr "Introduïu un valor vàlid."
+
+#: .\core\validators.py:87 .\forms\fields.py:528
+msgid "Enter a valid URL."
+msgstr "Introduïu una URL vàlida."
+
+#: .\core\validators.py:89 .\forms\fields.py:529
+msgid "This URL appears to be a broken link."
+msgstr "Aquesta URL sembla ser un enllaç trencat."
+
+#: .\core\validators.py:123 .\forms\fields.py:877
+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."
+
+#: .\core\validators.py:126 .\forms\fields.py:870
+msgid "Enter a valid IPv4 address."
+msgstr "Introduïu una adreça IPv4 vàlida."
+
+#: .\core\validators.py:129 .\db\models\fields\__init__.py:572
+msgid "Enter only digits separated by commas."
+msgstr "Introduïu només dígits separats per comes."
+
+#: .\core\validators.py:135
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+"Assegureu-vos que el valor sigui %(limit_value)s (é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 "Assegureu-vos que aquest valor sigui menor o igual que %(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 "Assegureu-vos que aquest valor sigui més gran o igual que "
+"%(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 ""
+"Assegureu-vos que el valor tingui com a mínim %(limit_value)d caràcters "
+"(en té %(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 ""
+"Assegureu-vos que el valor tingui com a màxim %(limit_value)d caràcters "
+"(en té %(show_value)d)."
+
+#: .\db\models\base.py:823
+#, 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."
+
+#: .\db\models\base.py:838 .\db\models\base.py:846
+#, python-format
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "Ja existeix %(model_name)s amb aquest %(field_label)s."
+
+#: .\db\models\fields\__init__.py:63
+#, python-format
+msgid "Value %r is not a valid choice."
+msgstr "El valor %r no és una opció vàlida."
+
+#: .\db\models\fields\__init__.py:64
+msgid "This field cannot be null."
+msgstr "Aquest camp no pot ser nul."
+
+#: .\db\models\fields\__init__.py:65
+msgid "This field cannot be blank."
+msgstr "Aquest camp no pot estar en blanc."
+
+#: .\db\models\fields\__init__.py:70
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr "Camp del tipus: %(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 "Enter"
+
+#: .\db\models\fields\__init__.py:455 .\db\models\fields\__init__.py:850
msgid "This value must be an integer."
msgstr "Aquest valor ha de ser un enter."
-#: db/models/fields/__init__.py:388
+#: .\db\models\fields\__init__.py:490
msgid "This value must be either True or False."
-msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)"
+msgstr "Aquest valor ha de ser True (Cert) 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:492
+msgid "Boolean (Either True or False)"
+msgstr "Booleà (Cert o Fals)"
-#: 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:539 .\db\models\fields\__init__.py:982
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr "Cadena (de fins a %(max_length)s)"
+
+#: .\db\models\fields\__init__.py:567
+msgid "Comma-separated integers"
+msgstr "Enters separats per comes"
-#: db/models/fields/__init__.py:474
+#: .\db\models\fields\__init__.py:581
+msgid "Date (without time)"
+msgstr "Data (sense hora)"
+
+#: .\db\models\fields\__init__.py:585
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
+#: .\db\models\fields\__init__.py:586
#, python-format
msgid "Invalid date: %s"
msgstr "Data invàlida: %s"
-#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
+#: .\db\models\fields\__init__.py:667
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
+#: .\db\models\fields\__init__.py:669
+msgid "Date (with time)"
+msgstr "Data (amb hora)"
+
+#: .\db\models\fields\__init__.py:735
msgid "This value must be a decimal number."
msgstr "Aquest valor ha de ser un número decimal."
-#: db/models/fields/__init__.py:686
+#: .\db\models\fields\__init__.py:737
+msgid "Decimal number"
+msgstr "Número decimal"
+
+#: .\db\models\fields\__init__.py:792
+msgid "E-mail address"
+msgstr "Adreça de correu electrònic"
+
+#: .\db\models\fields\__init__.py:799 .\db\models\fields\files.py:220
+#: .\db\models\fields\files.py:331
+msgid "File path"
+msgstr "Ruta del fitxer"
+
+#: .\db\models\fields\__init__.py:822
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
+#: .\db\models\fields\__init__.py:824
+msgid "Floating point number"
+msgstr "Número de coma flotant"
+
+#: .\db\models\fields\__init__.py:883
+msgid "Big (8 byte) integer"
+msgstr "Enter gran (8 bytes)"
+
+#: .\db\models\fields\__init__.py:912
msgid "This value must be either None, True or False."
-msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)"
+msgstr "Aquest valor ha de ser None (Cap), True (Cert) o False (Fals)"
+
+#: .\db\models\fields\__init__.py:914
+msgid "Boolean (Either True, False or None)"
+msgstr "Booleà (Cert, Fals o Cap ('None'))"
+
+#: .\db\models\fields\__init__.py:1005
+msgid "Text"
+msgstr "Text"
+
+#: .\db\models\fields\__init__.py:1021
+msgid "Time"
+msgstr "Hora"
-#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
+#: .\db\models\fields\__init__.py:1025
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
+#: .\db\models\fields\__init__.py:1109
+msgid "XML text"
+msgstr "Text XML"
+
+#: .\db\models\fields\related.py:799
+#, python-format
+msgid "Model %(model)s with pk %(pk)r does not exist."
+msgstr "No existeix el model %(model)s amb la clau primària %(pk)r."
+
+#: .\db\models\fields\related.py:801
+msgid "Foreign Key (type determined by related field)"
+msgstr "Clau forana (tipus determinat pel camp relacionat)"
+
+#: .\db\models\fields\related.py:918
+msgid "One-to-one relationship"
+msgstr "Inter-relació un-a-un"
+
+#: .\db\models\fields\related.py:980
+msgid "Many-to-many relationship"
+msgstr "Inter-relació molts-a-molts"
+
+#: .\db\models\fields\related.py:1000
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 "
+"Premeu la tecla \"Control\", o \"Command\" en un Mac, per seleccionar més "
"d'un valor."
-#: db/models/fields/related.py:930
+#: .\db\models\fields\related.py:1061
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -3960,516 +4726,478 @@ 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
+#: .\forms\fields.py:65
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
+#: .\forms\fields.py:203
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
+#: .\forms\fields.py:234 .\forms\fields.py:255
msgid "Enter a number."
msgstr "Introduïu un número."
-#: forms/fields.py:226
+#: .\forms\fields.py:258
#, 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."
+msgstr "Assegureu-vos que no hi ha més de %s dígits en total."
-#: forms/fields.py:227
+#: .\forms\fields.py:259
#, 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."
+msgstr "Assegureu-vos que no hi ha més de %s decimals."
-#: forms/fields.py:228
+#: .\forms\fields.py:260
#, 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."
+msgstr "Assegureu-vos que no hi ha més de %s dígits decimals."
-#: forms/fields.py:287 forms/fields.py:862
+#: .\forms\fields.py:322 .\forms\fields.py:837
msgid "Enter a valid date."
msgstr "Introduïu una data vàlida."
-#: forms/fields.py:321 forms/fields.py:863
+#: .\forms\fields.py:350 .\forms\fields.py:838
msgid "Enter a valid time."
msgstr "Introduïu una hora vàlida."
-#: forms/fields.py:360
+#: .\forms\fields.py:376
msgid "Enter a valid date/time."
msgstr "Introduïu una data/hora vàlides."
-#: forms/fields.py:446
+#: .\forms\fields.py:434
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."
+"No s'ha enviat cap fitxer. Comproveu el tipus de codificació del formulari."
-#: forms/fields.py:447
+#: .\forms\fields.py:435
msgid "No file was submitted."
msgstr "No s'ha enviat cap fitxer."
-#: forms/fields.py:448
+#: .\forms\fields.py:436
msgid "The submitted file is empty."
msgstr "El fitxer enviat està buit."
-#: forms/fields.py:449
+#: .\forms\fields.py:437
#, 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)."
+"Assegureu-vos que el valor té com a màxim %(max)d caràcters (en té %(length)"
+"d)."
-#: forms/fields.py:482
+#: .\forms\fields.py:472
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 "
+"Carregueu una imatge vàlida. El fitxer que heu carregat 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
+#: .\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 "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
+#: .\forms\fields.py:671 .\forms\fields.py:733 .\forms\models.py:1002
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
+#: .\forms\formsets.py:298 .\forms\formsets.py:300
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
+#: .\forms\models.py:562
#, 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
+#: .\forms\models.py:566
#, 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
+#: .\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 ""
"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."
+"ser única per a %(lookup)s en %(date_field)s."
-#: forms/models.py:608
+#: .\forms\models.py:580
msgid "Please correct the duplicate values below."
-msgstr "Si us plau, corregiu els valors duplicats a baix."
+msgstr "Si us plau, corregiu els valors duplicats a sota."
-#: forms/models.py:863
+#: .\forms\models.py:855
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"
+"La clau forana en línia no coincideix amb la clau primària de la instància "
+"mare."
-#: forms/models.py:926
+#: .\forms\models.py:921
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."
+"Esculli una opció vàlida. Aquesta opció no és una de les opcions disponibles."
-#: forms/models.py:1000
+#: .\forms\models.py:1003
#, 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."
+msgstr "Escolliu una opció vàlida; %s no és una de les opcions vàlides."
-#: forms/models.py:1002
+#: .\forms\models.py:1005
#, 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
+#: .\template\defaultfilters.py:776
msgid "yes,no,maybe"
-msgstr "si,no,potser"
+msgstr "sí,no,potser"
-#: template/defaultfilters.py:798
+#: .\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:800
+#: .\template\defaultfilters.py:809
#, python-format
msgid "%.1f KB"
msgstr "%.1f KB"
-#: template/defaultfilters.py:802
+#: .\template\defaultfilters.py:811
#, python-format
msgid "%.1f MB"
msgstr "%.1f MB"
-#: template/defaultfilters.py:803
+#: .\template\defaultfilters.py:812
#, python-format
msgid "%.1f GB"
msgstr "%.1f GB"
-#: utils/dateformat.py:42
+#: .\utils\dateformat.py:42
msgid "p.m."
msgstr "p.m."
-#: utils/dateformat.py:43
+#: .\utils\dateformat.py:43
msgid "a.m."
msgstr "a.m."
-#: utils/dateformat.py:48
+#: .\utils\dateformat.py:48
msgid "PM"
msgstr "PM"
-#: utils/dateformat.py:49
+#: .\utils\dateformat.py:49
msgid "AM"
msgstr "AM"
-#: utils/dateformat.py:98
+#: .\utils\dateformat.py:98
msgid "midnight"
-msgstr "mitja nit"
+msgstr "mitjanit"
-#: utils/dateformat.py:100
+#: .\utils\dateformat.py:100
msgid "noon"
-msgstr "mig dia"
+msgstr "migdia"
-#: utils/dates.py:6
+#: .\utils\dates.py:6
msgid "Monday"
msgstr "Dilluns"
-#: utils/dates.py:6
+#: .\utils\dates.py:6
msgid "Tuesday"
msgstr "Dimarts"
-#: utils/dates.py:6
+#: .\utils\dates.py:6
msgid "Wednesday"
msgstr "Dimecres"
-#: utils/dates.py:6
+#: .\utils\dates.py:6
msgid "Thursday"
msgstr "Dijous"
-#: utils/dates.py:6
+#: .\utils\dates.py:6
msgid "Friday"
msgstr "Divendres"
-#: utils/dates.py:7
+#: .\utils\dates.py:7
msgid "Saturday"
msgstr "Dissabte"
-#: utils/dates.py:7
+#: .\utils\dates.py:7
msgid "Sunday"
msgstr "Diumenge"
-#: utils/dates.py:10
+#: .\utils\dates.py:10
msgid "Mon"
-msgstr "Dl"
+msgstr "dl."
-#: utils/dates.py:10
+#: .\utils\dates.py:10
msgid "Tue"
-msgstr "Dm"
+msgstr "dt."
-#: utils/dates.py:10
+#: .\utils\dates.py:10
msgid "Wed"
-msgstr "Dmx"
+msgstr "dc."
-#: utils/dates.py:10
+#: .\utils\dates.py:10
msgid "Thu"
-msgstr "Dj"
+msgstr "dj."
-#: utils/dates.py:10
+#: .\utils\dates.py:10
msgid "Fri"
-msgstr "Dv"
+msgstr "dv."
-#: utils/dates.py:11
+#: .\utils\dates.py:11
msgid "Sat"
-msgstr "Ds"
+msgstr "ds."
-#: utils/dates.py:11
+#: .\utils\dates.py:11
msgid "Sun"
-msgstr "Dg"
+msgstr "dg."
-#: utils/dates.py:18
+#: .\utils\dates.py:18
msgid "January"
msgstr "gener"
-#: utils/dates.py:18
+#: .\utils\dates.py:18
msgid "February"
msgstr "febrer"
-#: utils/dates.py:18 utils/dates.py:31
+#: .\utils\dates.py:18 .\utils\dates.py:31
msgid "March"
msgstr "març"
-#: utils/dates.py:18 utils/dates.py:31
+#: .\utils\dates.py:18 .\utils\dates.py:31
msgid "April"
msgstr "abril"
-#: utils/dates.py:18 utils/dates.py:31
+#: .\utils\dates.py:18 .\utils\dates.py:31
msgid "May"
msgstr "maig"
-#: utils/dates.py:18 utils/dates.py:31
+#: .\utils\dates.py:18 .\utils\dates.py:31
msgid "June"
msgstr "juny"
-#: utils/dates.py:19 utils/dates.py:31
+#: .\utils\dates.py:19 .\utils\dates.py:31
msgid "July"
msgstr "juliol"
-#: utils/dates.py:19
+#: .\utils\dates.py:19
msgid "August"
msgstr "agost"
-#: utils/dates.py:19
+#: .\utils\dates.py:19
msgid "September"
msgstr "setembre"
-#: utils/dates.py:19
+#: .\utils\dates.py:19
msgid "October"
msgstr "octubre"
-#: utils/dates.py:19
+#: .\utils\dates.py:19
msgid "November"
msgstr "novembre"
-#: utils/dates.py:20
+#: .\utils\dates.py:20
msgid "December"
msgstr "desembre"
-#: utils/dates.py:23
+#: .\utils\dates.py:23
msgid "jan"
-msgstr "gen"
+msgstr "gen."
-#: utils/dates.py:23
+#: .\utils\dates.py:23
msgid "feb"
-msgstr "feb"
+msgstr "feb."
-#: utils/dates.py:23
+#: .\utils\dates.py:23
msgid "mar"
-msgstr "mar"
+msgstr "març"
-#: utils/dates.py:23
+#: .\utils\dates.py:23
msgid "apr"
-msgstr "abr"
+msgstr "abr."
-#: utils/dates.py:23
+#: .\utils\dates.py:23
msgid "may"
-msgstr "mai"
+msgstr "maig"
-#: utils/dates.py:23
+#: .\utils\dates.py:23
msgid "jun"
-msgstr "jun"
+msgstr "juny"
-#: utils/dates.py:24
+#: .\utils\dates.py:24
msgid "jul"
-msgstr "jul"
+msgstr "jul."
-#: utils/dates.py:24
+#: .\utils\dates.py:24
msgid "aug"
-msgstr "ago"
+msgstr "ago."
-#: utils/dates.py:24
+#: .\utils\dates.py:24
msgid "sep"
-msgstr "set"
+msgstr "set."
-#: utils/dates.py:24
+#: .\utils\dates.py:24
msgid "oct"
-msgstr "oct"
+msgstr "oct."
-#: utils/dates.py:24
+#: .\utils\dates.py:24
msgid "nov"
-msgstr "nov"
+msgstr "nov."
-#: utils/dates.py:24
+#: .\utils\dates.py:24
msgid "dec"
-msgstr "des"
+msgstr "des."
-#: utils/dates.py:31
+#: .\utils\dates.py:31
msgid "Jan."
msgstr "gen."
-#: utils/dates.py:31
+#: .\utils\dates.py:31
msgid "Feb."
msgstr "feb."
-#: utils/dates.py:32
+#: .\utils\dates.py:32
msgid "Aug."
msgstr "ago."
-#: utils/dates.py:32
+#: .\utils\dates.py:32
msgid "Sept."
msgstr "set."
-#: utils/dates.py:32
+#: .\utils\dates.py:32
msgid "Oct."
msgstr "oct."
-#: utils/dates.py:32
+#: .\utils\dates.py:32
msgid "Nov."
msgstr "nov."
-#: utils/dates.py:32
+#: .\utils\dates.py:32
msgid "Dec."
msgstr "des."
-#: utils/text.py:128
+#: .\utils\text.py:130
msgid "or"
msgstr "o"
-#: utils/timesince.py:21
+#: .\utils\timesince.py:21
msgid "year"
msgid_plural "years"
msgstr[0] "any"
msgstr[1] "anys"
-#: utils/timesince.py:22
+#: .\utils\timesince.py:22
msgid "month"
msgid_plural "months"
msgstr[0] "mes"
msgstr[1] "mesos"
-#: utils/timesince.py:23
+#: .\utils\timesince.py:23
msgid "week"
msgid_plural "weeks"
msgstr[0] "setmana"
msgstr[1] "setmanes"
-#: utils/timesince.py:24
+#: .\utils\timesince.py:24
msgid "day"
msgid_plural "days"
msgstr[0] "dia"
msgstr[1] "dies"
-#: utils/timesince.py:25
+#: .\utils\timesince.py:25
msgid "hour"
msgid_plural "hours"
msgstr[0] "hora"
msgstr[1] "hores"
-#: utils/timesince.py:26
+#: .\utils\timesince.py:26
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minut"
msgstr[1] "minuts"
-#: utils/timesince.py:45
+#: .\utils\timesince.py:45
msgid "minutes"
msgstr "minuts"
-#: utils/timesince.py:50
+#: .\utils\timesince.py:50
#, python-format
msgid "%(number)d %(type)s"
msgstr "%(number)d %(type)s"
-#: utils/timesince.py:56
+#: .\utils\timesince.py:56
#, python-format
msgid ", %(number)d %(type)s"
msgstr ", %(number)d %(type)s"
-#: utils/translation/trans_real.py:399
+#: .\utils\translation\trans_real.py:519
msgid "DATE_FORMAT"
msgstr "j \\de F \\de Y"
-#: utils/translation/trans_real.py:401
+#: .\utils\translation\trans_real.py:520
+msgid "DATETIME_FORMAT"
+msgstr "j \\de F \\de Y, H:i"
+
+#: .\utils\translation\trans_real.py:521
msgid "TIME_FORMAT"
msgstr "H:i"
-#: utils/translation/trans_real.py:417
+#: .\utils\translation\trans_real.py:542
msgid "YEAR_MONTH_FORMAT"
msgstr "F \\de Y"
-#: utils/translation/trans_real.py:418
+#: .\utils\translation\trans_real.py:543
msgid "MONTH_DAY_FORMAT"
msgstr "j \\de F"
-#: views/generic/create_update.py:114
+#: .\views\generic\create_update.py:115
#, 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
+#: .\views\generic\create_update.py:158
#, 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
+#: .\views\generic\create_update.py:201
#, python-format
msgid "The %(verbose_name)s was deleted."
-msgstr "El %(verbose_name)s s'ha eliminat."
+msgstr "El/la %(verbose_name)s s'ha eliminat."
+
+#~ msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
+#~ msgstr "Un o més %(fieldname)s en %(name)s: %(obj)s"
+
+#~ msgid "One or more %(fieldname)s in %(name)s:"
+#~ msgstr "Un o més %(fieldname)s en %(name)s:"
+
+#~ msgid "Old password:"
+#~ msgstr "Contrasenya antiga:"
+
+#~ msgid "Relation to parent model"
+#~ msgstr "Relació amb el model pare"
+
+#~ msgid "Add user"
+#~ msgstr "Afegir usuari"
#~ msgid "Comment moderation queue"
#~ msgstr "Cua de moderació de comentaris"
#~ msgid "No comments to moderate"
-#~ msgstr "No hi ha comentaris per a moderar"
+#~ msgstr "No hi ha comentaris per moderar"
#~ msgid "Email"
#~ msgstr "Correu electrònic"
#~ msgid "Authenticated?"
-#~ msgstr "Autentificat?"
+#~ msgstr "Autenticat?"
#~ msgid "IP Address"
#~ msgstr "Adreça IP"
@@ -4478,12 +5206,11 @@ msgstr "El %(verbose_name)s s'ha eliminat."
#~ msgstr "Data d'enviament"
#~ msgid "yes"
-#~ msgstr "si"
+#~ msgstr "sí"
#~ msgid "no"
#~ msgstr "no"
-#, fuzzy
#~ msgid "verbose_name"
#~ msgid_plural "verbose_name_plural"
#~ msgstr[0] "verbose_name"
diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.mo b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
index 0df69aeb94..eefdf4be80 100644
--- a/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.po b/django/conf/locale/ca/LC_MESSAGES/djangojs.po
index 67c50c6532..788655b6b5 100644
--- a/django/conf/locale/ca/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/ca/LC_MESSAGES/djangojs.po
@@ -4,7 +4,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-02-15 01:00+0200\n"
+"POT-Creation-Date: 2010-06-04 21:59+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"
@@ -14,102 +14,144 @@ msgstr ""
"X-Generator: VIM 7.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: contrib/admin/media/js/SelectFilter2.js:33
+#: .\contrib\admin\media\js\SelectFilter2.js.py:37
#, perl-format
msgid "Available %s"
msgstr "%s Disponibles"
-#: contrib/admin/media/js/SelectFilter2.js:41
+#: .\contrib\admin\media\js\SelectFilter2.js.py:45
msgid "Choose all"
msgstr "Seleccionar tots"
-#: contrib/admin/media/js/SelectFilter2.js:46
+#: .\contrib\admin\media\js\SelectFilter2.js.py:50
msgid "Add"
msgstr "Afegir"
-#: contrib/admin/media/js/SelectFilter2.js:48
+#: .\contrib\admin\media\js\SelectFilter2.js.py:52
msgid "Remove"
msgstr "Eliminar"
-#: contrib/admin/media/js/SelectFilter2.js:53
+#: .\contrib\admin\media\js\SelectFilter2.js.py:57
#, perl-format
msgid "Chosen %s"
msgstr "%s Escollits"
-#: contrib/admin/media/js/SelectFilter2.js:54
+#: .\contrib\admin\media\js\SelectFilter2.js.py:58
msgid "Select your choice(s) and click "
msgstr "Faci les seves seleccions i faci click a"
-#: contrib/admin/media/js/SelectFilter2.js:59
+#: .\contrib\admin\media\js\SelectFilter2.js.py:63
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\actions.js.py:18
+#: .\contrib\admin\media\js\actions.min.js.py:1
+msgid "%(sel)s of %(cnt)s selected"
+msgid_plural "%(sel)s of %(cnt)s selected"
+msgstr[0] "%(sel)s de %(cnt)s seleccionat"
+msgstr[1] "%(sel)s of %(cnt)s seleccionats"
-#: 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\actions.js.py:109
+#: .\contrib\admin\media\js\actions.min.js.py:5
+msgid ""
+"You have unsaved changes on individual editable fields. If you run an "
+"action, your unsaved changes will be lost."
+msgstr ""
+"Teniu canvis sense desar a camps editables individuals. Si executeu "
+"una acció, es perdran aquests canvis no desats."
-#: contrib/admin/media/js/calendar.js:25
+#: .\contrib\admin\media\js\actions.js.py:121
+#: .\contrib\admin\media\js\actions.min.js.py: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 ""
+"Heu seleccionat una acció, però encara no heu desat els vostres canvis a "
+"camps individuals. Si us plau premeu OK per desar. Haureu de tornar a "
+"executar l'acció."
+
+#: .\contrib\admin\media\js\actions.js.py:123
+#: .\contrib\admin\media\js\actions.min.js.py: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 ""
+"Heu seleccionat una acció i no heu fet cap canvi a camps individuals. "
+"Probablement esteu cercant el botó 'Anar' enlloc de 'Desar'."
+
+#: .\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 ""
+"Gener Febrer Març Abril Maig Juny Juliol Agost Setembre Octubre Novembre "
+"Desembre"
+
+#: .\contrib\admin\media\js\calendar.js.py:25
msgid "S M T W T F S"
-msgstr "Dg Dl Dt Dc Dj Dv Ds"
+msgstr "dg dl dt dc dj dv ds"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+#: .\contrib\admin\media\js\collapse.js.py:9
+#: .\contrib\admin\media\js\collapse.js.py:21
+#: .\contrib\admin\media\js\collapse.min.js.py:1
+msgid "Show"
+msgstr "Mostrar"
+
+#: .\contrib\admin\media\js\collapse.js.py:16
+#: .\contrib\admin\media\js\collapse.min.js.py:1
+msgid "Hide"
+msgstr "Ocultar"
+
+#: .\contrib\admin\media\js\dateparse.js.py:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr "Diumenge Dilluns Dimarts Dimecres Dijous Divendres Dissabte"
+
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:48
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:83
msgid "Now"
msgstr "Ara"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:52
msgid "Clock"
-msgstr "Rellotje"
+msgstr "Rellotge"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:79
msgid "Choose a time"
msgstr "Esculli una hora"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:84
msgid "Midnight"
-msgstr "Mitja nit"
+msgstr "Mitjanit"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:85
msgid "6 a.m."
msgstr "6 a.m."
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:86
msgid "Noon"
msgstr "Migdia"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:90
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:187
msgid "Cancel"
msgstr "Cancel·lar"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:132
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:181
msgid "Today"
msgstr "Avui"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:136
msgid "Calendar"
msgstr "Calendari"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:179
msgid "Yesterday"
msgstr "Ahir"
-#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+#: .\contrib\admin\media\js\admin\DateTimeShortcuts.js.py:183
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/django/conf/locale/cs/LC_MESSAGES/django.mo b/django/conf/locale/cs/LC_MESSAGES/django.mo
index 9251a58fbe..82e12e8e09 100644
--- a/django/conf/locale/cs/LC_MESSAGES/django.mo
+++ b/django/conf/locale/cs/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/cs/LC_MESSAGES/django.po b/django/conf/locale/cs/LC_MESSAGES/django.po
index 4984d42517..b1a2e697d4 100644
--- a/django/conf/locale/cs/LC_MESSAGES/django.po
+++ b/django/conf/locale/cs/LC_MESSAGES/django.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-09 14:26+0200\n"
-"PO-Revision-Date: 2010-05-09 14:09+0100\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"
@@ -70,7 +70,7 @@ msgid "Spanish"
msgstr "španělsky"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "španělsky (Argentina)"
#: conf/global_settings.py:58
@@ -122,138 +122,146 @@ 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:71
+#: conf/global_settings.py:72
msgid "Italian"
msgstr "italsky"
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
msgid "Japanese"
msgstr "japonsky"
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
msgid "Georgian"
msgstr "gruzínsky"
-#: conf/global_settings.py:74
+#: conf/global_settings.py:75
msgid "Khmer"
msgstr "khmersky"
-#: conf/global_settings.py:75
+#: conf/global_settings.py:76
msgid "Kannada"
msgstr "kannadsky"
-#: conf/global_settings.py:76
+#: conf/global_settings.py:77
msgid "Korean"
msgstr "korejsky"
-#: conf/global_settings.py:77
+#: conf/global_settings.py:78
msgid "Lithuanian"
msgstr "litevsky"
-#: conf/global_settings.py:78
+#: conf/global_settings.py:79
msgid "Latvian"
msgstr "lotyšsky"
-#: conf/global_settings.py:79
+#: conf/global_settings.py:80
msgid "Macedonian"
msgstr "makedonsky"
-#: conf/global_settings.py:80
+#: conf/global_settings.py:81
+msgid "Malayalam"
+msgstr "malajálamsky"
+
+#: conf/global_settings.py:82
msgid "Mongolian"
msgstr "mongolsky"
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "holandsky"
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "norsky"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "norsky (Bokmål)"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "norsky (Nynorsk)"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "polsky"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "portugalsky"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "portugalsky (Brazílie)"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "rumunsky"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "rusky"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "slovensky"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "slovinsky"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "albánsky"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "srbsky"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "srbsky (latinkou)"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "švédsky"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "tamilsky"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "telužsky"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "thajsky"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "turecky"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "ukrajinsky"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "vietnamsky"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "Äínsky (zjednoduÅ¡enÄ›)"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "Äínsky (tradiÄnÄ›)"
@@ -305,15 +313,15 @@ msgstr "Tento měsíc"
msgid "This year"
msgstr "Tento rok"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "Yes"
msgstr "Ano"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "No"
msgstr "Ne"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
msgid "Unknown"
msgstr "Neznámé"
@@ -359,7 +367,7 @@ 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:844
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
#: forms/models.py:568
msgid "and"
msgstr "a"
@@ -853,7 +861,7 @@ msgstr "Uložit a přidat další položku"
msgid "Save and continue editing"
msgstr "Uložit a pokraÄovat v úpravách"
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
+#: 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."
@@ -861,6 +869,10 @@ 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>."
@@ -1418,8 +1430,8 @@ msgstr "zpráva"
msgid "Logged out"
msgstr "Odhlášeno"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: 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."
@@ -1491,7 +1503,7 @@ 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:1101
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
msgid "URL"
msgstr "URL"
@@ -1541,7 +1553,7 @@ msgstr "komentář"
msgid "date/time submitted"
msgstr "datum a Äas byly zaslané"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
msgid "IP address"
msgstr "Adresa IP"
@@ -4473,22 +4485,22 @@ msgstr "weby"
msgid "Enter a valid value."
msgstr "Vložte platnou hodnotu."
-#: core/validators.py:87 forms/fields.py:529
+#: 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:530
+#: 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:873
+#: 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:866
+#: core/validators.py:126 forms/fields.py:870
msgid "Enter a valid IPv4 address."
msgstr "Vložte platnou adresu typu IPv4."
@@ -4501,12 +4513,12 @@ msgstr "Vložte pouze Äíslice oddÄ›lené Äárkami."
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:205 forms/fields.py:257
+#: 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:206 forms/fields.py:258
+#: 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."
@@ -4529,13 +4541,13 @@ msgstr ""
"Hodnota smí mít nejvýše %(limit_value)d znaků, ale nyní jich má %(show_value)"
"d."
-#: db/models/base.py:822
+#: 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:837 db/models/base.py:845
+#: db/models/base.py:838 db/models/base.py:846
#, python-format
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr ""
@@ -4559,13 +4571,13 @@ msgstr "Pole nemůže být prázdné."
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
+#: 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:850
+#: 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."
@@ -4577,7 +4589,7 @@ msgstr "Hodnota musí být buÄ Ano (True) nebo Ne (False)."
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:982
+#: 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ů)"
@@ -4619,44 +4631,44 @@ msgstr "Desetinné Äíslo"
msgid "E-mail address"
msgstr "E-mailová adresa"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: 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:822
+#: 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:824
+#: db/models/fields/__init__.py:832
msgid "Floating point number"
msgstr "Číslo s pohyblivou řádovou Äárkou"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:891
msgid "Big (8 byte) integer"
msgstr "Velké Äíslo (8 bajtů)"
-#: db/models/fields/__init__.py:912
+#: 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:914
+#: 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:1005
+#: db/models/fields/__init__.py:1013
msgid "Text"
msgstr "Text"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1029
msgid "Time"
msgstr "ÄŒas"
-#: db/models/fields/__init__.py:1025
+#: 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:1109
+#: db/models/fields/__init__.py:1125
msgid "XML text"
msgstr "XML text"
@@ -4669,22 +4681,22 @@ msgstr "Položka typu %(model)s s primárním klíÄem %(pk)r neexistuje."
msgid "Foreign Key (type determined by related field)"
msgstr "Cizí klÃ­Ä (typ urÄen pomocí souvisejícího pole)"
-#: db/models/fields/related.py:918
+#: db/models/fields/related.py:919
msgid "One-to-one relationship"
msgstr "Vazba jedna-jedna"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:981
msgid "Many-to-many relationship"
msgstr "Vazba mnoho-mnoho"
-#: db/models/fields/related.py:1000
+#: 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:1061
+#: db/models/fields/related.py:1062
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -4697,74 +4709,74 @@ msgstr[2] "Vložte platné ID položky %(self)s. Hodnoty %(value)r jsou neplatnÃ
msgid "This field is required."
msgstr "Pole je povinné."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "Vložte celé Äíslo."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234 forms/fields.py:255
msgid "Enter a number."
msgstr "Vložte Äíslo."
-#: forms/fields.py:259
+#: 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:260
+#: 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:261
+#: 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:323 forms/fields.py:838
+#: forms/fields.py:322 forms/fields.py:837
msgid "Enter a valid date."
msgstr "Vložte platné datum."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350 forms/fields.py:838
msgid "Enter a valid time."
msgstr "Vložte platný Äas."
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "Vložte platné datum a Äas."
-#: forms/fields.py:435
+#: 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:436
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "Žádný soubor nebyl odeslán."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "Odeslaný soubor je prázdný."
-#: forms/fields.py:438
+#: 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:473
+#: 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:596 forms/fields.py:671
+#: 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:672 forms/fields.py:734 forms/models.py:1002
+#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
msgid "Enter a list of values."
msgstr "Vložte seznam hodnot."
diff --git a/django/conf/locale/cs/LC_MESSAGES/djangojs.mo b/django/conf/locale/cs/LC_MESSAGES/djangojs.mo
index 1cf448fe72..8efa6f6e4c 100644
--- a/django/conf/locale/cs/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/cs/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/cs/LC_MESSAGES/djangojs.po b/django/conf/locale/cs/LC_MESSAGES/djangojs.po
index 0b958e290c..e4f06a96ed 100644
--- a/django/conf/locale/cs/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/cs/LC_MESSAGES/djangojs.po
@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-09 14:30+0200\n"
-"PO-Revision-Date: 2010-05-09 14:04+0100\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"
diff --git a/django/conf/locale/da/LC_MESSAGES/djangojs.mo b/django/conf/locale/da/LC_MESSAGES/djangojs.mo
index 697f1a9f6a..47490d8620 100644
--- a/django/conf/locale/da/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/da/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/da/LC_MESSAGES/djangojs.po b/django/conf/locale/da/LC_MESSAGES/djangojs.po
index 4db7601294..f220938ae1 100644
--- a/django/conf/locale/da/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/da/LC_MESSAGES/djangojs.po
@@ -6,9 +6,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-04-26 15:49+0200\n"
-"PO-Revision-Date: 2008-08-13 22:00+0200\n"
-"Last-Translator: Finn Gruwier Larsen<finn@gruwier.dk>\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"
@@ -44,13 +44,42 @@ msgstr "Foretag dit/dine valg og klik "
msgid "Clear all"
msgstr "Fravælg alle"
-#: contrib/admin/media/js/actions.js:17
+#: 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 ""
diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo
index 5f88e60a68..79151f8fe1 100644
--- a/django/conf/locale/de/LC_MESSAGES/django.mo
+++ b/django/conf/locale/de/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po
index 521bd3c89c..b59b339b2e 100644
--- a/django/conf/locale/de/LC_MESSAGES/django.po
+++ b/django/conf/locale/de/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-13 15:30+0200\n"
+"POT-Creation-Date: 2010-08-06 18:53+0200\n"
"PO-Revision-Date: 2010-04-26 13:53+0100\n"
"Last-Translator: Jannis Leidel <jannis@leidel.info>\n"
"Language-Team: \n"
@@ -72,7 +72,7 @@ msgid "Spanish"
msgstr "Spanisch"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "Argentinisches Spanisch"
#: conf/global_settings.py:58
@@ -168,98 +168,102 @@ 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:82
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "Holländisch"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "Norwegisch"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "Norwegisch (Bokmål)"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "Norwegisch (Nynorsk)"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "Polnisch"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "Portugiesisch"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "Brasilianisches Portugiesisch"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "Rumänisch"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "Russisch"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "Slowakisch"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "Slowenisch"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "Albanisch"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "Serbisch"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "Serbisch (Latein)"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "Schwedisch"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "Tamilisch"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "Telugisch"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "Thailändisch"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "Türkisch"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "Ukrainisch"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "Vietnamesisch"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "Vereinfachtes Chinesisch"
-#: conf/global_settings.py:104
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "Traditionelles Chinesisch"
@@ -311,15 +315,15 @@ msgstr "Diesen Monat"
msgid "This year"
msgstr "Dieses Jahr"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "Yes"
msgstr "Ja"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "No"
msgstr "Nein"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
msgid "Unknown"
msgstr "Unbekannt"
@@ -696,7 +700,7 @@ msgid "Filter"
msgstr "Filter"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
msgid "Delete"
msgstr "Löschen"
@@ -859,7 +863,7 @@ msgstr "Sichern und neu hinzufügen"
msgid "Save and continue editing"
msgstr "Sichern und weiter bearbeiten"
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
+#: 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."
@@ -867,6 +871,10 @@ 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>."
@@ -1437,8 +1445,8 @@ msgstr "Mitteilung"
msgid "Logged out"
msgstr "Abgemeldet"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: 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."
@@ -1506,7 +1514,7 @@ 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
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
msgid "URL"
msgstr "Adresse (URL)"
@@ -1557,7 +1565,7 @@ msgstr "Kommentar"
msgid "date/time submitted"
msgstr "Datum/Zeit Erstellung"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
msgid "IP address"
msgstr "IP-Adresse"
@@ -4509,22 +4517,22 @@ msgstr "Sites"
msgid "Enter a valid value."
msgstr "Bitte einen gültigen Wert eingeben."
-#: core/validators.py:87 forms/fields.py:529
+#: 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:530
+#: 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:873
+#: 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:866
+#: core/validators.py:126 forms/fields.py:870
msgid "Enter a valid IPv4 address."
msgstr "Bitte eine gültige IPv4-Adresse eingeben."
@@ -4539,12 +4547,12 @@ msgstr ""
"Bitte sicherstellen, dass der Wert %(limit_value)s ist. (Er ist %(show_value)"
"s)"
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#: 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:206 forms/fields.py:258
+#: 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."
@@ -4595,13 +4603,13 @@ msgstr "Dieses Feld darf nicht leer sein."
msgid "Field of type: %(field_type)s"
msgstr "Feldtyp: %(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
+#: 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:850
+#: 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."
@@ -4613,7 +4621,7 @@ msgstr "Dieser Wert muss True oder False sein."
msgid "Boolean (Either True or False)"
msgstr "Boolescher Wert (True oder False)"
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#: 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)"
@@ -4657,44 +4665,44 @@ msgstr "Dezimalzahl"
msgid "E-mail address"
msgstr "E-Mail-Adresse"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: 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:822
+#: 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:824
+#: db/models/fields/__init__.py:832
msgid "Floating point number"
msgstr "Gleitkommazahl"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:891
msgid "Big (8 byte) integer"
msgstr "Große Ganzzahl (8 Byte)"
-#: db/models/fields/__init__.py:912
+#: 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:914
+#: 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:1005
+#: db/models/fields/__init__.py:1013
msgid "Text"
msgstr "Text"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1029
msgid "Time"
msgstr "Zeit"
-#: db/models/fields/__init__.py:1025
+#: 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:1109
+#: db/models/fields/__init__.py:1125
msgid "XML text"
msgstr "XML-Text"
@@ -4707,22 +4715,22 @@ msgstr "Modell %(model)s mit dem Primärschlüssel %(pk)r ist nicht vorhanden."
msgid "Foreign Key (type determined by related field)"
msgstr "Fremdschlüssel (Typ definiert durch verknüpftes Feld)"
-#: db/models/fields/related.py:918
+#: db/models/fields/related.py:919
msgid "One-to-one relationship"
msgstr "One-to-one-Beziehung"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:981
msgid "Many-to-many relationship"
msgstr "Many-to-many-Beziehung"
-#: db/models/fields/related.py:1000
+#: 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:1061
+#: db/models/fields/related.py:1062
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -4736,55 +4744,55 @@ msgstr[1] ""
msgid "This field is required."
msgstr "Dieses Feld ist zwingend erforderlich."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "Bitte eine ganze Zahl eingeben."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234 forms/fields.py:255
msgid "Enter a number."
msgstr "Bitte eine Zahl eingeben."
-#: forms/fields.py:259
+#: 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:260
+#: 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:261
+#: 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:323 forms/fields.py:838
+#: forms/fields.py:322 forms/fields.py:837
msgid "Enter a valid date."
msgstr "Bitte ein gültiges Datum eingeben."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350 forms/fields.py:838
msgid "Enter a valid time."
msgstr "Bitte eine gültige Uhrzeit eingeben."
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "Bitte ein gültiges Datum und Uhrzeit eingeben."
-#: forms/fields.py:435
+#: 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:436
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "Es wurde keine Datei übertragen."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "Die ausgewählte Datei ist leer."
-#: forms/fields.py:438
+#: forms/fields.py:437
#, python-format
msgid ""
"Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4792,7 +4800,7 @@ msgstr ""
"Bitte sicherstellen, dass der Dateiname maximal %(max)d Zeichen hat. (Er hat "
"%(length)d)."
-#: forms/fields.py:473
+#: forms/fields.py:472
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -4800,17 +4808,17 @@ msgstr ""
"Bitte ein Bild hochladen. Die hochgeladene Datei ist kein Bild oder ist "
"defekt."
-#: forms/fields.py:596 forms/fields.py:671
+#: 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:672 forms/fields.py:734 forms/models.py:1002
+#: 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
+#: forms/formsets.py:296 forms/formsets.py:298
msgid "Order"
msgstr "Reihenfolge"
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.mo b/django/conf/locale/es_AR/LC_MESSAGES/django.mo
index 1aee7ccc22..6a30b72b4a 100644
--- a/django/conf/locale/es_AR/LC_MESSAGES/django.mo
+++ b/django/conf/locale/es_AR/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/django.po b/django/conf/locale/es_AR/LC_MESSAGES/django.po
index 061cd7d1ba..35c8573e48 100644
--- a/django/conf/locale/es_AR/LC_MESSAGES/django.po
+++ b/django/conf/locale/es_AR/LC_MESSAGES/django.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-11 08:35-0300\n"
-"PO-Revision-Date: 2010-05-17 10:52-0300\n"
+"POT-Creation-Date: 2010-08-06 15:38-0300\n"
+"PO-Revision-Date: 2010-08-11 09:00-0300\n"
"Last-Translator: Ramiro <rm0@gmx.net>\n"
"Language-Team: Django-I18N <django-i18n@googlegroups.com>\n"
"Language: es_AR\n"
@@ -70,7 +70,7 @@ msgid "Spanish"
msgstr "español"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "español de Argentina"
#: conf/global_settings.py:58
@@ -166,98 +166,102 @@ 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:82
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "holandés"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "noruego"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "bokmål"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "nynorsk"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "polaco"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "portugués"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "portugués de Brasil"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "rumano"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "ruso"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "eslovaco"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "esloveno"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "albanés"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "serbio"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "Latín de Serbia"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "sueco"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "tamil"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "telugu"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "tailandés"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "turco"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "ucraniano"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "vietnamita"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "chino simplificado"
-#: conf/global_settings.py:104
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "chino tradicional"
@@ -309,15 +313,15 @@ msgstr "Este mes"
msgid "This year"
msgstr "Este año"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "Yes"
msgstr "Sí"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "No"
msgstr "No"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
msgid "Unknown"
msgstr "Desconocido"
@@ -363,7 +367,7 @@ 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:844
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
#: forms/models.py:568
msgid "and"
msgstr "y"
@@ -692,7 +696,7 @@ msgid "Filter"
msgstr "Filtrar"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
msgid "Delete"
msgstr "Eliminar"
@@ -855,13 +859,17 @@ msgstr "Guardar y agregar otro"
msgid "Save and continue editing"
msgstr "Guardar y continuar editando"
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
+#: 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."
+"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
@@ -873,7 +881,7 @@ 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 "Contraseña:"
+msgstr "Contraseña"
#: contrib/admin/templates/admin/auth/user/change_password.html:41
#: contrib/admin/templates/registration/password_change_form.html:37
@@ -1243,7 +1251,7 @@ 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:"
+msgstr "Nombre de usuario"
#: contrib/auth/forms.py:15 contrib/auth/forms.py:49
msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."
@@ -1435,8 +1443,8 @@ msgstr "mensaje"
msgid "Logged out"
msgstr "Sesión cerrada"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: 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"
@@ -1504,7 +1512,7 @@ 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:1101
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
msgid "URL"
msgstr "URL"
@@ -1553,7 +1561,7 @@ msgstr "comentario"
msgid "date/time submitted"
msgstr "fecha/hora de envío"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
msgid "IP address"
msgstr "Dirección IP"
@@ -4503,20 +4511,20 @@ msgstr "sitios"
msgid "Enter a valid value."
msgstr "Introduzca un valor válido."
-#: core/validators.py:87 forms/fields.py:529
+#: 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:530
+#: 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:873
+#: 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:866
+#: core/validators.py:126 forms/fields.py:870
msgid "Enter a valid IPv4 address."
msgstr "Introduzca una dirección IPv4 válida"
@@ -4528,15 +4536,15 @@ msgstr "Introduzca sólo dígitos separados por comas."
#, 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)."
+"Asegúrese de que este valor sea %(limit_value)s (actualmente es "
+"%(show_value)s)."
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#: 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:206 forms/fields.py:258
+#: 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."
@@ -4544,8 +4552,8 @@ 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)."
+"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)."
@@ -4553,20 +4561,20 @@ msgstr ""
#: core/validators.py:170
#, python-format
msgid ""
-"Ensure this value has at most %(limit_value)d characters (it has %"
-"(show_value)d)."
+"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:822
+#: 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:837 db/models/base.py:845
+#: 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."
@@ -4589,13 +4597,13 @@ msgstr "Este campo no puede estar en blanco."
msgid "Field of type: %(field_type)s"
msgstr "Campo 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
+#: 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:850
+#: 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."
@@ -4607,7 +4615,7 @@ msgstr "Este valor debe ser True o False."
msgid "Boolean (Either True or False)"
msgstr "Booleano (Verdadero o Falso)"
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#: 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)"
@@ -4651,44 +4659,44 @@ msgstr "Número decimal"
msgid "E-mail address"
msgstr "Dirección de correo electrónico"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: 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:822
+#: 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:824
+#: db/models/fields/__init__.py:832
msgid "Floating point number"
msgstr "Número de punto flotante"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:891
msgid "Big (8 byte) integer"
msgstr "Entero grande (8 bytes)"
-#: db/models/fields/__init__.py:912
+#: 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:914
+#: db/models/fields/__init__.py:922
msgid "Boolean (Either True, False or None)"
msgstr "Booleano (Verdadero, Falso o Nulo)"
-#: db/models/fields/__init__.py:1005
+#: db/models/fields/__init__.py:1013
msgid "Text"
msgstr "Texto"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1029
msgid "Time"
msgstr "Hora"
-#: db/models/fields/__init__.py:1025
+#: 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:1109
+#: db/models/fields/__init__.py:1125
msgid "XML text"
msgstr "Texto XML"
@@ -4701,22 +4709,22 @@ msgstr "No existe un modelo %(model)s con una clave primaria %(pk)r."
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:918
+#: db/models/fields/related.py:919
msgid "One-to-one relationship"
msgstr "Relación uno-a-uno"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:981
msgid "Many-to-many relationship"
msgstr "Relación muchos-a-muchos"
-#: db/models/fields/related.py:1000
+#: 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:1061
+#: db/models/fields/related.py:1062
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -4732,55 +4740,55 @@ msgstr[1] ""
msgid "This field is required."
msgstr "Este campo es obligatorio."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "Introduzca un número entero."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234 forms/fields.py:255
msgid "Enter a number."
msgstr "Introduzca un número."
-#: forms/fields.py:259
+#: 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:260
+#: 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:261
+#: 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:323 forms/fields.py:838
+#: forms/fields.py:322 forms/fields.py:837
msgid "Enter a valid date."
msgstr "Introduzca una fecha válida."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350 forms/fields.py:838
msgid "Enter a valid time."
msgstr "Introduzca un valor de hora válido."
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "Introduzca un valor de fecha/hora válido."
-#: forms/fields.py:435
+#: 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:436
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "No se envió ningún archivo."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "El archivo enviado está vacío."
-#: forms/fields.py:438
+#: forms/fields.py:437
#, python-format
msgid ""
"Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4788,7 +4796,7 @@ msgstr ""
"Asegúrese de que este nombre de archivo tenga como máximo %(max)d caracteres "
"(tiene %(length)d)."
-#: forms/fields.py:473
+#: forms/fields.py:472
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -4796,18 +4804,18 @@ 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:596 forms/fields.py:671
+#: 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:672 forms/fields.py:734 forms/models.py:1002
+#: 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
+#: forms/formsets.py:296 forms/formsets.py:298
msgid "Order"
msgstr "Ordenar"
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
index f894397efb..e69f6fe95d 100644
--- a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
index 5f6278533a..387449ecc2 100644
--- a/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/es_AR/LC_MESSAGES/djangojs.po
@@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-04 22:01-0300\n"
-"PO-Revision-Date: 2010-05-04 22:10-0300\n"
+"POT-Creation-Date: 2010-08-06 15:47-0300\n"
+"PO-Revision-Date: 2010-08-06 15:52-0300\n"
"Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
"Language-Team: Django-I18N <django-i18n@googlegroups.com>\n"
"Language: es_AR\n"
@@ -17,45 +17,17 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Pootle 2.0.1\n"
-#: contrib/admin/media/js/SelectFilter2.js:37
-#, perl-format
-msgid "Available %s"
-msgstr "%s disponibles"
-
-#: contrib/admin/media/js/SelectFilter2.js:45
-msgid "Choose all"
-msgstr "Seleccionar todos"
-
-#: contrib/admin/media/js/SelectFilter2.js:50
-msgid "Add"
-msgstr "Agregar"
-
-#: contrib/admin/media/js/SelectFilter2.js:52
-msgid "Remove"
-msgstr "Eliminar"
-
-#: contrib/admin/media/js/SelectFilter2.js:57
-#, perl-format
-msgid "Chosen %s"
-msgstr "%s elegidos"
-
-#: contrib/admin/media/js/SelectFilter2.js:58
-msgid "Select your choice(s) and click "
-msgstr "Seleccione los items a agregar y haga click en "
-
#: contrib/admin/media/js/SelectFilter2.js:63
msgid "Clear all"
msgstr "Eliminar todos"
#: 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 de %(cnt)s seleccionado/a"
msgstr[1] "%(sel)s de %(cnt)s seleccionados/as"
#: 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."
diff --git a/django/conf/locale/eu/LC_MESSAGES/django.mo b/django/conf/locale/eu/LC_MESSAGES/django.mo
index c19c32116f..ab3f8fc84f 100644
--- a/django/conf/locale/eu/LC_MESSAGES/django.mo
+++ b/django/conf/locale/eu/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/eu/LC_MESSAGES/django.po b/django/conf/locale/eu/LC_MESSAGES/django.po
index 37a829d1ca..b96f7e4bfc 100644
--- a/django/conf/locale/eu/LC_MESSAGES/django.po
+++ b/django/conf/locale/eu/LC_MESSAGES/django.po
@@ -7,13 +7,13 @@ 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"
+"PO-Revision-Date: 2010-07-08 12:55+0200\n"
+"Last-Translator: Aitzol Naberan <anaberan@codesyntax.com>\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"
+"X-Generator: emacs\n"
#: conf/global_settings.py:39
msgid "Arabic"
@@ -53,7 +53,7 @@ msgstr "Greziera"
#: conf/global_settings.py:48
msgid "English"
-msgstr "Ingeles"
+msgstr "Ingelesa"
#: conf/global_settings.py:49
msgid "Spanish"
@@ -69,7 +69,7 @@ msgstr "Persiera"
#: conf/global_settings.py:52
msgid "Finnish"
-msgstr "Finlandesa"
+msgstr "Finlandiera"
#: conf/global_settings.py:53
msgid "French"
@@ -81,11 +81,11 @@ msgstr "Gaelikoa"
#: conf/global_settings.py:55
msgid "Galician"
-msgstr "Galiziarra"
+msgstr "Galiziera"
#: conf/global_settings.py:56
msgid "Hungarian"
-msgstr "Hungarierra"
+msgstr "Hungariera"
#: conf/global_settings.py:57
msgid "Hebrew"
@@ -129,7 +129,7 @@ msgstr "Mazedoniera"
#: conf/global_settings.py:67
msgid "Dutch"
-msgstr "Holandesa"
+msgstr "Holandera"
#: conf/global_settings.py:68
msgid "Norwegian"
@@ -246,15 +246,15 @@ msgstr "Ezezaguna"
#: contrib/admin/models.py:18
msgid "action time"
-msgstr "Ekintz hordua"
+msgstr "Ekintza hordua"
#: contrib/admin/models.py:21
msgid "object id"
-msgstr "Objetuaren id"
+msgstr "Objetuaren id-a"
#: contrib/admin/models.py:22
msgid "object repr"
-msgstr "Objeturaren repr"
+msgstr "Objeturaren aurkezpena"
#: contrib/admin/models.py:23
msgid "action flag"
@@ -275,11 +275,11 @@ 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"
+msgstr "Ez da orririk 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"
+msgstr "Barkatu, eskatutako orria ezin daiteke aurkitu"
#: contrib/admin/templates/admin/500.html:4
#: contrib/admin/templates/admin/base.html:37
@@ -300,21 +300,21 @@ msgstr "Hasiera"
#: contrib/admin/templates/admin/500.html:4
msgid "Server error"
-msgstr "Serbidore errorea"
+msgstr "Zerbitzari errorea"
#: contrib/admin/templates/admin/500.html:6
msgid "Server error (500)"
-msgstr "Serbidor errorea (500)"
+msgstr "Zerbitzari errorea (500)"
#: contrib/admin/templates/admin/500.html:9
msgid "Server Error <em>(500)</em>"
-msgstr "Serbidore Errorea <em>(500)</em>"
+msgstr "Zerbitzari 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."
+msgstr "Arazo bat izan da. Web guneraren administradoreri abisu email bat bidali zaio eta laister konpondua egon beharko luke. Barkatu eragozpenak."
#: contrib/admin/templates/admin/base.html:26
msgid "Welcome,"
@@ -329,7 +329,7 @@ msgstr "Dokumentazioa"
#: 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"
+msgstr "Pasahitza aldatu"
#: contrib/admin/templates/admin/base.html:30
#: contrib/comments/templates/comments/form.html:6
@@ -338,11 +338,11 @@ msgstr "Atera"
#: contrib/admin/templates/admin/base_site.html:4
msgid "Django site admin"
-msgstr "Django admin. gunea"
+msgstr "Django kudeaketa gunea"
#: contrib/admin/templates/admin/base_site.html:7
msgid "Django administration"
-msgstr "Django administradorea"
+msgstr "Django kudeaketa"
#: contrib/admin/templates/admin/change_form.html:14
#: contrib/admin/templates/admin/index.html:28
@@ -356,18 +356,18 @@ msgstr "Aurrekoak"
#: contrib/admin/templates/admin/change_form.html:21
msgid "View on site"
-msgstr "Lekuaren bista"
+msgstr "Webgunean ikusi"
#: 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"
+msgstr[0] "Arren zuzendu akatsa"
+msgstr[1] "Arren zuzendu akatsak"
#: contrib/admin/templates/admin/change_form.html:49
msgid "Ordering"
-msgstr "Ordenaketa"
+msgstr "Ordenazioa"
#: contrib/admin/templates/admin/change_form.html:52
msgid "Order:"
@@ -389,20 +389,14 @@ 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:"
+msgstr "%(object_name)s ezabatzean bere '%(escaped_object)s' ere ezabatzen dira, baina zure kontuak ez dauka baimenik objetu mota hauek 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:"
+msgstr "Ziur zaude %(object_name)s \"%(escaped_object)s\" ezabatu nahi dituzula? Erlazionaturik dauden hurrengo elementuak ere ezabatuko dira:"
#: contrib/admin/templates/admin/delete_confirmation.html:25
msgid "Yes, I'm sure"
@@ -418,9 +412,9 @@ msgid "Filter"
msgstr "Filtroa"
#: contrib/admin/templates/admin/index.html:17
-#, python-format
+#, python-format, fuzzy
msgid "Models available in the %(name)s application."
-msgstr "%(name)s aplikazioan Modeloak."
+msgstr "%(name)s aplikazioan eskuragarri dauden modeloak."
#: contrib/admin/templates/admin/index.html:18
#, python-format
@@ -433,7 +427,7 @@ msgstr "Aldatu"
#: contrib/admin/templates/admin/index.html:44
msgid "You don't have permission to edit anything."
-msgstr "Ezer aldatzeko baimenik ez dezu."
+msgstr "Ezer aldatzeko baimenik ez duzu."
#: contrib/admin/templates/admin/index.html:52
msgid "Recent Actions"
@@ -452,18 +446,18 @@ 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"
+msgstr "Zerbait gaizki dago zure data-basearekin. Ziurtatu ezazu datu-baseko taulak sortu direla eta erabiltzaile egokiak duela irakurketa baimena"
#: 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:"
+msgstr "Erabiltzaile izena:"
#: contrib/admin/templates/admin/login.html:20
#: contrib/comments/templates/comments/form.html:8
msgid "Password:"
-msgstr "Hitz ezkutua:"
+msgstr "Pasahitza:"
#: contrib/admin/templates/admin/login.html:25
#: contrib/admin/views/decorators.py:25
@@ -476,7 +470,7 @@ msgstr "Data/ordua"
#: contrib/admin/templates/admin/object_history.html:18
msgid "User"
-msgstr "Usuarioa"
+msgstr "Erabiltzailea"
#: contrib/admin/templates/admin/object_history.html:19
msgid "Action"
@@ -490,7 +484,7 @@ msgstr ""
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."
+msgstr "Objetu honek ez dauka aldaketa zerrendarik. Ziur asko, kudeaketa gunetik kanpo gehituko zen."
#: contrib/admin/templates/admin/pagination.html:10
msgid "Show all"
@@ -532,31 +526,31 @@ msgstr "Gorde"
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"
+msgstr "Lehenengo erabiltzaile izena eta pasahitza idatzi. Gero erabiltzaile aukera gehiago aldatzeko aukera gehiago izango duzu"
#: contrib/admin/templates/admin/auth/user/add_form.html:12
msgid "Username"
-msgstr "Usuario izena"
+msgstr "Erabiltzaile 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"
+msgstr "Pasahitza"
#: 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)"
+msgstr "Pasahitza (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."
+msgstr "Idatzi berriro pasahitza."
#: 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."
+msgstr "Pasahitz berria idatzi <strong>%(username)s</strong> erabiltzailearentzat."
#: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Bookmarklets"
@@ -577,20 +571,18 @@ msgid ""
"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"
+"<p class=\"help\">Markadoreak instalatzeko eraman linka zure erreminta panelera (toolbar), edo eskuineko botoiarekin klik egin eta gehitu erreminta panelera. Kontuan izan, markadore hauetako batzuk, exekutatzen ari diren ordenagailua 'barneko' gisa markatua egotea behar dutela (hitzagin zure sistema kudeatzailearekin zure ordenagailua 'barnekoa' den edo ez argitzeko)\n"
+".</p>\n"
#: contrib/admin/templates/admin_doc/bookmarklets.html:18
msgid "Documentation for this page"
-msgstr "Web horri honentzat dokumentazioa"
+msgstr "Web orri honen 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."
+msgstr "Edozein orritik, orria sortzen duen bistaren dokumentaziora eramango zaitu."
#: contrib/admin/templates/admin_doc/bookmarklets.html:21
msgid "Show object ID"
@@ -600,23 +592,23 @@ msgstr "Objetuaren ID erakutsi"
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, ."
+msgstr "Objetu bakarra erakusten duten orrietan, eduki mota (content-type) eta orriaren ID bakarra erakutsi, ."
#: contrib/admin/templates/admin_doc/bookmarklets.html:24
msgid "Edit this object (current window)"
-msgstr "Objetu hau aldatu ( leiho hau)"
+msgstr "Objetu hau aldatu ( leiho honetan)"
#: 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."
+msgstr "Objetu bakarra erakusten orrietan, adminiztrazio gunera joan."
#: contrib/admin/templates/admin_doc/bookmarklets.html:27
msgid "Edit this object (new window)"
-msgstr "Objetu hay aldatu (leiho berria)"
+msgstr "Objetu hau aldatu (leiho berrian)"
#: 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."
+msgstr "Goian bezala, baina kudeaketa guena leiho berri batean irekiko da."
#: contrib/admin/templates/registration/logged_out.html:8
msgid "Thanks for spending some quality time with the Web site today."
@@ -624,85 +616,85 @@ 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)"
+msgstr "Sartu berriro"
#: 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"
+msgstr "Pasahitza 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"
+msgstr "Pasahitza ondo aldatu da"
#: contrib/admin/templates/registration/password_change_done.html:11
msgid "Your password was changed."
-msgstr "Hitz ezkutua aldatua izan da"
+msgstr "Pasahitza aldatu 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."
+msgstr "Idatzi pasahitz zaharra segurtasun arrazoiengatik eta gero pasahitz 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"
+msgstr "Pasahitz zaharra"
#: contrib/admin/templates/registration/password_change_form.html:18
msgid "New password:"
-msgstr "Hitz ezkutu berria:"
+msgstr "Pasahitz berria:"
#: contrib/admin/templates/registration/password_change_form.html:20
msgid "Confirm password:"
-msgstr "Hitz ezkutua baieztatu:"
+msgstr "Pasahitza baieztatu:"
#: contrib/admin/templates/registration/password_change_form.html:22
msgid "Change my password"
-msgstr "Nire hitz ezkutua aldatu"
+msgstr "Nire pasahitza 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"
+msgstr "Pasahitza berrezarri"
#: 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"
+msgstr "Pasahitza ondo berrezarri da"
#: 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."
+msgstr "Pasahitz berria e-mail bidez bidali dizugu. Epe laburrean jasoko 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"
+msgstr "Mezu elektroniko hau jaso duzu pasahitzaren berrezarketa 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"
+msgstr "%(site_name)s erabiltzaile 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"
+msgstr "Zure pasahitz 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:"
+msgstr "Pasahitza aldatu dezakezu orri honetan:"
#: contrib/admin/templates/registration/password_reset_email.html:11
msgid "Your username, in case you've forgotten:"
-msgstr "Zure usuario izena (ahaztu badezu):"
+msgstr "Zure erabiltzaile izena (ahaztu badezu):"
#: contrib/admin/templates/registration/password_reset_email.html:13
msgid "Thanks for using our site!"
@@ -711,13 +703,13 @@ 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"
+msgstr "%(site_name)s web guneko 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."
+msgstr "Pasahitza ahaztu duzu? Idatzi zure e-mail helbidea, eta pasahitz berri bat bidaliko dizugu."
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "E-mail address:"
@@ -725,7 +717,7 @@ msgstr "E-mail helbidea:"
#: contrib/admin/templates/registration/password_reset_form.html:16
msgid "Reset my password"
-msgstr "Hitz ezkutua ezabatu"
+msgstr "Pasahitza berrezarri"
#: contrib/admin/templates/widget/date_time.html:3
msgid "Date:"
@@ -750,7 +742,7 @@ 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."
+msgstr "%(name)s \"%(obj)s\" ondo gehitu da."
#: contrib/admin/views/auth.py:25 contrib/admin/views/main.py:271
#: contrib/admin/views/main.py:356
@@ -759,48 +751,48 @@ msgstr "Berriro alkatu zenezake beherago."
#: contrib/admin/views/auth.py:31
msgid "Add user"
-msgstr "Usuario gehitu"
+msgstr "Erabiltzailea gehitu"
#: contrib/admin/views/auth.py:58
msgid "Password changed successfully."
-msgstr "Hitz ezkutua aldaketa zuzena."
+msgstr "Ondo aldatu da pasahitza."
#: contrib/admin/views/auth.py:65
#, python-format
msgid "Change password: %s"
-msgstr "Hitz ezkutua aldatu: %s"
+msgstr "Pasahitza 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."
+msgstr "Mesedez idatzi erabiltzaile izen eta pasahitz egokiak. Maiskula eta minuskulak 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."
+msgstr "Sesioa iraungitu da. Mesedez sar zaitez berriro. Ez arduratu, bidalitakoa gorde 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."
+msgstr "Zure nabigatzaileak ez ditu cookie-ak onartzen. Aktiba ezazu hauen erabilera eta eskatu ezazu orri hau berriro."
#: contrib/admin/views/decorators.py:84
msgid "Usernames cannot contain the '@' character."
-msgstr "Usuario izenek ezin dezkete @ karakterea eduki."
+msgstr "Erabiltzaile 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."
+msgstr "Zure e-mail helbidea ez da zure erabiltzaile izena. Saiatu '%s' rekin."
#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50
#: contrib/admin/views/doc.py:52
msgid "tag:"
-msgstr "tag:"
+msgstr "etiketa:"
#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81
#: contrib/admin/views/doc.py:83
@@ -825,7 +817,7 @@ 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"
+msgstr "erlazionatutako `%(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
@@ -835,7 +827,7 @@ msgstr "modeloa:"
#: contrib/admin/views/doc.py:216
#, python-format
msgid "related `%(label)s.%(name)s` objects"
-msgstr "erlazionaturik `%(label)s.%(name)s` objetua"
+msgstr "erlazionatutako `%(label)s.%(name)s` objetua"
#: contrib/admin/views/doc.py:221
#, python-format
@@ -850,7 +842,7 @@ msgstr "%s zenbakia"
#: contrib/admin/views/doc.py:231
#, python-format
msgid "Fields on %s objects"
-msgstr "%s objetuan zutabeak"
+msgstr "%s objetuaren eremuak"
#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:304
#: contrib/admin/views/doc.py:306 contrib/admin/views/doc.py:312
@@ -869,7 +861,7 @@ msgstr "Katea (%(max_length)s gehienez)"
#: contrib/admin/views/doc.py:296
msgid "Comma-separated integers"
-msgstr "Komaz bereiztutako zenbako osoak"
+msgstr "Komaz bereiztutako zenbaki osoak"
#: contrib/admin/views/doc.py:297
msgid "Date (without time)"
@@ -881,7 +873,7 @@ msgstr "Data (orduarekin)"
#: contrib/admin/views/doc.py:299
msgid "Decimal number"
-msgstr "Zenbaki dezimala"
+msgstr "Zenbaki hamartarra"
#: contrib/admin/views/doc.py:300
msgid "E-mail address"
@@ -890,7 +882,7 @@ 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)"
+msgstr "Fitxegi bidea"
#: contrib/admin/views/doc.py:303
msgid "Floating point number"
@@ -906,7 +898,7 @@ msgstr "Boolearra (egia, gezurra edo hutsa[None])"
#: contrib/admin/views/doc.py:310
msgid "Relation to parent model"
-msgstr "Gurazo modeloarekin erlazioa"
+msgstr "Guraso modeloarekin erlazioa"
#: contrib/admin/views/doc.py:311
msgid "Phone number"
@@ -926,11 +918,11 @@ msgstr "URL"
#: contrib/admin/views/doc.py:319
msgid "U.S. state (two uppercase letters)"
-msgstr "U.S statua (bi letra maiuskula)"
+msgstr "AEB estatua (bi letra maiuskula)"
#: contrib/admin/views/doc.py:320
msgid "XML text"
-msgstr "XML textua"
+msgstr "XML testua"
#: contrib/admin/views/doc.py:346
#, python-format
@@ -939,7 +931,7 @@ msgstr "%s ez dirudi url heredu objetua"
#: contrib/admin/views/main.py:233
msgid "Site administration"
-msgstr "Web gunearen administrazioa"
+msgstr "Web gunearen kudeaketa"
#: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365
#, python-format
@@ -974,17 +966,17 @@ msgstr "%s ezabatuta."
#: contrib/admin/views/main.py:351
msgid "No fields changed."
-msgstr "Ez da zutaberik aldatu."
+msgstr "Ez da eremurik 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."
+msgstr "%(name)s \"%(obj)s\" ondo aldatu 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."
+msgstr "%(name)s \"%(obj)s\" ondo gehitu da. Jarraian aldatu dezakezu berriro."
#: contrib/admin/views/main.py:400
#, python-format
@@ -1004,7 +996,7 @@ 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."
+msgstr "%(name)s \"%(obj)s\" ondo ezabatu da."
#: contrib/admin/views/main.py:527
msgid "Are you sure?"
@@ -1023,7 +1015,7 @@ msgstr "%s aukeratu"
#: contrib/admin/views/main.py:583
#, python-format
msgid "Select %s to change"
-msgstr "aldaketarako %s aukeratu"
+msgstr "Aldaketarako %s aukeratu"
#: contrib/admin/views/main.py:784
msgid "Database error"
@@ -1031,40 +1023,41 @@ 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."
+msgstr "Pasahitzak ez datoz bat."
#: contrib/auth/forms.py:25
msgid "A user with that username already exists."
-msgstr "Usuario izen hori erabiltzen ari da."
+msgstr "Erabiltzaile izen hori ez dago eskuragarri."
#: 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."
+msgstr "Zure nabigatzaileak ez ditu cookiak onartzen. Cookia-k beharrezkoak dira sisteman sartzeko."
#: contrib/auth/forms.py:62
msgid "This account is inactive."
-msgstr "Kontu hau az dago aktibatuta."
+msgstr "Kontu hau az dago aktibo."
#: 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?"
+msgstr "E-mail helbide horrek ez du lotutako erabiltzailerik. Ziur al zaude erregistratu duzula?"
#: contrib/auth/forms.py:107
#, python-format
msgid "Password reset on %s"
-msgstr "Hitz ezkutu ezabatua %s n"
+msgstr "Pasahitza berrezarri %s n"
#: contrib/auth/forms.py:117
msgid "The two 'new password' fields didn't match."
-msgstr "Bi hitz ezkutu berriak ez dira berdinak."
+msgstr "Bi pasahitz berriak ez datoz bat."
+# c
#: 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."
+msgstr "Zure pasahitz zaharra ez da zuzena. Idatzi ezazu berriro."
#: contrib/auth/models.py:73 contrib/auth/models.py:93
msgid "name"
@@ -1072,7 +1065,7 @@ msgstr "izena"
#: contrib/auth/models.py:75
msgid "codename"
-msgstr "code izena (codename)"
+msgstr "kode izena"
#: contrib/auth/models.py:78
msgid "permission"
@@ -1092,7 +1085,7 @@ msgstr "taldeak"
#: contrib/auth/models.py:131
msgid "username"
-msgstr "usuario izena"
+msgstr "erabiltzaile izena"
#: contrib/auth/models.py:131
msgid ""
@@ -1116,21 +1109,21 @@ msgstr "e-mail helbidea"
#: contrib/auth/models.py:135
msgid "password"
-msgstr "hitz ezkutua"
+msgstr "pasahitza"
#: 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>."
+msgstr "Erabili '[algo]$[salt]$[hexdigest]' edo erabili <a href=\"password/\">pasahitza aldatzeko formularioa </a>."
#: contrib/auth/models.py:136
msgid "staff status"
-msgstr "Arduraduen egoera"
+msgstr "Arduradun 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."
+msgstr "Erabiltzaileak kudeaketa gune honetan sartzeko baimena duen edo ez adierazten du."
#: contrib/auth/models.py:137
msgid "active"
@@ -1140,17 +1133,17 @@ msgstr "Aktiboa"
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."
+msgstr "Erabiltzailea Django adminiztrazio gunean sartu daitekeen edo ez adierazten du. Desaktiba ezazu aukera hau kontua ezabatu ordez."
#: contrib/auth/models.py:138
msgid "superuser status"
-msgstr "Usuario nagusia (superuser)"
+msgstr "Erabiltzaile nagusia"
#: 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."
+msgstr "Erabiltzaileari baimen guztiak esleitzeko banan-banan aukeratu behar izan gabe."
#: contrib/auth/models.py:139
msgid "last login"
@@ -1164,19 +1157,19 @@ msgstr "erregistro eguna"
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."
+msgstr "Erabiltzaile honek, eskuz emandako baimen guztiez gain, berari egokitutako talde bakoitzari emandako baimenak ere izango ditu."
#: contrib/auth/models.py:143
msgid "user permissions"
-msgstr "Usuarioaren baimenak"
+msgstr "Erabiltzailearen baimenak"
#: contrib/auth/models.py:147
msgid "user"
-msgstr "Usuarioa"
+msgstr "Erabiltzailea"
#: contrib/auth/models.py:148
msgid "users"
-msgstr "Usuarioak"
+msgstr "Erabiltzaileak"
#: contrib/auth/models.py:154
msgid "Personal info"
@@ -1267,7 +1260,7 @@ msgstr "ezabatua"
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."
+msgstr "Markatu kutxa hau komentario ezegokia bada. \"Komentario hau ezabatua izan da\" mezua erakutsiko da bere ordez."
#: contrib/comments/models.py:96
msgid "comments"
@@ -1298,7 +1291,7 @@ msgstr "pertsonaren izena"
#: contrib/comments/models.py:181
msgid "ip address"
-msgstr "ip zenbakia"
+msgstr "ip helbidea"
#: contrib/comments/models.py:183
msgid "approved by staff"
@@ -1340,7 +1333,7 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
-"%(user)s -k komentario hay markatu du:\n"
+"%(user)s -k komentario hau markatu du:\n"
"\n"
"%(text)s"
@@ -1350,11 +1343,11 @@ msgstr "markatutako eguna"
#: contrib/comments/models.py:289
msgid "user flag"
-msgstr "usuarioaren markaketa"
+msgstr "erabiltzailearen markaketa"
#: contrib/comments/models.py:290
msgid "user flags"
-msgstr "usuariaren markaketak"
+msgstr "erabiltzailearen markaketak"
#: contrib/comments/models.py:294
#, python-format
@@ -1380,7 +1373,7 @@ msgstr "%r moderatzaileak ezabatua"
#: contrib/comments/templates/comments/form.html:8
msgid "Forgotten your password?"
-msgstr "Hitz ezkutua ahaztu duzu?"
+msgstr "Pasahitza ahaztu duzu?"
#: contrib/comments/templates/comments/form.html:12
msgid "Ratings"
@@ -1430,7 +1423,7 @@ msgid_plural ""
"comments:\n"
"\n"
"%(text)s"
-msgstr[0] "Komentario hau, %(count)s komentario baino gutxiago egindako usuario batek bidalia da:<br><br>%(text)s"
+msgstr[0] "Komentario hau, %(count)s komentario baino gutxiago egindako erabiltzaile batek bidali du:<br><br>%(text)s"
msgstr[1] ""
#: contrib/comments/views/comments.py:117
@@ -1440,19 +1433,19 @@ msgid ""
"\n"
"%(text)s"
msgstr ""
-"Komentario hau usuario 'arin' batek bidalia da:\n"
+"Komentario hau behin-behineko erabiltzaile batek bidali du:\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"
+msgstr "POSTak 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"
+msgstr "Beharrezko eremu bat edo gehiago ez dira bidali"
#: contrib/comments/views/comments.py:198
#: contrib/comments/views/comments.py:289
@@ -1473,7 +1466,7 @@ 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"
+msgstr "Erabiltzaile anonimoek ezin dezakete botorik eman"
#: contrib/comments/views/karma.py:25
msgid "Invalid comment ID"
@@ -1489,11 +1482,11 @@ msgstr "python model class izena"
#: contrib/contenttypes/models.py:40
msgid "content type"
-msgstr "edukiera moeta"
+msgstr "eduki mota"
#: contrib/contenttypes/models.py:41
msgid "content types"
-msgstr "edukiera moetak"
+msgstr "eduki motak"
#: contrib/flatpages/models.py:8
msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes."
@@ -1505,7 +1498,7 @@ msgstr "izenburua"
#: contrib/flatpages/models.py:10
msgid "content"
-msgstr "edukiera"
+msgstr "edukia"
#: contrib/flatpages/models.py:11
msgid "enable comments"
@@ -1519,7 +1512,7 @@ msgstr "plantila izena"
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."
+msgstr "Adibidez: 'flatpages/contact_page.html'. Hau ematen ez bada, sistemak 'flatpages/default.html' erabiliko du."
#: contrib/flatpages/models.py:14
msgid "registration required"
@@ -1527,7 +1520,7 @@ 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."
+msgstr "Hau markatuta badago, erregistratutako erabiltzaileek bakarrik ikusiko dute orria."
#: contrib/flatpages/models.py:18
msgid "flat page"
@@ -1630,11 +1623,11 @@ msgstr "NNNN edo ANNNNAAA formatoan idatzi posta kode bat."
#: 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."
+msgstr "Eremu 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."
+msgstr "Eremu 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."
@@ -1646,7 +1639,7 @@ msgstr "CUIT okerra."
#: contrib/localflavor/au/forms.py:16
msgid "Enter a 4 digit post code."
-msgstr "4 zenbaki posta kodean idatzi."
+msgstr "4 zenbakiko posta kodea idatzi."
#: contrib/localflavor/br/forms.py:21
msgid "Enter a zip code in the format XXXXX-XXX."
@@ -1668,7 +1661,7 @@ 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."
+msgstr "Eremu honek gehienez 11 digito edo 14 karaktere behar ditu."
#: contrib/localflavor/br/forms.py:134
msgid "Invalid CNPJ number."
@@ -1676,7 +1669,7 @@ 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"
+msgstr "Eremu honek 14 digito behar ditu gutxienez"
#: contrib/localflavor/ca/forms.py:17
msgid "Enter a postal code in the format XXX XXX."
@@ -1684,7 +1677,7 @@ 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 ""
+msgstr "Sartu Kanadako segurtasun sozialeko zenbaki zuzen bat XXX-XXX-XXX formatoan."
#: contrib/localflavor/ch/ch_states.py:5
msgid "Aargau"
@@ -1802,15 +1795,15 @@ msgstr ""
#: contrib/localflavor/cl/forms.py:29
msgid "Enter a valid Chilean RUT."
-msgstr ""
+msgstr "Txileko RUT zuzen bat sartu"
#: contrib/localflavor/cl/forms.py:30
msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X."
-msgstr ""
+msgstr "Txileko RUT zuzen bat sartu. Formatoa: XX.XXX.XXX.X."
#: contrib/localflavor/cl/forms.py:31
msgid "The Chilean RUT is not valid."
-msgstr ""
+msgstr "Txileko RUTa ez da baliozkoa"
#: contrib/localflavor/de/de_states.py:5
msgid "Baden-Wuerttemberg"
@@ -1879,7 +1872,7 @@ 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 ""
+msgstr "Sartu zip kodea XXXXX formatoan"
#: contrib/localflavor/de/forms.py:41
msgid ""
@@ -2152,7 +2145,7 @@ msgstr "Nafarroako komunitate forala"
#: contrib/localflavor/es/es_regions.py:21
msgid "Valencian Community"
-msgstr "Valeciako komunitatea"
+msgstr "Valenciako komunitatea"
#: contrib/localflavor/es/forms.py:19
msgid "Enter a valid postal code in the range and format 01XXX - 52XXX."
@@ -2182,7 +2175,7 @@ msgstr "NIE kontrol kode okerra."
#: contrib/localflavor/es/forms.py:70
msgid "Invalid checksum for CIF."
-msgstr "CIF kontrl kode okerra."
+msgstr "CIF kontrol kode okerra."
#: contrib/localflavor/es/forms.py:142
msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
@@ -3400,7 +3393,7 @@ msgstr "nondik berbidalia"
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/'."
+msgstr "Honek 'bide' absolutua izan beharko luke, dominio izena kenduta. 'Adibidez: events/search/'."
#: contrib/redirects/models.py:9
msgid "redirect to"
@@ -3484,7 +3477,7 @@ 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."
+msgstr "E-mail helbide zuzenak idatzi, komaz bereizturik."
#: core/validators.py:111
msgid "Please enter a valid IP address."
@@ -3500,7 +3493,7 @@ 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."
+msgstr "Balore hau ezin daiteke digitoz bakarrik osatua egon."
#: core/validators.py:128 newforms/fields.py:151
msgid "Enter a whole number."
@@ -3512,7 +3505,7 @@ 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."
+msgstr "Urtea 1900 edo handiagoa izan behar du."
#: core/validators.py:151
#, python-format
@@ -3525,11 +3518,11 @@ 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."
+msgstr "Ordu 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."
+msgstr "Idatzi data/ordua zuzena YYYY-MM-DD HH:MM formatoan."
#: core/validators.py:170 newforms/fields.py:402
msgid "Enter a valid e-mail address."
@@ -3538,13 +3531,13 @@ 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."
+msgstr "Ez da fitxategirik bidali. Baiztatu ezazu formularioren kodeketa."
#: 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."
+msgstr "Bidali irudi zuzena. Zuk bidalitako fitxategia ez da irudi motako edo akatsa dauka."
#: core/validators.py:200
#, python-format
@@ -3554,7 +3547,7 @@ 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."
+msgstr "Telefono zenbakiek XXX-XXX-XXXX formatoa eduki behar dute. \"%s\" okerra."
#: core/validators.py:212
#, python-format
@@ -3587,11 +3580,11 @@ 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."
+msgstr "%s URLa ez dago ondo."
#: core/validators.py:267
msgid "Enter a valid U.S. state abbreviation."
-msgstr "U.S estatu laburpen zuzen idatzi."
+msgstr "AEB estatu laburpen zuzen bat idatzi."
#: core/validators.py:281
#, python-format
@@ -3603,73 +3596,73 @@ msgstr[1] ""
#: core/validators.py:288
#, python-format
msgid "This field must match the '%s' field."
-msgstr "Data hau '%s' data berdindu behar du."
+msgstr "Eremu hau eta '%s' eremua berdinak izan behar dira."
#: core/validators.py:307
msgid "Please enter something for at least one field."
-msgstr "Idatzi gutxienez data bat."
+msgstr "Bete eremuren 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."
+msgstr "Bete bi eremuak edo ez bete bat bera ere."
#: 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."
+msgstr "%(field)s eremuak %(value)s balioa baldin badauka, eremu hau bete behar da."
#: 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."
+msgstr "%(field)s eremuak %(value)s balioa ez baldin badauka, eremu hau bete behar da."
#: core/validators.py:367
msgid "Duplicate values are not allowed."
-msgstr "Errepikatutako datak ez dira onartzen."
+msgstr "Errepikatutako balioak 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."
+msgstr "Balio hau %(lower)s eta %(upper)s artean egon behar da."
#: core/validators.py:384
#, python-format
msgid "This value must be at least %s."
-msgstr "Gutxienez %s izan behar du."
+msgstr "Gutxienez %s izan behar da."
#: core/validators.py:386
#, python-format
msgid "This value must be no more than %s."
-msgstr "Balore hau %s baino txikiagoa izan behar du."
+msgstr "Balio hau %s baino txikiagoa izan behar da."
#: core/validators.py:427
#, python-format
msgid "This value must be a power of %s."
-msgstr "Balore hau %s-ren multiploa izan behar du."
+msgstr "Balio hau %s-ren multiploa izan behar da."
#: core/validators.py:437
msgid "Please enter a valid decimal number."
-msgstr "Idatzi zenbaki dezimal zuzena mesedez."
+msgstr "Idatzi zenbaki hamartar 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[0] "Idatzi zenbaki hamartar 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[0] "Idatzi zenbaki hamartar 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[0] "Idatzi zenbaki hamartar zuzena, %s digitorekin dezimalean."
msgstr[1] ""
#: core/validators.py:458
@@ -3679,20 +3672,20 @@ 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."
+msgstr "Ziurta zaitez bidalitako fitxategia gutxienez %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."
+msgstr "Ziurta zaitez bidalitako fitxategiak gehienez %s byte dituela."
#: core/validators.py:485
msgid "The format for this field is wrong."
-msgstr "Data honen formatoa okerra da."
+msgstr "Eremu honen formatoa okerra da."
#: core/validators.py:500
msgid "This field is invalid."
-msgstr "Data okerra."
+msgstr "Eremu okerra."
#: core/validators.py:536
#, python-format
@@ -3709,47 +3702,47 @@ msgstr "%(url)s URLak content-type okerra itzuli du: '%(contenttype)s'."
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\"."
+msgstr "Mesedez itxi itxigabeko %(tag)s elementoa %(line)s lerroan. Lerro 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\"."
+msgstr "%(line)s lerroan hasitako testuren bat ez da onartzen testuinguru 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\"."
+msgstr "%(line)s lerroko \"%(attr)s\" atributua 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\"."
+msgstr "%(line)s lerroko \"<%(tag)s>\" atributua 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\"."
+msgstr "%(line)s lerroan elementuren bat falta de edo atributuren bat falta du. 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\".)"
+msgstr " %(line)s lerroko \"%(attr)s\" atributoak balio 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."
+msgstr "%(type)s motako %(object)s objetua existitzen da %(field)s eremurako."
#: db/models/fields/__init__.py:52
#, python-format
@@ -3760,40 +3753,40 @@ msgstr "Badago %(optname)s izenarekin %(fieldname)s-n."
#: 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."
+msgstr "Eremu hau beharrezkoa da."
#: db/models/fields/__init__.py:418
msgid "This value must be an integer."
-msgstr "Balore hau zenbaki osoa izan behar du."
+msgstr "Balio honek 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)."
+msgstr "Balio honek True edo False izan behar du."
#: db/models/fields/__init__.py:475
msgid "This field cannot be null."
-msgstr "Datu hau ezin daiteke hutsa izan (null)."
+msgstr "Eremu 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."
+msgstr "Balio honek zenbaki hamartarra izan behar du."
#: db/models/fields/__init__.py:755
msgid "Enter a valid filename."
-msgstr "Idatzi fitxategi izen zuzena"
+msgstr "Idatzi fitxategi izen zuzen bat."
#: 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)"
+msgstr "Balio honek 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."
+msgstr "Mesedez idatzi %s zuzena."
#: db/models/fields/related.py:658
msgid "Separate multiple IDs with commas."
-msgstr "Bereiztu ID zerrenda koma bidez."
+msgstr "Bereiztu ID anitzak komaz."
#: db/models/fields/related.py:660
msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
@@ -3813,22 +3806,22 @@ 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."
+msgstr "Ziurta zaitez balio honek gehienez %(max)d karaktere 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."
+msgstr "Ziurta zaitez balio 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."
+msgstr "Ziurta zaitez balio 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."
+msgstr "Ziurta zaitez balio hau %s baino handiagoa edo berdina dela."
#: newforms/fields.py:180 newforms/fields.py:209
msgid "Enter a number."
@@ -3842,12 +3835,12 @@ 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."
+msgstr "Ziurta zaitez %s baino hamartar 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."
+msgstr "Ziurta zaitez %s digitu baino gehiago ez dagoela puntu hamartarraren aurretik."
#: newforms/fields.py:262 newforms/fields.py:723
msgid "Enter a valid date."
@@ -3859,7 +3852,7 @@ msgstr "Ordu zuzen bat idatzi."
#: newforms/fields.py:334
msgid "Enter a valid date/time."
-msgstr "Data/Ordua zuzen bat idatzi."
+msgstr "Data/Ordu zuzen bat idatzi."
#: newforms/fields.py:433
msgid "No file was submitted."
@@ -3875,7 +3868,7 @@ msgstr "URL zuzen bat idatzi."
#: newforms/fields.py:497
msgid "This URL appears to be a broken link."
-msgstr "URL hau ez dabil ondo."
+msgstr "URL hau ez dago ondo."
#: newforms/fields.py:559 newforms/models.py:317
msgid "Select a valid choice. That choice is not one of the available choices."
@@ -3897,7 +3890,7 @@ 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."
+msgstr "Aukera zuzena aukeratu. %s ez da aukeretako bat."
#: oldforms/__init__.py:409
#, python-format
@@ -3908,7 +3901,7 @@ msgstr[1] ""
#: oldforms/__init__.py:414
msgid "Line breaks are not allowed here."
-msgstr "Lerro berriak (line breaks) ez dire onartzen hemen."
+msgstr "Lerro jauziak ez dira onartzen hemen."
#: oldforms/__init__.py:512 oldforms/__init__.py:586 oldforms/__init__.py:625
#, python-format
@@ -4007,31 +4000,31 @@ msgstr "Igandea"
#: utils/dates.py:10
msgid "Mon"
-msgstr "Astelehe"
+msgstr "Al"
#: utils/dates.py:10
msgid "Tue"
-msgstr "Astear"
+msgstr "Ar"
#: utils/dates.py:10
msgid "Wed"
-msgstr "Asteaz"
+msgstr "Az"
#: utils/dates.py:10
msgid "Thu"
-msgstr "Oste"
+msgstr "Og"
#: utils/dates.py:10
msgid "Fri"
-msgstr "Osti"
+msgstr "Ol"
#: utils/dates.py:11
msgid "Sat"
-msgstr "Lar"
+msgstr "Lr"
#: utils/dates.py:11
msgid "Sun"
-msgstr "Iga"
+msgstr "Ig"
#: utils/dates.py:18
msgid "January"
@@ -4165,37 +4158,37 @@ msgstr "edo"
msgid "year"
msgid_plural "years"
msgstr[0] "urtea"
-msgstr[1] ""
+msgstr[1] "urteak"
#: utils/timesince.py:22
msgid "month"
msgid_plural "months"
msgstr[0] "hilabetea"
-msgstr[1] ""
+msgstr[1] "hilabeteak"
#: utils/timesince.py:23
msgid "week"
msgid_plural "weeks"
msgstr[0] "astea"
-msgstr[1] ""
+msgstr[1] "asteak"
#: utils/timesince.py:24
msgid "day"
msgid_plural "days"
msgstr[0] "eguna"
-msgstr[1] ""
+msgstr[1] "egunak"
#: utils/timesince.py:25
msgid "hour"
msgid_plural "hours"
-msgstr[0] "hordua"
-msgstr[1] ""
+msgstr[0] "ordua"
+msgstr[1] "orduak"
#: utils/timesince.py:26
msgid "minute"
msgid_plural "minutes"
msgstr[0] "minutu"
-msgstr[1] ""
+msgstr[1] "minutuak"
#: utils/timesince.py:46
msgid "minutes"
@@ -4239,10 +4232,10 @@ 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."
+msgstr "%(verbose_name)s arazorik gabe eguneratu da."
#: views/generic/create_update.py:184
#, python-format
msgid "The %(verbose_name)s was deleted."
-msgstr "%(verbose_name)s ezabatua izan da."
+msgstr "%(verbose_name)s ezabatu da."
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo
index eae7521b80..e0c7259b82 100644
--- a/django/conf/locale/fr/LC_MESSAGES/django.mo
+++ b/django/conf/locale/fr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po
index 412c2cb535..e9ec95ea9f 100644
--- a/django/conf/locale/fr/LC_MESSAGES/django.po
+++ b/django/conf/locale/fr/LC_MESSAGES/django.po
@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-14 11:01+0200\n"
-"PO-Revision-Date: 2010-04-17 00:18+0200\n"
-"Last-Translator: David Larlet <http://larlet.fr>\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"
@@ -72,7 +72,7 @@ msgid "Spanish"
msgstr "Espagnol"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "Espagnol argentin"
#: conf/global_settings.py:58
@@ -168,98 +168,102 @@ 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:82
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "Hollandais"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "Norvégien"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "Norvégien Bokmal"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "Norvégien Nynorsk"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "Polonais"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "Portugais"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "Portugais brésilien"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "Roumain"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "Russe"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "Slovaque"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "Slovène"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "Albanais"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "Serbe"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "Serbe latin"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "Suédois"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "Tamoul"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "Télougou"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "Thaï"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "Turc"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "Ukrainien"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "Vietnamien"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "Chinois simplifié"
-#: conf/global_settings.py:104
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "Chinois traditionnel"
@@ -311,15 +315,15 @@ msgstr "Ce mois-ci"
msgid "This year"
msgstr "Cette année"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "Yes"
msgstr "Oui"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "No"
msgstr "Non"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
msgid "Unknown"
msgstr "Inconnu"
@@ -697,7 +701,7 @@ msgid "Filter"
msgstr "Filtre"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
msgid "Delete"
msgstr "Supprimer"
@@ -796,7 +800,7 @@ msgstr ""
#: contrib/admin/templates/admin/login.html:19
msgid "Username:"
-msgstr "Nom d'utilisateur :"
+msgstr "Nom d'utilisateur :"
#: contrib/admin/templates/admin/login.html:22
msgid "Password:"
@@ -859,7 +863,7 @@ msgstr "Enregistrer et ajouter un nouveau"
msgid "Save and continue editing"
msgstr "Enregistrer et continuer les modifications"
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
+#: 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."
@@ -867,6 +871,10 @@ 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>."
@@ -1441,8 +1449,8 @@ msgstr "message"
msgid "Logged out"
msgstr "Déconnecté"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: 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."
@@ -1511,7 +1519,7 @@ 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:1101
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1112
msgid "URL"
msgstr "URL"
@@ -1563,7 +1571,7 @@ msgstr "commentaire"
msgid "date/time submitted"
msgstr "date et heure soumises"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:907
msgid "IP address"
msgstr "adresse IP"
@@ -4513,26 +4521,26 @@ msgstr "sites"
msgid "Enter a valid value."
msgstr "Saisissez une valeur valide."
-#: core/validators.py:87 forms/fields.py:529
+#: 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:530
+#: 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:873
+#: 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:866
+#: 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:572
+#: 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."
@@ -4543,13 +4551,13 @@ msgstr ""
"Assurez-vous que cette valeur est %(limit_value)s (actuellement %(show_value)"
"s)."
-#: core/validators.py:153 forms/fields.py:205 forms/fields.py:257
+#: 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:206 forms/fields.py:258
+#: 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 ""
@@ -4602,134 +4610,134 @@ msgstr "Ce champ ne peut pas être vide."
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:852
-#: db/models/fields/__init__.py:961 db/models/fields/__init__.py:972
-#: db/models/fields/__init__.py:999
+#: 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:850
+#: 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:490
+#: 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:492
+#: db/models/fields/__init__.py:495
msgid "Boolean (Either True or False)"
msgstr "Booléen (soit vrai ou faux)"
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#: 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:567
+#: db/models/fields/__init__.py:570
msgid "Comma-separated integers"
msgstr "Des entiers séparés par une virgule"
-#: db/models/fields/__init__.py:581
+#: db/models/fields/__init__.py:584
msgid "Date (without time)"
msgstr "Date (sans l'heure)"
-#: db/models/fields/__init__.py:585
+#: 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:586
+#: db/models/fields/__init__.py:589
#, python-format
msgid "Invalid date: %s"
msgstr "Date non valide : %s"
-#: db/models/fields/__init__.py:667
+#: 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:669
+#: db/models/fields/__init__.py:672
msgid "Date (with time)"
msgstr "Date (avec l'heure)"
-#: db/models/fields/__init__.py:735
+#: 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:737
+#: db/models/fields/__init__.py:740
msgid "Decimal number"
msgstr "Nombre décimal"
-#: db/models/fields/__init__.py:792
+#: db/models/fields/__init__.py:795
msgid "E-mail address"
msgstr "Adresse électronique"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: 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:822
+#: 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:824
+#: db/models/fields/__init__.py:835
msgid "Floating point number"
msgstr "Nombre à virgule flottante"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:894
msgid "Big (8 byte) integer"
msgstr "Grand entier (8 octets)"
-#: db/models/fields/__init__.py:912
+#: 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:914
+#: 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:1005
+#: db/models/fields/__init__.py:1016
msgid "Text"
msgstr "Texte"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1032
msgid "Time"
msgstr "Heure"
-#: db/models/fields/__init__.py:1025
+#: 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:1109
+#: db/models/fields/__init__.py:1128
msgid "XML text"
msgstr "Texte XML"
-#: db/models/fields/related.py:799
+#: 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:801
+#: 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:918
+#: db/models/fields/related.py:921
msgid "One-to-one relationship"
msgstr "Relation un à un"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:983
msgid "Many-to-many relationship"
msgstr "Relation plusieurs à plusieurs"
-#: db/models/fields/related.py:1000
+#: 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:1061
+#: db/models/fields/related.py:1064
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -4743,55 +4751,55 @@ msgstr[1] ""
msgid "This field is required."
msgstr "Ce champ est obligatoire."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "Saisissez un nombre entier."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234 forms/fields.py:255
msgid "Enter a number."
msgstr "Saisissez un nombre."
-#: forms/fields.py:259
+#: 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:260
+#: 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:261
+#: 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:323 forms/fields.py:838
+#: forms/fields.py:322 forms/fields.py:837
msgid "Enter a valid date."
msgstr "Saisissez une date valide."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350 forms/fields.py:838
msgid "Enter a valid time."
msgstr "Saisissez une heure valide."
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "Saisissez une date et une heure valides."
-#: forms/fields.py:435
+#: 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:436
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "Aucun fichier n'a été soumis."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "Le fichier soumis est vide."
-#: forms/fields.py:438
+#: forms/fields.py:437
#, python-format
msgid ""
"Ensure this filename has at most %(max)d characters (it has %(length)d)."
@@ -4799,7 +4807,7 @@ 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:473
+#: forms/fields.py:472
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -4807,17 +4815,17 @@ 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:596 forms/fields.py:671
+#: 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:672 forms/fields.py:734 forms/models.py:1002
+#: 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:298 forms/formsets.py:300
+#: forms/formsets.py:296 forms/formsets.py:298
msgid "Order"
msgstr "Ordre"
@@ -4868,28 +4876,28 @@ msgstr "Sélectionnez un choix valide ; %s n'en fait pas partie."
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:776
+#: template/defaultfilters.py:780
msgid "yes,no,maybe"
msgstr "oui, non, peut-être"
-#: template/defaultfilters.py:807
+#: 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:809
+#: template/defaultfilters.py:813
#, python-format
msgid "%.1f KB"
msgstr "%.1f Ko"
-#: template/defaultfilters.py:811
+#: template/defaultfilters.py:815
#, python-format
msgid "%.1f MB"
msgstr "%.1f Mo"
-#: template/defaultfilters.py:812
+#: template/defaultfilters.py:816
#, python-format
msgid "%.1f GB"
msgstr "%.1f Go"
@@ -5100,7 +5108,7 @@ msgstr "nov."
msgid "Dec."
msgstr "déc."
-#: utils/text.py:130
+#: utils/text.py:136
msgid "or"
msgstr "ou"
diff --git a/django/conf/locale/ml/LC_MESSAGES/django.mo b/django/conf/locale/ml/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..654b4fc4ee
--- /dev/null
+++ b/django/conf/locale/ml/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/ml/LC_MESSAGES/django.po b/django/conf/locale/ml/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..92ef53f099
--- /dev/null
+++ b/django/conf/locale/ml/LC_MESSAGES/django.po
@@ -0,0 +1,5044 @@
+# 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/django/conf/locale/ml/LC_MESSAGES/djangojs.mo b/django/conf/locale/ml/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..644d8bf949
--- /dev/null
+++ b/django/conf/locale/ml/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/ml/LC_MESSAGES/djangojs.po b/django/conf/locale/ml/LC_MESSAGES/djangojs.po
new file mode 100644
index 0000000000..aedc919ba3
--- /dev/null
+++ b/django/conf/locale/ml/LC_MESSAGES/djangojs.po
@@ -0,0 +1,156 @@
+# 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/django/conf/locale/ml/__init__.py b/django/conf/locale/ml/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/django/conf/locale/ml/__init__.py
diff --git a/django/conf/locale/ml/formats.py b/django/conf/locale/ml/formats.py
new file mode 100644
index 0000000000..141f705fb9
--- /dev/null
+++ b/django/conf/locale/ml/formats.py
@@ -0,0 +1,38 @@
+# -*- 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/django/conf/locale/nn/LC_MESSAGES/django.mo b/django/conf/locale/nn/LC_MESSAGES/django.mo
index a3898d06cb..0534d7f0cf 100644
--- a/django/conf/locale/nn/LC_MESSAGES/django.mo
+++ b/django/conf/locale/nn/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/nn/LC_MESSAGES/django.po b/django/conf/locale/nn/LC_MESSAGES/django.po
index 07ee018fad..c691be791e 100644
--- a/django/conf/locale/nn/LC_MESSAGES/django.po
+++ b/django/conf/locale/nn/LC_MESSAGES/django.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-16 22:39+0200\n"
+"POT-Creation-Date: 2010-08-07 21:14+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"
@@ -67,7 +67,7 @@ msgid "Spanish"
msgstr "Spansk"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "Argentinsk spansk"
#: conf/global_settings.py:58
@@ -163,98 +163,102 @@ msgid "Macedonian"
msgstr "Makedonsk"
#: conf/global_settings.py:81
+msgid "Malayalam"
+msgstr "Malayalam"
+
+#: conf/global_settings.py:82
msgid "Mongolian"
msgstr "Mongolsk"
-#: conf/global_settings.py:82
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "Nederlandsk"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "Norsk"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "Norsk (bokmål)"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "Norsk (nynorsk)"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "Polsk"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "Portugisisk"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "Brasiliansk portugisisk"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "Rumensk"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "Russisk"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "Slovakisk"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "Slovensk"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "Albansk"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "Serbisk"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "Serbisk latin"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "Svensk"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "Tamil"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "Telugu"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "Thai"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "Tyrkisk"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "Ukrainsk"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "Vietnamesisk"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "Simplifisert kinesisk"
-#: conf/global_settings.py:104
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "Tradisjonell kinesisk"
@@ -306,15 +310,15 @@ msgstr "Denne månaden"
msgid "This year"
msgstr "I år"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "Yes"
msgstr "Ja"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "No"
msgstr "Nei"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
msgid "Unknown"
msgstr "Ukjend"
@@ -451,8 +455,8 @@ msgstr[1] "%(count)s %(name)s vart endra."
#, python-format
msgid "%(total_count)s selected"
msgid_plural "All %(total_count)s selected"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%(total_count)s valde"
+msgstr[1] "Alle %(total_count)s valde"
#: contrib/admin/options.py:1071
#, python-format
@@ -684,7 +688,7 @@ msgid "Filter"
msgstr "Filtrering"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
msgid "Delete"
msgstr "Slett"
@@ -843,7 +847,7 @@ msgstr "Lagre og opprett ny"
msgid "Save and continue editing"
msgstr "Lagre og hald fram å redigere"
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
+#: 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."
@@ -851,6 +855,10 @@ msgstr ""
"Skriv først inn brukernamn og passord. Deretter vil du få høve til å endre "
"fleire brukarinnstillingar."
+#: contrib/admin/templates/admin/auth/user/add_form.html:8
+msgid "Enter a username and password."
+msgstr "Skriv inn nytt brukarnamn og passord."
+
#: contrib/admin/templates/admin/auth/user/change_password.html:28
#, python-format
msgid "Enter a new password for the user <strong>%(username)s</strong>."
@@ -1407,8 +1415,8 @@ msgstr "melding"
msgid "Logged out"
msgstr "Logga ut"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: contrib/auth/management/commands/createsuperuser.py:24
+#: core/validators.py:120 forms/fields.py:427
msgid "Enter a valid e-mail address."
msgstr "Oppgje ei gyldig e-postadresse."
@@ -1476,7 +1484,7 @@ 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
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1112
msgid "URL"
msgstr "Nettadresse"
@@ -1526,7 +1534,7 @@ msgstr "kommentar"
msgid "date/time submitted"
msgstr "dato/tid for innsending"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:907
msgid "IP address"
msgstr "IP-adresse"
@@ -4453,26 +4461,26 @@ msgstr "nettstader"
msgid "Enter a valid value."
msgstr "Oppgje ein gyldig verdi."
-#: core/validators.py:87 forms/fields.py:529
+#: core/validators.py:87 forms/fields.py:528
msgid "Enter a valid URL."
msgstr "Oppgje ei gyldig nettadresse."
-#: core/validators.py:89 forms/fields.py:530
+#: core/validators.py:89 forms/fields.py:529
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
+#: core/validators.py:123 forms/fields.py:877
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
+#: core/validators.py:126 forms/fields.py:870
msgid "Enter a valid IPv4 address."
msgstr "Oppgje ei gyldig IPv4-adresse."
-#: core/validators.py:129 db/models/fields/__init__.py:572
+#: core/validators.py:129 db/models/fields/__init__.py:575
msgid "Enter only digits separated by commas."
msgstr "Oppgje berre tall skild med komma."
@@ -4481,12 +4489,12 @@ msgstr "Oppgje berre tall skild med komma."
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
+#: 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 "Verdien må vere mindre enn eller lik %(limit_value)s."
-#: core/validators.py:158 forms/fields.py:206 forms/fields.py:258
+#: 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 "Verdien må vere større enn eller lik %(limit_value)s."
@@ -4534,132 +4542,132 @@ msgstr "Feltet kan ikkje vere tomt."
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
+#: 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 "Heiltal"
-#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:850
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:861
msgid "This value must be an integer."
msgstr "Verdien må vere eit heltall."
-#: db/models/fields/__init__.py:490
+#: db/models/fields/__init__.py:493
msgid "This value must be either True or False."
msgstr "Verdien må vere True eller False."
-#: db/models/fields/__init__.py:492
+#: db/models/fields/__init__.py:495
msgid "Boolean (Either True or False)"
msgstr "Boolsk (True eller False)"
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:993
#, python-format
msgid "String (up to %(max_length)s)"
msgstr "Tekst (opp til %(max_length)s teikn)"
-#: db/models/fields/__init__.py:567
+#: db/models/fields/__init__.py:570
msgid "Comma-separated integers"
msgstr "Heiltal skild med komma"
-#: db/models/fields/__init__.py:581
+#: db/models/fields/__init__.py:584
msgid "Date (without time)"
msgstr "Dato (utan tid)"
-#: db/models/fields/__init__.py:585
+#: db/models/fields/__init__.py:588
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
+#: db/models/fields/__init__.py:589
#, python-format
msgid "Invalid date: %s"
msgstr "Ugyldig dato: %s"
-#: db/models/fields/__init__.py:667
+#: db/models/fields/__init__.py:670
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
+#: db/models/fields/__init__.py:672
msgid "Date (with time)"
msgstr "Dato (med tid)"
-#: db/models/fields/__init__.py:735
+#: db/models/fields/__init__.py:738
msgid "This value must be a decimal number."
msgstr "Verdien må vere eit desimaltall."
-#: db/models/fields/__init__.py:737
+#: db/models/fields/__init__.py:740
msgid "Decimal number"
msgstr "Desimaltall"
-#: db/models/fields/__init__.py:792
+#: db/models/fields/__init__.py:795
msgid "E-mail address"
msgstr "E-postadresse"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: db/models/fields/__init__.py:810 db/models/fields/files.py:220
#: db/models/fields/files.py:331
msgid "File path"
msgstr "Filsti"
-#: db/models/fields/__init__.py:822
+#: db/models/fields/__init__.py:833
msgid "This value must be a float."
msgstr "Verdien må vere eit flyttall."
-#: db/models/fields/__init__.py:824
+#: db/models/fields/__init__.py:835
msgid "Floating point number"
msgstr "Flyttall"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:894
msgid "Big (8 byte) integer"
msgstr ""
-#: db/models/fields/__init__.py:912
+#: db/models/fields/__init__.py:923
msgid "This value must be either None, True or False."
msgstr "Verdien må vere None, True eller False."
-#: db/models/fields/__init__.py:914
+#: db/models/fields/__init__.py:925
msgid "Boolean (Either True, False or None)"
msgstr "Boolsk (True, False eller None)"
-#: db/models/fields/__init__.py:1005
+#: db/models/fields/__init__.py:1016
msgid "Text"
msgstr "Tekst"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1032
msgid "Time"
msgstr "Tid"
-#: db/models/fields/__init__.py:1025
+#: db/models/fields/__init__.py:1036
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
+#: db/models/fields/__init__.py:1128
msgid "XML text"
msgstr "XML-tekst"
-#: db/models/fields/related.py:799
+#: db/models/fields/related.py:801
#, 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
+#: db/models/fields/related.py:803
msgid "Foreign Key (type determined by related field)"
msgstr "Primærnøkkel (type bestemt av relatert felt)"
-#: db/models/fields/related.py:918
+#: db/models/fields/related.py:921
msgid "One-to-one relationship"
msgstr "Ein-til-ein-forhold"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:983
msgid "Many-to-many relationship"
msgstr "Mange-til-mange-forhold"
-#: db/models/fields/related.py:1000
+#: db/models/fields/related.py:1003
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
+#: db/models/fields/related.py:1064
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -4671,60 +4679,60 @@ msgstr[1] "Oppgje gyldige %(self)s-ID-ar. Verdiane %(value)r er ugyldige."
msgid "This field is required."
msgstr "Feltet er påkravd."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "Oppgje eit heiltall."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234 forms/fields.py:255
msgid "Enter a number."
msgstr "Oppgje eit tall."
-#: forms/fields.py:259
+#: forms/fields.py:258
#, 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
+#: forms/fields.py:259
#, 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
+#: forms/fields.py:260
#, 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
+#: forms/fields.py:322 forms/fields.py:837
msgid "Enter a valid date."
msgstr "Oppgje ein gyldig dato."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350 forms/fields.py:838
msgid "Enter a valid time."
msgstr "Oppgje eit gyldig tidspunkt."
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "Oppgje gyldig dato og tidspunkt."
-#: forms/fields.py:435
+#: forms/fields.py:434
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
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "Inga fil vart sendt."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "Fila er tom."
-#: forms/fields.py:438
+#: forms/fields.py:437
#, 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
+#: forms/fields.py:472
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -4732,17 +4740,17 @@ msgstr ""
"Last opp eit gyldig bilete. Fila du lasta opp var ødelagt eller ikkje eit "
"bilete."
-#: forms/fields.py:596 forms/fields.py:671
+#: 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 ""
"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
+#: forms/fields.py:671 forms/fields.py:733 forms/models.py:1002
msgid "Enter a list of values."
msgstr "Oppgje ei liste med verdiar."
-#: forms/formsets.py:298 forms/formsets.py:300
+#: forms/formsets.py:296 forms/formsets.py:298
msgid "Order"
msgstr "Rekkefølge"
@@ -4788,28 +4796,28 @@ msgstr "Velg eit gyldig valg. %s er ikkje eit av dei tilgjengelege valga."
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
+#: template/defaultfilters.py:780
msgid "yes,no,maybe"
msgstr "ja,nei,kanskje"
-#: template/defaultfilters.py:807
+#: template/defaultfilters.py:811
#, 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
+#: template/defaultfilters.py:813
#, python-format
msgid "%.1f KB"
msgstr "%.1f KB"
-#: template/defaultfilters.py:811
+#: template/defaultfilters.py:815
#, python-format
msgid "%.1f MB"
msgstr "%.1f MB"
-#: template/defaultfilters.py:812
+#: template/defaultfilters.py:816
#, python-format
msgid "%.1f GB"
msgstr "%.1f GB"
@@ -4880,7 +4888,7 @@ msgstr "ons"
#: utils/dates.py:10
msgid "Thu"
-msgstr "tors"
+msgstr "tor"
#: utils/dates.py:10
msgid "Fri"
@@ -4888,7 +4896,7 @@ msgstr "fre"
#: utils/dates.py:11
msgid "Sat"
-msgstr "laur"
+msgstr "lau"
#: utils/dates.py:11
msgid "Sun"
@@ -5018,7 +5026,7 @@ msgstr "nov."
msgid "Dec."
msgstr "des."
-#: utils/text.py:130
+#: utils/text.py:136
msgid "or"
msgstr "eller"
diff --git a/django/conf/locale/pl/formats.py b/django/conf/locale/pl/formats.py
index a4a2961185..4520f7ce4e 100644
--- a/django/conf/locale/pl/formats.py
+++ b/django/conf/locale/pl/formats.py
@@ -28,5 +28,5 @@ DATETIME_INPUT_FORMATS = (
'%Y-%m-%d', # '2006-10-25'
)
DECIMAL_SEPARATOR = ','
-THOUSAND_SEPARATOR = '.'
-NUMBER_GROUPING = 3 \ No newline at end of file
+THOUSAND_SEPARATOR = ' '
+NUMBER_GROUPING = 3
diff --git a/django/conf/locale/sr/LC_MESSAGES/django.mo b/django/conf/locale/sr/LC_MESSAGES/django.mo
index 3b4121580c..28995bfad7 100644
--- a/django/conf/locale/sr/LC_MESSAGES/django.mo
+++ b/django/conf/locale/sr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/sr/LC_MESSAGES/django.po b/django/conf/locale/sr/LC_MESSAGES/django.po
index 51e9ab54dd..23c68cbfe1 100644
--- a/django/conf/locale/sr/LC_MESSAGES/django.po
+++ b/django/conf/locale/sr/LC_MESSAGES/django.po
@@ -4,17 +4,18 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-07 20:44+0200\n"
-"PO-Revision-Date: 2010-03-23 23:39+0100\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"
+"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"
@@ -69,7 +70,7 @@ msgid "Spanish"
msgstr "шпанÑки"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "аргентинÑки шпанÑки"
#: conf/global_settings.py:58
@@ -121,138 +122,146 @@ msgid "Hungarian"
msgstr "мађарÑки"
#: conf/global_settings.py:70
+msgid "Indonesian"
+msgstr "индонежанÑки"
+
+#: conf/global_settings.py:71
msgid "Icelandic"
msgstr "иÑландÑки"
-#: conf/global_settings.py:71
+#: conf/global_settings.py:72
msgid "Italian"
msgstr "италијанÑки"
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
msgid "Japanese"
msgstr "јапанÑки"
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
msgid "Georgian"
msgstr "грузијÑки"
-#: conf/global_settings.py:74
+#: conf/global_settings.py:75
msgid "Khmer"
msgstr "камбодијÑки"
-#: conf/global_settings.py:75
+#: conf/global_settings.py:76
msgid "Kannada"
msgstr "канада"
-#: conf/global_settings.py:76
+#: conf/global_settings.py:77
msgid "Korean"
msgstr "корејÑки"
-#: conf/global_settings.py:77
+#: conf/global_settings.py:78
msgid "Lithuanian"
msgstr "литванÑки"
-#: conf/global_settings.py:78
+#: conf/global_settings.py:79
msgid "Latvian"
msgstr "латвијÑки"
-#: conf/global_settings.py:79
+#: conf/global_settings.py:80
msgid "Macedonian"
msgstr "македонÑки"
-#: conf/global_settings.py:80
+#: conf/global_settings.py:81
+msgid "Malayalam"
+msgstr "малајаламÑки"
+
+#: conf/global_settings.py:82
msgid "Mongolian"
msgstr "монголÑки"
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "холандÑки"
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "норвешки"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "норвешки кнјжевни"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "норвешки нови"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "пољÑки"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "португалÑки"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "бразилÑки португалÑки"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "румунÑки"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "руÑки"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "Ñловачки"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "Ñловеначки"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "албанÑки"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "ÑрпÑки"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "ÑрпÑки (латиница)"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "шведÑки"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "тамилÑки"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "телугу"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "тајландÑки"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "турÑки"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "украјинÑки"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "вијетнамÑки"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "новокинеÑки"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "ÑтарокинеÑки"
@@ -304,15 +313,15 @@ msgstr "Овај меÑец"
msgid "This year"
msgstr "Ова година"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "Yes"
msgstr "Да"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:478
msgid "No"
msgstr "Ðе"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:478
msgid "Unknown"
msgstr "Ðепознато"
@@ -358,7 +367,7 @@ 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
+#: contrib/comments/templates/comments/preview.html:16 db/models/base.py:845
#: forms/models.py:568
msgid "and"
msgstr "и"
@@ -457,9 +466,9 @@ msgstr[1] "%(total_count)s изабрано"
msgstr[2] "%(total_count)s изабраних"
#: contrib/admin/options.py:1071
-#, fuzzy, python-format
+#, python-format
msgid "0 of %(cnt)s selected"
-msgstr "0 од %(cnt)d изабрано"
+msgstr "0 од %(cnt)s изабрано"
#: contrib/admin/options.py:1118
#, python-format
@@ -687,7 +696,7 @@ msgid "Filter"
msgstr "Филтер"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:300
msgid "Delete"
msgstr "Обриши"
@@ -849,7 +858,7 @@ msgstr "Сачувај и додај Ñледећи"
msgid "Save and continue editing"
msgstr "Сачувај и наÑтави Ñа изменама"
-#: contrib/admin/templates/admin/auth/user/add_form.html:5
+#: 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."
@@ -857,6 +866,10 @@ 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>."
@@ -1050,7 +1063,7 @@ msgstr "Имејл адреÑа:"
msgid "Reset my password"
msgstr "РеÑетуј моју лозинку"
-#: contrib/admin/templatetags/admin_list.py:239
+#: contrib/admin/templatetags/admin_list.py:257
msgid "All dates"
msgstr "Сви датуми"
@@ -1424,8 +1437,8 @@ msgstr "порука"
msgid "Logged out"
msgstr "Одјављен"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: contrib/auth/management/commands/createsuperuser.py:24
+#: core/validators.py:120 forms/fields.py:427
msgid "Enter a valid e-mail address."
msgstr "УнеÑите важећу имејл адреÑу."
@@ -1497,7 +1510,7 @@ 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
+#: contrib/flatpages/models.py:7 db/models/fields/__init__.py:1109
msgid "URL"
msgstr "URL"
@@ -1547,7 +1560,7 @@ msgstr "коментар"
msgid "date/time submitted"
msgstr "датум/време поÑтављања"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60 db/models/fields/__init__.py:904
msgid "IP address"
msgstr "IP адреÑа"
@@ -4471,22 +4484,22 @@ msgstr "Ñајтови"
msgid "Enter a valid value."
msgstr "УнеÑите иÑправну вредноÑÑ‚."
-#: core/validators.py:87 forms/fields.py:529
+#: core/validators.py:87 forms/fields.py:528
msgid "Enter a valid URL."
msgstr "УнеÑите иÑправан URL."
-#: core/validators.py:89 forms/fields.py:530
+#: 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:873
+#: 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:866
+#: core/validators.py:126 forms/fields.py:870
msgid "Enter a valid IPv4 address."
msgstr "УнеÑите иÑправну IPv4 адреÑу."
@@ -4499,12 +4512,12 @@ msgstr "УнеÑите Ñамо бројке раздвојене запетам
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
+#: 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:206 forms/fields.py:258
+#: 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 или тачно толико."
@@ -4512,27 +4525,27 @@ 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)."
+"Ensure this value has at least %(limit_value)d characters (it has "
+"%(show_value)d)."
msgstr ""
-"Ово поље мора да Ñадржи најмање %(limit_value)d Ñловних меÑта (тренутно има %"
-"(show_value)d)."
+"Ово поље мора да Ñадржи најмање %(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)."
+"Ensure this value has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
msgstr ""
-"Ово поље мора да Ñадржи највише %(limit_value)d Ñловних меÑта (тренутно има %"
-"(show_value)d)."
+"Ово поље мора да Ñадржи највише %(limit_value)d Ñловних меÑта (тренутно има "
+"%(show_value)d)."
-#: db/models/base.py:822
+#: 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:837 db/models/base.py:845
+#: 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 већ поÑтоји."
@@ -4555,13 +4568,13 @@ msgstr "Ово поље не може да оÑтане празно."
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
+#: 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:850
+#: db/models/fields/__init__.py:455 db/models/fields/__init__.py:858
msgid "This value must be an integer."
msgstr "Ова вредноÑÑ‚ мора бити целобројна."
@@ -4573,7 +4586,7 @@ msgstr "Ова вредноÑÑ‚ мора бити True или False."
msgid "Boolean (Either True or False)"
msgstr "Булова вредноÑÑ‚ (True или False)"
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#: 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 знакова)"
@@ -4615,44 +4628,44 @@ msgstr "Децимални број"
msgid "E-mail address"
msgstr "Имејл адреÑа"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: 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:822
+#: db/models/fields/__init__.py:830
msgid "This value must be a float."
msgstr "Ова вредноÑÑ‚ мора бити број Ñа клизећом запетом"
-#: db/models/fields/__init__.py:824
+#: db/models/fields/__init__.py:832
msgid "Floating point number"
msgstr "Број Ñа покреном запетом"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:891
msgid "Big (8 byte) integer"
msgstr "Велики цео број"
-#: db/models/fields/__init__.py:912
+#: 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:914
+#: db/models/fields/__init__.py:922
msgid "Boolean (Either True, False or None)"
msgstr "Булова вредноÑÑ‚ (True, False или None)"
-#: db/models/fields/__init__.py:1005
+#: db/models/fields/__init__.py:1013
msgid "Text"
msgstr "ТекÑÑ‚"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1029
msgid "Time"
msgstr "Време"
-#: db/models/fields/__init__.py:1025
+#: db/models/fields/__init__.py:1033
msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
msgstr "УнеÑите иÑправно време у формату ЧЧ:ММ[:ÑÑ[.уууууу]]."
-#: db/models/fields/__init__.py:1109
+#: db/models/fields/__init__.py:1125
msgid "XML text"
msgstr "XML текÑÑ‚"
@@ -4665,22 +4678,22 @@ msgstr "Објекат клаÑе %(model)s Ñа примарним кључем
msgid "Foreign Key (type determined by related field)"
msgstr "Страни кључ (тип одређује референтно поље)"
-#: db/models/fields/related.py:918
+#: db/models/fields/related.py:919
msgid "One-to-one relationship"
msgstr "Релација један на један"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:981
msgid "Many-to-many relationship"
msgstr "Релација више на више"
-#: db/models/fields/related.py:1000
+#: 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:1061
+#: db/models/fields/related.py:1062
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -4693,62 +4706,62 @@ msgstr[2] "УнеÑите иÑправан %(self)s IDs. ВредноÑти %(va
msgid "This field is required."
msgstr "Ово поље Ñе мора попунити."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "УнеÑите цео број."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234 forms/fields.py:255
msgid "Enter a number."
msgstr "УнеÑите број."
-#: forms/fields.py:259
+#: forms/fields.py:258
#, python-format
msgid "Ensure that there are no more than %s digits in total."
msgstr "Ðе Ñме бити укупно више од %s цифара. Проверите."
-#: forms/fields.py:260
+#: forms/fields.py:259
#, python-format
msgid "Ensure that there are no more than %s decimal places."
msgstr "Ðе Ñме бити укупно више од %s децималних меÑта. Проверите."
-#: forms/fields.py:261
+#: 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:323 forms/fields.py:838
+#: forms/fields.py:322 forms/fields.py:837
msgid "Enter a valid date."
msgstr "УнеÑите иÑправан датум."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350 forms/fields.py:838
msgid "Enter a valid time."
msgstr "УнеÑите иÑправно време"
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "УнеÑите иÑправан датум/време."
-#: forms/fields.py:435
+#: forms/fields.py:434
msgid "No file was submitted. Check the encoding type on the form."
msgstr "Фајл није пребачен. Проверите тип енкодирања формулара."
-#: forms/fields.py:436
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "Фајл није пребачен."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "Пребачен фајл је празан."
-#: forms/fields.py:438
+#: 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)."
+"Ðазив фајла мора да Ñадржи бар %(max)d Ñловних меÑта (тренутно има "
+"%(length)d)."
-#: forms/fields.py:473
+#: forms/fields.py:472
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -4756,17 +4769,17 @@ msgstr ""
"Пребаците иÑправан фајл. Фајл који је пребачен или није Ñлика, или је "
"оштећен."
-#: forms/fields.py:596 forms/fields.py:671
+#: 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:672 forms/fields.py:734 forms/models.py:1002
+#: 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
+#: forms/formsets.py:296 forms/formsets.py:298
msgid "Order"
msgstr "РедоÑлед"
@@ -5103,23 +5116,23 @@ msgstr "%(number)d %(type)s"
msgid ", %(number)d %(type)s"
msgstr ", %(number)d %(type)s"
-#: utils/translation/trans_real.py:518
+#: utils/translation/trans_real.py:519
msgid "DATE_FORMAT"
msgstr "j. F Y."
-#: utils/translation/trans_real.py:519
+#: utils/translation/trans_real.py:520
msgid "DATETIME_FORMAT"
msgstr "j. F Y. H:i Т"
-#: utils/translation/trans_real.py:520
+#: utils/translation/trans_real.py:521
msgid "TIME_FORMAT"
msgstr "G:i"
-#: utils/translation/trans_real.py:541
+#: utils/translation/trans_real.py:542
msgid "YEAR_MONTH_FORMAT"
msgstr "F Y."
-#: utils/translation/trans_real.py:542
+#: utils/translation/trans_real.py:543
msgid "MONTH_DAY_FORMAT"
msgstr "j. F"
diff --git a/django/conf/locale/sr/LC_MESSAGES/djangojs.mo b/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
index 6de25a218c..b74e78cc4b 100644
--- a/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
+++ b/django/conf/locale/sr/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/sr/LC_MESSAGES/djangojs.po b/django/conf/locale/sr/LC_MESSAGES/djangojs.po
index 56a550b375..aecb4267dd 100644
--- a/django/conf/locale/sr/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/sr/LC_MESSAGES/djangojs.po
@@ -4,50 +4,24 @@ msgid ""
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-05-07 20:46+0200\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: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 "Ðаправите избор и кликните "
+"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
-#: 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 изабран"
@@ -55,7 +29,6 @@ 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."
@@ -151,3 +124,21 @@ 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/django/conf/locale/sr/formats.py b/django/conf/locale/sr/formats.py
index 63a20f4574..cb0478ed0f 100644
--- a/django/conf/locale/sr/formats.py
+++ b/django/conf/locale/sr/formats.py
@@ -11,9 +11,9 @@ 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.'
+ '%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.'
@@ -23,9 +23,6 @@ TIME_INPUT_FORMATS = (
'%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.'
@@ -38,7 +35,10 @@ DATETIME_INPUT_FORMATS = (
'%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 = ','
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
NUMBER_GROUPING = 3
diff --git a/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo b/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
index ad6193b38b..ad04e754de 100644
--- a/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
+++ b/django/conf/locale/sr_Latn/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/sr_Latn/LC_MESSAGES/django.po b/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
index 7947647f8c..7a289c3d23 100644
--- a/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
+++ b/django/conf/locale/sr_Latn/LC_MESSAGES/django.po
@@ -4,17 +4,15 @@ 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: 2010-03-23 23:39+0100\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-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"
+"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"
@@ -69,7 +67,7 @@ msgid "Spanish"
msgstr "španski"
#: conf/global_settings.py:57
-msgid "Argentinean Spanish"
+msgid "Argentinian Spanish"
msgstr "argentinski španski"
#: conf/global_settings.py:58
@@ -121,138 +119,146 @@ 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:71
+#: conf/global_settings.py:72
msgid "Italian"
msgstr "italijanski"
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
msgid "Japanese"
msgstr "japanski"
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
msgid "Georgian"
msgstr "gruzijski"
-#: conf/global_settings.py:74
+#: conf/global_settings.py:75
msgid "Khmer"
msgstr "kambodijski"
-#: conf/global_settings.py:75
+#: conf/global_settings.py:76
msgid "Kannada"
msgstr "kanada"
-#: conf/global_settings.py:76
+#: conf/global_settings.py:77
msgid "Korean"
msgstr "korejski"
-#: conf/global_settings.py:77
+#: conf/global_settings.py:78
msgid "Lithuanian"
msgstr "litvanski"
-#: conf/global_settings.py:78
+#: conf/global_settings.py:79
msgid "Latvian"
msgstr "latvijski"
-#: conf/global_settings.py:79
+#: conf/global_settings.py:80
msgid "Macedonian"
msgstr "makedonski"
-#: conf/global_settings.py:80
+#: conf/global_settings.py:81
+msgid "Malayalam"
+msgstr "malajalamski"
+
+#: conf/global_settings.py:82
msgid "Mongolian"
msgstr "mongolski"
-#: conf/global_settings.py:81
+#: conf/global_settings.py:83
msgid "Dutch"
msgstr "holandski"
-#: conf/global_settings.py:82
+#: conf/global_settings.py:84
msgid "Norwegian"
msgstr "norveški"
-#: conf/global_settings.py:83
+#: conf/global_settings.py:85
msgid "Norwegian Bokmal"
msgstr "norveški knjževni"
-#: conf/global_settings.py:84
+#: conf/global_settings.py:86
msgid "Norwegian Nynorsk"
msgstr "norveški novi"
-#: conf/global_settings.py:85
+#: conf/global_settings.py:87
msgid "Polish"
msgstr "poljski"
-#: conf/global_settings.py:86
+#: conf/global_settings.py:88
msgid "Portuguese"
msgstr "portugalski"
-#: conf/global_settings.py:87
+#: conf/global_settings.py:89
msgid "Brazilian Portuguese"
msgstr "brazilski portugalski"
-#: conf/global_settings.py:88
+#: conf/global_settings.py:90
msgid "Romanian"
msgstr "rumunski"
-#: conf/global_settings.py:89
+#: conf/global_settings.py:91
msgid "Russian"
msgstr "ruski"
-#: conf/global_settings.py:90
+#: conf/global_settings.py:92
msgid "Slovak"
msgstr "slovaÄki"
-#: conf/global_settings.py:91
+#: conf/global_settings.py:93
msgid "Slovenian"
msgstr "slovenaÄki"
-#: conf/global_settings.py:92
+#: conf/global_settings.py:94
msgid "Albanian"
msgstr "albanski"
-#: conf/global_settings.py:93
+#: conf/global_settings.py:95
msgid "Serbian"
msgstr "srpski"
-#: conf/global_settings.py:94
+#: conf/global_settings.py:96
msgid "Serbian Latin"
msgstr "srpski (latinica)"
-#: conf/global_settings.py:95
+#: conf/global_settings.py:97
msgid "Swedish"
msgstr "švedski"
-#: conf/global_settings.py:96
+#: conf/global_settings.py:98
msgid "Tamil"
msgstr "tamilski"
-#: conf/global_settings.py:97
+#: conf/global_settings.py:99
msgid "Telugu"
msgstr "telugu"
-#: conf/global_settings.py:98
+#: conf/global_settings.py:100
msgid "Thai"
msgstr "tajlandski"
-#: conf/global_settings.py:99
+#: conf/global_settings.py:101
msgid "Turkish"
msgstr "turski"
-#: conf/global_settings.py:100
+#: conf/global_settings.py:102
msgid "Ukrainian"
msgstr "ukrajinski"
-#: conf/global_settings.py:101
+#: conf/global_settings.py:103
msgid "Vietnamese"
msgstr "vijetnamski"
-#: conf/global_settings.py:102
+#: conf/global_settings.py:104
msgid "Simplified Chinese"
msgstr "novokineski"
-#: conf/global_settings.py:103
+#: conf/global_settings.py:105
msgid "Traditional Chinese"
msgstr "starokineski"
@@ -261,7 +267,8 @@ msgstr "starokineski"
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
+#: contrib/admin/actions.py:55
+#: contrib/admin/options.py:1125
msgid "Are you sure?"
msgstr "Da li ste sigurni?"
@@ -279,8 +286,10 @@ 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
+#: contrib/admin/filterspecs.py:75
+#: contrib/admin/filterspecs.py:92
+#: contrib/admin/filterspecs.py:147
+#: contrib/admin/filterspecs.py:173
msgid "All"
msgstr "Svi"
@@ -304,15 +313,18 @@ msgstr "Ovaj mesec"
msgid "This year"
msgstr "Ova godina"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:478
msgid "Yes"
msgstr "Da"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:147
+#: forms/widgets.py:478
msgid "No"
msgstr "Ne"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:469
+#: contrib/admin/filterspecs.py:154
+#: forms/widgets.py:478
msgid "Unknown"
msgstr "Nepoznato"
@@ -348,7 +360,8 @@ msgstr "zapis u logovima"
msgid "log entries"
msgstr "zapisi u logovima"
-#: contrib/admin/options.py:138 contrib/admin/options.py:153
+#: contrib/admin/options.py:138
+#: contrib/admin/options.py:153
msgid "None"
msgstr "Ništa"
@@ -357,8 +370,10 @@ msgstr "Ništa"
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:844
+#: 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"
@@ -387,11 +402,13 @@ msgstr "Bez izmena u poljima."
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
+#: 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
+#: 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"
@@ -403,19 +420,13 @@ 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."
+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: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."
@@ -426,7 +437,8 @@ msgstr "Nije izabrana nijedna akcija."
msgid "Add %s"
msgstr "Dodaj objekat klase %s"
-#: contrib/admin/options.py:866 contrib/admin/options.py:1105
+#: 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."
@@ -457,9 +469,9 @@ msgstr[1] "%(total_count)s izabrano"
msgstr[2] "%(total_count)s izabranih"
#: contrib/admin/options.py:1071
-#, fuzzy, python-format
+#, python-format
msgid "0 of %(cnt)s selected"
-msgstr "0 od %(cnt)d izabrano"
+msgstr "0 od %(cnt)s izabrano"
#: contrib/admin/options.py:1118
#, python-format
@@ -471,33 +483,30 @@ msgstr "Objekat „%(obj)s“ klase %(name)s uspešno je obrisan."
msgid "Change history: %s"
msgstr "Istorijat izmena: %s"
-#: contrib/admin/sites.py:18 contrib/admin/views/decorators.py:14
+#: 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."
+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
+#: 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: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/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
+#: 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“."
@@ -506,7 +515,8 @@ msgstr "VaÅ¡a imejl adresa nije vaÅ¡e korisniÄko ime. Probajte sa „%s“."
msgid "Site administration"
msgstr "Administracija sistema"
-#: contrib/admin/sites.py:403 contrib/admin/templates/admin/login.html:26
+#: 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"
@@ -584,12 +594,8 @@ 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."
+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"
@@ -687,29 +693,20 @@ msgid "Filter"
msgstr "Filter"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:302
+#: 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:"
+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:"
+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
@@ -722,23 +719,13 @@ 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:"
+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:"
+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
@@ -775,13 +762,8 @@ 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."
+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:"
@@ -804,12 +786,8 @@ 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."
+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"
@@ -849,13 +827,13 @@ msgstr "SaÄuvaj i dodaj sledeći"
msgid "Save and continue editing"
msgstr "SaÄuvaj i nastavi sa izmenama"
-#: 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. Potom ćete moći da menjate joÅ¡ "
-"korisniÄkih podeÅ¡avanja."
+#: 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
@@ -863,7 +841,9 @@ 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
+#: contrib/auth/forms.py:17
+#: contrib/auth/forms.py:61
+#: contrib/auth/forms.py:186
msgid "Password"
msgstr "Lozinka"
@@ -919,12 +899,8 @@ 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."
+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
@@ -968,12 +944,8 @@ 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."
+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:"
@@ -988,12 +960,8 @@ 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."
+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
@@ -1001,12 +969,8 @@ 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."
+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"
@@ -1035,12 +999,8 @@ 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."
+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:"
@@ -1050,7 +1010,7 @@ msgstr "Imejl adresa:"
msgid "Reset my password"
msgstr "Resetuj moju lozinku"
-#: contrib/admin/templatetags/admin_list.py:239
+#: contrib/admin/templatetags/admin_list.py:257
msgid "All dates"
msgstr "Svi datumi"
@@ -1064,7 +1024,8 @@ msgstr "Odaberi objekat klase %s"
msgid "Select %s to change"
msgstr "Odaberi objekat klase %s za izmenu"
-#: contrib/admin/views/template.py:38 contrib/sites/models.py:38
+#: contrib/admin/views/template.py:38
+#: contrib/sites/models.py:38
msgid "site"
msgstr "sajt"
@@ -1072,17 +1033,20 @@ msgstr "sajt"
msgid "template"
msgstr "templejt"
-#: contrib/admindocs/views.py:61 contrib/admindocs/views.py:63
+#: 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: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:158
+#: contrib/admindocs/views.py:160
#: contrib/admindocs/views.py:162
msgid "view:"
msgstr "vju:"
@@ -1102,28 +1066,34 @@ msgstr "Model %(model_name)r nije pronađen u aplikaciji %(app_label)r"
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
+#: 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
+#: 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
+#: 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
+#: contrib/admindocs/views.py:233
+#: contrib/admindocs/views.py:266
#, python-format
msgid "number of %s"
msgstr "broj povezanih objekata %s"
@@ -1170,24 +1140,16 @@ 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."
+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."
+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)"
@@ -1195,8 +1157,7 @@ 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"
+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)"
@@ -1204,8 +1165,7 @@ 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."
+msgstr "Isto kao prethodni, ali otvara administracionu stranicu u novom prozoru."
#: contrib/auth/admin.py:29
msgid "Personal info"
@@ -1232,17 +1192,19 @@ msgstr "Lozinka uspešno izmenjena."
msgid "Change password: %s"
msgstr "Izmeni lozinku: %s"
-#: contrib/auth/forms.py:14 contrib/auth/forms.py:48 contrib/auth/forms.py:60
+#: 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
+#: 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 @/./+/-/_)."
+msgstr "Neophodno. NajviÅ¡e 30 slovnih mesta. Samo alfanumeriÄki znaci (slova, brojke i @/./+/-/_)."
-#: contrib/auth/forms.py:16 contrib/auth/forms.py:50
+#: 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 @/./+/-/_."
@@ -1254,7 +1216,8 @@ msgstr "Potvrda lozinke"
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: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."
@@ -1264,24 +1227,16 @@ 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."
+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?"
+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
@@ -1296,7 +1251,8 @@ msgstr "Potvrda nove lozinke"
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
+#: contrib/auth/models.py:66
+#: contrib/auth/models.py:94
msgid "name"
msgstr "ime"
@@ -1308,7 +1264,8 @@ msgstr "šifra dozvole"
msgid "permission"
msgstr "dozvola"
-#: contrib/auth/models.py:73 contrib/auth/models.py:95
+#: contrib/auth/models.py:73
+#: contrib/auth/models.py:95
msgid "permissions"
msgstr "dozvole"
@@ -1316,7 +1273,8 @@ msgstr "dozvole"
msgid "group"
msgstr "grupa"
-#: contrib/auth/models.py:99 contrib/auth/models.py:206
+#: contrib/auth/models.py:99
+#: contrib/auth/models.py:206
msgid "groups"
msgstr "grupe"
@@ -1325,11 +1283,8 @@ 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 @/./+/-/_)."
+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"
@@ -1348,12 +1303,8 @@ 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>."
+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"
@@ -1361,32 +1312,23 @@ 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."
+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."
+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."
+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"
@@ -1397,18 +1339,15 @@ 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."
+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/auth/models.py:212
+#: contrib/comments/models.py:50
#: contrib/comments/models.py:168
msgid "user"
msgstr "korisnik"
@@ -1425,8 +1364,9 @@ msgstr "poruka"
msgid "Logged out"
msgstr "Odjavljen"
-#: contrib/auth/management/commands/createsuperuser.py:23
-#: core/validators.py:120 forms/fields.py:428
+#: 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."
@@ -1497,8 +1437,10 @@ msgstr "Ime"
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:1101
+#: 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"
@@ -1515,11 +1457,11 @@ 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"
+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
+#: contrib/comments/models.py:22
+#: contrib/contenttypes/models.py:81
msgid "content type"
msgstr "tip sadržaja"
@@ -1539,7 +1481,8 @@ msgstr "korisnikova imejl adresa"
msgid "user's URL"
msgstr "korisnikov URL"
-#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:56
+#: contrib/comments/models.py:76
#: contrib/comments/models.py:169
msgid "comment"
msgstr "komentar"
@@ -1548,7 +1491,8 @@ msgstr "komentar"
msgid "date/time submitted"
msgstr "datum/vreme postavljanja"
-#: contrib/comments/models.py:60 db/models/fields/__init__.py:896
+#: contrib/comments/models.py:60
+#: db/models/fields/__init__.py:904
msgid "IP address"
msgstr "IP adresa"
@@ -1557,42 +1501,28 @@ 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."
+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."
+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."
+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."
+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
@@ -1644,8 +1574,7 @@ 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"
+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
@@ -1723,19 +1652,12 @@ 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."
+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."
+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"
@@ -1758,12 +1680,8 @@ 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'."
+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"
@@ -1771,9 +1689,7 @@ 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."
+msgstr "Ako je ovo obeleženo, samo će prijavljeni korisnici moći da vide ovu stranicu."
#: contrib/flatpages/models.py:18
msgid "flat page"
@@ -1784,17 +1700,12 @@ 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."
+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."
+msgstr "Osnovno „GIS“ polje koje mapira tip geometrije po „OpenGIS“ specifikaciji."
#: contrib/gis/db/models/fields.py:270
msgid "Point"
@@ -1837,9 +1748,7 @@ 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."
+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
@@ -1934,8 +1843,10 @@ msgstr "juÄe"
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/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."
@@ -1988,15 +1899,15 @@ msgstr "Voralber"
msgid "Vienna"
msgstr "BeÄ"
-#: contrib/localflavor/at/forms.py:20 contrib/localflavor/ch/forms.py:17
+#: 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."
+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."
@@ -2011,9 +1922,7 @@ 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."
+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
@@ -2145,9 +2054,7 @@ 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."
+msgid "Enter a valid Swiss identity or passport card number in X1234567<0 or 1234567890 format."
msgstr ""
#: contrib/localflavor/cl/forms.py:30
@@ -2218,7 +2125,8 @@ msgstr ""
msgid "Moravian-Silesian Region"
msgstr ""
-#: contrib/localflavor/cz/forms.py:28 contrib/localflavor/sk/forms.py:30
+#: 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 ""
@@ -2302,15 +2210,14 @@ msgstr ""
msgid "Thuringia"
msgstr ""
-#: contrib/localflavor/de/forms.py:15 contrib/localflavor/fi/forms.py:13
+#: 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."
+msgid "Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X format."
msgstr ""
#: contrib/localflavor/es/es_provinces.py:5
@@ -2585,9 +2492,7 @@ 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."
+msgid "Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or 9XXXXXXXX."
msgstr ""
#: contrib/localflavor/es/forms.py:67
@@ -2611,8 +2516,7 @@ 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."
+msgid "Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX."
msgstr ""
#: contrib/localflavor/es/forms.py:144
@@ -2631,7 +2535,8 @@ msgstr ""
msgid "Enter a valid post code"
msgstr ""
-#: contrib/localflavor/id/forms.py:68 contrib/localflavor/nl/forms.py:53
+#: contrib/localflavor/id/forms.py:68
+#: contrib/localflavor/nl/forms.py:53
msgid "Enter a valid phone number"
msgstr ""
@@ -3060,8 +2965,7 @@ 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."
+msgid "Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
msgstr ""
#: contrib/localflavor/is_/forms.py:19
@@ -3481,8 +3385,7 @@ 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."
+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
@@ -4410,24 +4313,16 @@ 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/'."
+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://'."
+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"
@@ -4469,30 +4364,33 @@ msgstr "prikazano ime"
msgid "sites"
msgstr "sajtovi"
-#: core/validators.py:20 forms/fields.py:66
+#: core/validators.py:20
+#: forms/fields.py:66
msgid "Enter a valid value."
msgstr "Unesite ispravnu vrednost."
-#: core/validators.py:87 forms/fields.py:529
+#: core/validators.py:87
+#: forms/fields.py:528
msgid "Enter a valid URL."
msgstr "Unesite ispravan URL."
-#: core/validators.py:89 forms/fields.py:530
+#: 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:873
-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: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:866
+#: 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
+#: core/validators.py:129
+#: db/models/fields/__init__.py:572
msgid "Enter only digits separated by commas."
msgstr "Unesite samo brojke razdvojene zapetama."
@@ -4501,40 +4399,37 @@ msgstr "Unesite samo brojke razdvojene zapetama."
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:205 forms/fields.py:257
+#: 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:206 forms/fields.py:258
+#: 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)."
+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)."
+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:822
+#: 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:837 db/models/base.py:845
+#: 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."
@@ -4557,13 +4452,16 @@ msgstr "Ovo polje ne može da ostane prazno."
msgid "Field of type: %(field_type)s"
msgstr "Ponje 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
+#: 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:850
+#: 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."
@@ -4575,7 +4473,8 @@ msgstr "Ova vrednost mora biti True ili False."
msgid "Boolean (Either True or False)"
msgstr "Bulova vrednost (True ili False)"
-#: db/models/fields/__init__.py:539 db/models/fields/__init__.py:982
+#: 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)"
@@ -4617,44 +4516,45 @@ msgstr "Decimalni broj"
msgid "E-mail address"
msgstr "Imejl adresa"
-#: db/models/fields/__init__.py:799 db/models/fields/files.py:220
+#: 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:822
+#: 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:824
+#: db/models/fields/__init__.py:832
msgid "Floating point number"
msgstr "Broj sa pokrenom zapetom"
-#: db/models/fields/__init__.py:883
+#: db/models/fields/__init__.py:891
msgid "Big (8 byte) integer"
msgstr "Veliki ceo broj"
-#: db/models/fields/__init__.py:912
+#: 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:914
+#: 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:1005
+#: db/models/fields/__init__.py:1013
msgid "Text"
msgstr "Tekst"
-#: db/models/fields/__init__.py:1021
+#: db/models/fields/__init__.py:1029
msgid "Time"
msgstr "Vreme"
-#: db/models/fields/__init__.py:1025
+#: 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:1109
+#: db/models/fields/__init__.py:1125
msgid "XML text"
msgstr "XML tekst"
@@ -4667,26 +4567,22 @@ msgstr "Objekat klase %(model)s sa primarnim kljuÄem %(pk)r ne postoji."
msgid "Foreign Key (type determined by related field)"
msgstr "Strani kljuÄ (tip odreÄ‘uje referentno polje)"
-#: db/models/fields/related.py:918
+#: db/models/fields/related.py:919
msgid "One-to-one relationship"
msgstr "Relacija jedan na jedan"
-#: db/models/fields/related.py:980
+#: db/models/fields/related.py:981
msgid "Many-to-many relationship"
msgstr "Relacija više na više"
-#: 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 obeležili više od jedne "
-"stavke."
+#: 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:1061
+#: 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."
+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."
@@ -4695,80 +4591,79 @@ msgstr[2] "Unesite ispravan %(self)s IDs. Vrednosti %(value)r su neispravne."
msgid "This field is required."
msgstr "Ovo polje se mora popuniti."
-#: forms/fields.py:204
+#: forms/fields.py:203
msgid "Enter a whole number."
msgstr "Unesite ceo broj."
-#: forms/fields.py:235 forms/fields.py:256
+#: forms/fields.py:234
+#: forms/fields.py:255
msgid "Enter a number."
msgstr "Unesite broj."
-#: forms/fields.py:259
+#: 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:260
+#: 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:261
+#: 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:323 forms/fields.py:838
+#: forms/fields.py:322
+#: forms/fields.py:837
msgid "Enter a valid date."
msgstr "Unesite ispravan datum."
-#: forms/fields.py:351 forms/fields.py:839
+#: forms/fields.py:350
+#: forms/fields.py:838
msgid "Enter a valid time."
msgstr "Unesite ispravno vreme"
-#: forms/fields.py:377
+#: forms/fields.py:376
msgid "Enter a valid date/time."
msgstr "Unesite ispravan datum/vreme."
-#: forms/fields.py:435
+#: 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:436
+#: forms/fields.py:435
msgid "No file was submitted."
msgstr "Fajl nije prebaÄen."
-#: forms/fields.py:437
+#: forms/fields.py:436
msgid "The submitted file is empty."
msgstr "PrebaÄen fajl je prazan."
-#: forms/fields.py:438
+#: 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)."
+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: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: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:596 forms/fields.py:671
+#: 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."
+msgstr "%(value)s nije među ponuđenim vrednostima. Odaberite jednu od ponuđenih."
-#: forms/fields.py:672 forms/fields.py:734 forms/models.py:1002
+#: 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:298 forms/formsets.py:300
+#: forms/formsets.py:296
+#: forms/formsets.py:298
msgid "Order"
msgstr "Redosled"
@@ -4780,17 +4675,12 @@ 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."
+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."
+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."
@@ -4929,23 +4819,28 @@ msgstr "januar"
msgid "February"
msgstr "februar"
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
msgid "March"
msgstr "mart"
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
msgid "April"
msgstr "april"
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
msgid "May"
msgstr "maj"
-#: utils/dates.py:18 utils/dates.py:31
+#: utils/dates.py:18
+#: utils/dates.py:31
msgid "June"
msgstr "jun"
-#: utils/dates.py:19 utils/dates.py:31
+#: utils/dates.py:19
+#: utils/dates.py:31
msgid "July"
msgstr "jul"
@@ -5105,23 +5000,23 @@ msgstr "%(number)d %(type)s"
msgid ", %(number)d %(type)s"
msgstr ", %(number)d %(type)s"
-#: utils/translation/trans_real.py:518
+#: utils/translation/trans_real.py:519
msgid "DATE_FORMAT"
msgstr "j. F Y."
-#: utils/translation/trans_real.py:519
+#: utils/translation/trans_real.py:520
msgid "DATETIME_FORMAT"
msgstr "j. F Y. H:i T"
-#: utils/translation/trans_real.py:520
+#: utils/translation/trans_real.py:521
msgid "TIME_FORMAT"
msgstr "G:i"
-#: utils/translation/trans_real.py:541
+#: utils/translation/trans_real.py:542
msgid "YEAR_MONTH_FORMAT"
msgstr "F Y."
-#: utils/translation/trans_real.py:542
+#: utils/translation/trans_real.py:543
msgid "MONTH_DAY_FORMAT"
msgstr "j. F"
@@ -5139,3 +5034,4 @@ msgstr "%(verbose_name)s je uspešno ažuriran."
#, python-format
msgid "The %(verbose_name)s was deleted."
msgstr "%(verbose_name)s je obrisan."
+
diff --git a/django/conf/locale/sr_Latn/formats.py b/django/conf/locale/sr_Latn/formats.py
index 63a20f4574..cb0478ed0f 100644
--- a/django/conf/locale/sr_Latn/formats.py
+++ b/django/conf/locale/sr_Latn/formats.py
@@ -11,9 +11,9 @@ 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.'
+ '%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.'
@@ -23,9 +23,6 @@ TIME_INPUT_FORMATS = (
'%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.'
@@ -38,7 +35,10 @@ DATETIME_INPUT_FORMATS = (
'%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 = ','
+DECIMAL_SEPARATOR = ','
+THOUSAND_SEPARATOR = '.'
NUMBER_GROUPING = 3
diff --git a/django/conf/project_template/settings.py b/django/conf/project_template/settings.py
index ee4c9b5e96..c49df24ce5 100644
--- a/django/conf/project_template/settings.py
+++ b/django/conf/project_template/settings.py
@@ -91,4 +91,6 @@ INSTALLED_APPS = (
'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/django/conf/project_template/urls.py b/django/conf/project_template/urls.py
index dfb49d3bdc..3d0ff636a5 100644
--- a/django/conf/project_template/urls.py
+++ b/django/conf/project_template/urls.py
@@ -8,8 +8,7 @@ urlpatterns = patterns('',
# Example:
# (r'^{{ project_name }}/', include('{{ project_name }}.foo.urls')),
- # Uncomment the admin/doc line below and add 'django.contrib.admindocs'
- # to INSTALLED_APPS to enable admin documentation:
+ # 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:
diff --git a/django/contrib/admin/media/css/base.css b/django/contrib/admin/media/css/base.css
index da502f357a..9c1f71f810 100644
--- a/django/contrib/admin/media/css/base.css
+++ b/django/contrib/admin/media/css/base.css
@@ -445,6 +445,14 @@ ul.messagelist li {
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;
@@ -470,6 +478,11 @@ ul.errorlist {
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;
diff --git a/django/contrib/admin/media/css/changelists.css b/django/contrib/admin/media/css/changelists.css
index 99ff8bc0cf..282833c440 100644
--- a/django/contrib/admin/media/css/changelists.css
+++ b/django/contrib/admin/media/css/changelists.css
@@ -9,6 +9,8 @@
width: 100%;
}
+.change-list .hiddenfields { display:none; }
+
.change-list .filtered table {
border-right: 1px solid #ddd;
}
@@ -21,7 +23,7 @@
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 {
+.change-list .filtered .results, .change-list .filtered .paginator, .filtered #toolbar, .filtered div.xfull {
margin-right: 160px !important;
width: auto !important;
}
diff --git a/django/contrib/admin/media/js/dateparse.js b/django/contrib/admin/media/js/dateparse.js
index e1c870e146..3cb82dea13 100644
--- a/django/contrib/admin/media/js/dateparse.js
+++ b/django/contrib/admin/media/js/dateparse.js
@@ -100,8 +100,9 @@ var dateParsePatterns = [
{ re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+)$/i,
handler: function(bits) {
var d = new Date();
- d.setDate(parseInt(bits[1], 10));
+ d.setDate(1);
d.setMonth(parseMonth(bits[2]));
+ d.setDate(parseInt(bits[1], 10));
return d;
}
},
@@ -109,9 +110,10 @@ var dateParsePatterns = [
{ 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.setDate(1);
d.setYear(bits[3]);
+ d.setMonth(parseMonth(bits[2]));
+ d.setDate(parseInt(bits[1], 10));
return d;
}
},
@@ -119,8 +121,9 @@ var dateParsePatterns = [
{ re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?$/i,
handler: function(bits) {
var d = new Date();
- d.setDate(parseInt(bits[2], 10));
+ d.setDate(1);
d.setMonth(parseMonth(bits[1]));
+ d.setDate(parseInt(bits[2], 10));
return d;
}
},
@@ -128,9 +131,10 @@ var dateParsePatterns = [
{ 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.setDate(1);
d.setYear(bits[3]);
+ d.setMonth(parseMonth(bits[1]));
+ d.setDate(parseInt(bits[2], 10));
return d;
}
},
@@ -158,9 +162,10 @@ var dateParsePatterns = [
{ re: /(\d{1,2})\/(\d{1,2})\/(\d{4})/,
handler: function(bits) {
var d = new Date();
+ d.setDate(1);
d.setYear(bits[3]);
- d.setDate(parseInt(bits[2], 10));
d.setMonth(parseInt(bits[1], 10) - 1); // Because months indexed from 0
+ d.setDate(parseInt(bits[2], 10));
return d;
}
},
@@ -168,6 +173,7 @@ var dateParsePatterns = [
{ re: /(\d{4})-(\d{1,2})-(\d{1,2})/,
handler: function(bits) {
var d = new Date();
+ d.setDate(1);
d.setYear(parseInt(bits[1]));
d.setMonth(parseInt(bits[2], 10) - 1);
d.setDate(parseInt(bits[3], 10));
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index abbe14c948..ffa3a533e9 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -108,7 +108,13 @@ class BaseModelAdmin(object):
# 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)
+ related_modeladmin = self.admin_site._registry.get(
+ db_field.rel.to)
+ can_add_related = bool(related_modeladmin and
+ related_modeladmin.has_add_permission(request))
+ formfield.widget = widgets.RelatedFieldWidgetWrapper(
+ formfield.widget, db_field.rel, self.admin_site,
+ can_add_related=can_add_related)
return formfield
@@ -502,7 +508,7 @@ class ModelAdmin(BaseModelAdmin):
# 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.sort(key=lambda k: k[2].lower())
actions = SortedDict([
(name, (func, name, desc))
for func, name, desc in actions
@@ -755,7 +761,7 @@ class ModelAdmin(BaseModelAdmin):
if isinstance(response, HttpResponse):
return response
else:
- return HttpResponseRedirect(".")
+ return HttpResponseRedirect(request.get_full_path())
else:
msg = _("No action selected.")
self.message_user(request, msg)
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py
index f4b6953347..ddc4f8c84b 100644
--- a/django/contrib/admin/sites.py
+++ b/django/contrib/admin/sites.py
@@ -380,11 +380,11 @@ class AdminSite(object):
# Sort the apps alphabetically.
app_list = app_dict.values()
- app_list.sort(lambda x, y: cmp(x['name'], y['name']))
+ app_list.sort(key=lambda x: x['name'])
# Sort the models alphabetically within each app.
for app in app_list:
- app['models'].sort(lambda x, y: cmp(x['name'], y['name']))
+ app['models'].sort(key=lambda x: x['name'])
context = {
'title': _('Site administration'),
@@ -445,7 +445,7 @@ class AdminSite(object):
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']))
+ app_dict['models'].sort(key=lambda x: x['name'])
context = {
'title': _('%s administration') % app_instance.verbose_name,
'app_list': [app_dict],
diff --git a/django/contrib/admin/templates/admin/auth/user/add_form.html b/django/contrib/admin/templates/admin/auth/user/add_form.html
index b57f59b82e..c8889eb069 100644
--- a/django/contrib/admin/templates/admin/auth/user/add_form.html
+++ b/django/contrib/admin/templates/admin/auth/user/add_form.html
@@ -2,8 +2,11 @@
{% 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>
- <input type="hidden" name="_continue" value="1" />
+ {% else %}
+ <p>{% trans "Enter a username and password." %}</p>
+ {% endif %}
{% endblock %}
{% block after_field_sets %}
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html
index 3fd9eb3770..4221e2d1a7 100644
--- a/django/contrib/admin/templates/admin/base.html
+++ b/django/contrib/admin/templates/admin/base.html
@@ -56,7 +56,9 @@
{% endif %}
{% if messages %}
- <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>
+ <ul class="messagelist">{% for message in messages %}
+ <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
+ {% endfor %}</ul>
{% endif %}
<!-- Content -->
diff --git a/django/contrib/admin/templates/admin/change_list_results.html b/django/contrib/admin/templates/admin/change_list_results.html
index 0efcc9b24a..6d4de2df0e 100644
--- a/django/contrib/admin/templates/admin/change_list_results.html
+++ b/django/contrib/admin/templates/admin/change_list_results.html
@@ -1,4 +1,10 @@
+{% if result_hidden_fields %}
+<div class="hiddenfields"> {# DIV for HTML validation #}
+{% for item in result_hidden_fields %}{{ item }}{% endfor %}
+</div>
+{% endif %}
{% if results %}
+<div class="results">
<table cellspacing="0" id="result_list">
<thead>
<tr>
@@ -14,4 +20,5 @@
{% endfor %}
</tbody>
</table>
+</div>
{% endif %}
diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py
index 565db32251..c05af0b7fe 100644
--- a/django/contrib/admin/templatetags/admin_list.py
+++ b/django/contrib/admin/templatetags/admin_list.py
@@ -189,7 +189,7 @@ def items_for_result(cl, result, form):
else:
result_repr = conditional_escape(result_repr)
yield mark_safe(u'<td%s>%s</td>' % (row_class, result_repr))
- if form:
+ 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):
@@ -200,11 +200,18 @@ def results(cl):
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)
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 1d321d0620..2c7ac5c794 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -154,9 +154,9 @@ class ForeignKeyRawIdWidget(forms.TextInput):
key = self.rel.get_related_field().name
try:
obj = self.rel.to._default_manager.using(self.db).get(**{key: value})
- except self.rel.to.DoesNotExist:
+ return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
+ except (ValueError, self.rel.to.DoesNotExist):
return ''
- return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))
class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
"""
@@ -169,7 +169,7 @@ class ManyToManyRawIdWidget(ForeignKeyRawIdWidget):
def render(self, name, value, attrs=None):
attrs['class'] = 'vManyToManyRawIdAdminField'
if value:
- value = ','.join([str(v) for v in value])
+ value = ','.join([force_unicode(v) for v in value])
else:
value = ''
return super(ManyToManyRawIdWidget, self).render(name, value, attrs)
@@ -205,13 +205,18 @@ 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):
+ def __init__(self, widget, rel, admin_site, can_add_related=None):
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
+ # Backwards compatible check for whether a user can add related
+ # objects.
+ if can_add_related is None:
+ can_add_related = rel_to in self.admin_site._registry
+ self.can_add_related = can_add_related
# so we can check if the related object is registered with this AdminSite
self.admin_site = admin_site
@@ -236,7 +241,7 @@ class RelatedFieldWidgetWrapper(forms.Widget):
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:
+ if self.can_add_related:
# 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);"> ' % \
diff --git a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html
index 53383edc23..7470762775 100644
--- a/django/contrib/admindocs/templates/admin_doc/template_filter_index.html
+++ b/django/contrib/admindocs/templates/admin_doc/template_filter_index.html
@@ -15,7 +15,7 @@
<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="{{ filter.name }}">{{ filter.name }}</h3>
+ <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 %}
@@ -36,7 +36,7 @@
<h2>{% firstof library.grouper "Built-in filters" %}</h2>
<ul>
{% for filter in library.list|dictsort:"name" %}
- <li><a href="#{{ filter.name }}">{{ filter.name }}</a></li>
+ <li><a href="#{{ library.grouper|default_if_none:"built_in" }}-{{ filter.name }}">{{ filter.name }}</a></li>
{% endfor %}
</ul>
</div>
diff --git a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html
index a4ad66fd96..774130bd70 100644
--- a/django/contrib/admindocs/templates/admin_doc/template_tag_index.html
+++ b/django/contrib/admindocs/templates/admin_doc/template_tag_index.html
@@ -15,7 +15,7 @@
<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="{{ tag.name }}">{{ tag.name }}</h3>
+ <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 %}
@@ -36,7 +36,7 @@
<h2>{% firstof library.grouper "Built-in tags" %}</h2>
<ul>
{% for tag in library.list|dictsort:"name" %}
- <li><a href="#{{ tag.name }}">{{ tag.name }}</a></li>
+ <li><a href="#{{ library.grouper|default_if_none:"built_in" }}-{{ tag.name }}">{{ tag.name }}</a></li>
{% endfor %}
</ul>
</div>
diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py
index e154c9299a..5bfa0f7184 100644
--- a/django/contrib/admindocs/views.py
+++ b/django/contrib/admindocs/views.py
@@ -54,7 +54,9 @@ def template_tag_index(request):
load_all_installed_template_libraries()
tags = []
- for module_name, library in template.libraries.items():
+ 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:
@@ -87,7 +89,9 @@ def template_filter_index(request):
load_all_installed_template_libraries()
filters = []
- for module_name, library in template.libraries.items():
+ 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:
diff --git a/django/contrib/auth/decorators.py b/django/contrib/auth/decorators.py
index 09dcf42e42..7d7a0cddb7 100644
--- a/django/contrib/auth/decorators.py
+++ b/django/contrib/auth/decorators.py
@@ -30,13 +30,14 @@ def user_passes_test(test_func, login_url=None, redirect_field_name=REDIRECT_FIE
return decorator
-def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME):
+def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None):
"""
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(),
+ login_url=login_url,
redirect_field_name=redirect_field_name
)
if function:
diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py
index 086acf3349..cc0f7071c3 100644
--- a/django/contrib/auth/forms.py
+++ b/django/contrib/auth/forms.py
@@ -52,6 +52,12 @@ class UserChangeForm(forms.ModelForm):
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
@@ -111,7 +117,7 @@ class PasswordResetForm(forms.Form):
return email
def save(self, domain_override=None, email_template_name='registration/password_reset_email.html',
- use_https=False, token_generator=default_token_generator):
+ use_https=False, token_generator=default_token_generator, from_email=None):
"""
Generates a one-use only link for resetting password and sends to the user
"""
@@ -134,7 +140,7 @@ class PasswordResetForm(forms.Form):
'protocol': use_https and 'https' or 'http',
}
send_mail(_("Password reset on %s") % site_name,
- t.render(Context(c)), None, [user.email])
+ t.render(Context(c)), from_email, [user.email])
class SetPasswordForm(forms.Form):
"""
diff --git a/django/contrib/auth/tests/__init__.py b/django/contrib/auth/tests/__init__.py
index 965ea2d6be..a1d02b6014 100644
--- a/django/contrib/auth/tests/__init__.py
+++ b/django/contrib/auth/tests/__init__.py
@@ -1,7 +1,7 @@
from django.contrib.auth.tests.auth_backends import BackendTest, RowlevelBackendTest, AnonymousUserBackendTest, NoAnonymousUserBackendTest
from django.contrib.auth.tests.basic import BASIC_TESTS
from django.contrib.auth.tests.decorators import LoginRequiredTestCase
-from django.contrib.auth.tests.forms import FORM_TESTS
+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
@@ -13,6 +13,5 @@ from django.contrib.auth.tests.views \
__test__ = {
'BASIC_TESTS': BASIC_TESTS,
- 'FORM_TESTS': FORM_TESTS,
'TOKEN_GENERATOR_TESTS': TOKEN_GENERATOR_TESTS,
}
diff --git a/django/contrib/auth/tests/decorators.py b/django/contrib/auth/tests/decorators.py
index 7efd9d8ccf..0240a76eb7 100644
--- a/django/contrib/auth/tests/decorators.py
+++ b/django/contrib/auth/tests/decorators.py
@@ -1,12 +1,12 @@
-from unittest import TestCase
-
from django.contrib.auth.decorators import login_required
+from django.contrib.auth.tests.views import AuthViewsTestCase
-
-class LoginRequiredTestCase(TestCase):
+class LoginRequiredTestCase(AuthViewsTestCase):
"""
Tests the login_required decorators
"""
+ urls = 'django.contrib.auth.tests.urls'
+
def testCallable(self):
"""
Check that login_required is assignable to callable objects.
@@ -22,4 +22,24 @@ class LoginRequiredTestCase(TestCase):
"""
def normal_view(request):
pass
- login_required(normal_view) \ No newline at end of file
+ login_required(normal_view)
+
+ def testLoginRequired(self, view_url='/login_required/', login_url='/login/'):
+ """
+ Check that login_required works on a simple view wrapped in a
+ login_required decorator.
+ """
+ response = self.client.get(view_url)
+ self.assertEqual(response.status_code, 302)
+ self.assert_(login_url in response['Location'])
+ self.login()
+ response = self.client.get(view_url)
+ self.assertEqual(response.status_code, 200)
+
+ def testLoginRequiredNextUrl(self):
+ """
+ Check that login_required works on a simple view wrapped in a
+ login_required decorator with a login_url set.
+ """
+ self.testLoginRequired(view_url='/login_required_login_url/',
+ login_url='/somewhere/') \ No newline at end of file
diff --git a/django/contrib/auth/tests/forms.py b/django/contrib/auth/tests/forms.py
index b691c560be..5aa49e09c3 100644
--- a/django/contrib/auth/tests/forms.py
+++ b/django/contrib/auth/tests/forms.py
@@ -1,231 +1,252 @@
-
-FORM_TESTS = """
->>> from django.contrib.auth.models import User
->>> from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
->>> from django.contrib.auth.forms import PasswordChangeForm, SetPasswordForm
-
-# The user already exists.
-
->>> user = User.objects.create_user("jsmith", "jsmith@example.com", "test123")
->>> data = {
-... 'username': 'jsmith',
-... 'password1': 'test123',
-... 'password2': 'test123',
-... }
->>> form = UserCreationForm(data)
->>> form.is_valid()
-False
->>> form["username"].errors
-[u'A user with that username already exists.']
-
-# The username contains invalid data.
-
->>> data = {
-... 'username': 'jsmith!',
-... 'password1': 'test123',
-... 'password2': 'test123',
-... }
->>> form = UserCreationForm(data)
->>> form.is_valid()
-False
->>> form["username"].errors
-[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
-
-# The verification password is incorrect.
-
->>> data = {
-... 'username': 'jsmith2',
-... 'password1': 'test123',
-... 'password2': 'test',
-... }
->>> form = UserCreationForm(data)
->>> form.is_valid()
-False
->>> form["password2"].errors
-[u"The two password fields didn't match."]
-
-# One (or both) passwords weren't given
-
->>> data = {'username': 'jsmith2'}
->>> form = UserCreationForm(data)
->>> form.is_valid()
-False
->>> form['password1'].errors
-[u'This field is required.']
->>> form['password2'].errors
-[u'This field is required.']
-
->>> data['password2'] = 'test123'
->>> form = UserCreationForm(data)
->>> form.is_valid()
-False
->>> form['password1'].errors
-[u'This field is required.']
-
-# The success case.
-
->>> data = {
-... 'username': 'jsmith2@example.com',
-... 'password1': 'test123',
-... 'password2': 'test123',
-... }
->>> form = UserCreationForm(data)
->>> form.is_valid()
-True
->>> form.save()
-<User: jsmith2@example.com>
-
-# The user submits an invalid username.
-
->>> data = {
-... 'username': 'jsmith_does_not_exist',
-... 'password': 'test123',
-... }
-
->>> form = AuthenticationForm(None, data)
->>> form.is_valid()
-False
->>> form.non_field_errors()
-[u'Please enter a correct username and password. Note that both fields are case-sensitive.']
-
-# The user is inactive.
-
->>> data = {
-... 'username': 'jsmith',
-... 'password': 'test123',
-... }
->>> user.is_active = False
->>> user.save()
->>> form = AuthenticationForm(None, data)
->>> form.is_valid()
-False
->>> form.non_field_errors()
-[u'This account is inactive.']
-
->>> user.is_active = True
->>> user.save()
-
-# The success case
-
->>> form = AuthenticationForm(None, data)
->>> form.is_valid()
-True
->>> form.non_field_errors()
-[]
-
-### SetPasswordForm:
-
-# The two new passwords do not match.
-
->>> data = {
-... 'new_password1': 'abc123',
-... 'new_password2': 'abc',
-... }
->>> form = SetPasswordForm(user, data)
->>> form.is_valid()
-False
->>> form["new_password2"].errors
-[u"The two password fields didn't match."]
-
-# The success case.
-
->>> data = {
-... 'new_password1': 'abc123',
-... 'new_password2': 'abc123',
-... }
->>> form = SetPasswordForm(user, data)
->>> form.is_valid()
-True
-
-### PasswordChangeForm:
-
-The old password is incorrect.
-
->>> data = {
-... 'old_password': 'test',
-... 'new_password1': 'abc123',
-... 'new_password2': 'abc123',
-... }
->>> form = PasswordChangeForm(user, data)
->>> form.is_valid()
-False
->>> form["old_password"].errors
-[u'Your old password was entered incorrectly. Please enter it again.']
-
-# The two new passwords do not match.
-
->>> data = {
-... 'old_password': 'test123',
-... 'new_password1': 'abc123',
-... 'new_password2': 'abc',
-... }
->>> form = PasswordChangeForm(user, data)
->>> form.is_valid()
-False
->>> form["new_password2"].errors
-[u"The two password fields didn't match."]
-
-# The success case.
-
->>> data = {
-... 'old_password': 'test123',
-... 'new_password1': 'abc123',
-... 'new_password2': 'abc123',
-... }
->>> form = PasswordChangeForm(user, data)
->>> form.is_valid()
-True
-
-# Regression test - check the order of fields:
-
->>> PasswordChangeForm(user, {}).fields.keys()
-['old_password', 'new_password1', 'new_password2']
-
-### UserChangeForm
-
->>> from django.contrib.auth.forms import UserChangeForm
->>> data = {'username': 'not valid'}
->>> form = UserChangeForm(data, instance=user)
->>> form.is_valid()
-False
->>> form['username'].errors
-[u'This value may contain only letters, numbers and @/./+/-/_ characters.']
-
-
-### PasswordResetForm
-
->>> from django.contrib.auth.forms import PasswordResetForm
->>> data = {'email':'not valid'}
->>> form = PasswordResetForm(data)
->>> form.is_valid()
-False
->>> form['email'].errors
-[u'Enter a valid e-mail address.']
-
-# Test nonexistant email address
->>> data = {'email':'foo@bar.com'}
->>> form = PasswordResetForm(data)
->>> form.is_valid()
-False
->>> form.errors
-{'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]}
-
-# Test cleaned_data bug fix
->>> user = User.objects.create_user("jsmith3", "jsmith3@example.com", "test123")
->>> data = {'email':'jsmith3@example.com'}
->>> form = PasswordResetForm(data)
->>> form.is_valid()
-True
->>> form.cleaned_data['email']
-u'jsmith3@example.com'
-
-# 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')
->>> user.email
-'tesT@example.com'
->>> user = User.objects.create_user('forms_test3', 'tesT', 'test')
->>> user.email
-'tesT'
-
-"""
+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/django/contrib/auth/tests/urls.py b/django/contrib/auth/tests/urls.py
index f94b8daa7f..bc2f7e705f 100644
--- a/django/contrib/auth/tests/urls.py
+++ b/django/contrib/auth/tests/urls.py
@@ -1,5 +1,7 @@
from django.conf.urls.defaults import patterns
from django.contrib.auth.urls import urlpatterns
+from django.contrib.auth.views import password_reset
+from django.contrib.auth.decorators import login_required
from django.http import HttpResponse
from django.template import Template, RequestContext
@@ -14,5 +16,8 @@ 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),
+ (r'^password_reset_from_email/$', 'django.contrib.auth.views.password_reset', dict(from_email='staffmember@example.com')),
+ (r'^login_required/$', login_required(password_reset)),
+ (r'^login_required_login_url/$', login_required(password_reset, login_url='/somewhere/')),
)
diff --git a/django/contrib/auth/tests/views.py b/django/contrib/auth/tests/views.py
index d894e6dafd..e20afbc5b0 100644
--- a/django/contrib/auth/tests/views.py
+++ b/django/contrib/auth/tests/views.py
@@ -36,6 +36,16 @@ class AuthViewsTestCase(TestCase):
settings.LANGUAGE_CODE = self.old_LANGUAGE_CODE
settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
+ 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)
+
class PasswordResetTest(AuthViewsTestCase):
def test_email_not_found(self):
@@ -52,6 +62,14 @@ class PasswordResetTest(AuthViewsTestCase):
self.assertEquals(response.status_code, 302)
self.assertEquals(len(mail.outbox), 1)
self.assert_("http://" in mail.outbox[0].body)
+ self.assertEquals(settings.DEFAULT_FROM_EMAIL, mail.outbox[0].from_email)
+
+ def test_email_found_custom_from(self):
+ "Email is sent if a valid email address is provided for password reset when a custom from_email is provided."
+ response = self.client.post('/password_reset_from_email/', {'email': 'staffmember@example.com'})
+ self.assertEquals(response.status_code, 302)
+ self.assertEquals(len(mail.outbox), 1)
+ self.assertEquals("staffmember@example.com", mail.outbox[0].from_email)
def _test_confirm_start(self):
# Start by creating the email
@@ -118,15 +136,6 @@ class PasswordResetTest(AuthViewsTestCase):
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',
@@ -228,16 +237,6 @@ class LoginTest(AuthViewsTestCase):
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)
diff --git a/django/contrib/auth/views.py b/django/contrib/auth/views.py
index b2e875a869..eaa0dbeba2 100644
--- a/django/contrib/auth/views.py
+++ b/django/contrib/auth/views.py
@@ -105,7 +105,7 @@ def redirect_to_login(next, login_url=None, redirect_field_name=REDIRECT_FIELD_N
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):
+ post_reset_redirect=None, from_email=None):
if post_reset_redirect is None:
post_reset_redirect = reverse('django.contrib.auth.views.password_reset_done')
if request.method == "POST":
@@ -114,6 +114,7 @@ def password_reset(request, is_admin_site=False, template_name='registration/pas
opts = {}
opts['use_https'] = request.is_secure()
opts['token_generator'] = token_generator
+ opts['from_email'] = from_email
if is_admin_site:
opts['domain_override'] = request.META['HTTP_HOST']
else:
diff --git a/django/contrib/databrowse/plugins/calendars.py b/django/contrib/databrowse/plugins/calendars.py
index 9bbd02da26..8a08cfd8eb 100644
--- a/django/contrib/databrowse/plugins/calendars.py
+++ b/django/contrib/databrowse/plugins/calendars.py
@@ -60,7 +60,7 @@ class CalendarPlugin(DatabrowsePlugin):
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))
+ field_list.sort(key=lambda k:k.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):
diff --git a/django/contrib/databrowse/plugins/fieldchoices.py b/django/contrib/databrowse/plugins/fieldchoices.py
index 8f77792579..e0c01e95e6 100644
--- a/django/contrib/databrowse/plugins/fieldchoices.py
+++ b/django/contrib/databrowse/plugins/fieldchoices.py
@@ -61,7 +61,7 @@ class FieldChoicePlugin(DatabrowsePlugin):
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))
+ field_list.sort(key=lambda k: k.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):
diff --git a/django/contrib/flatpages/admin.py b/django/contrib/flatpages/admin.py
index b6fdba3d53..1b377e967b 100644
--- a/django/contrib/flatpages/admin.py
+++ b/django/contrib/flatpages/admin.py
@@ -5,11 +5,11 @@ from django.utils.translation import ugettext_lazy as _
class FlatpageForm(forms.ModelForm):
- url = forms.RegexField(label=_("URL"), max_length=100, regex=r'^[-\w/]+$',
+ 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."))
+ " dots, underscores, dashes, slashes or tildes."))
class Meta:
model = FlatPage
diff --git a/django/contrib/flatpages/fixtures/sample_flatpages.json b/django/contrib/flatpages/fixtures/sample_flatpages.json
new file mode 100644
index 0000000000..885af1eb60
--- /dev/null
+++ b/django/contrib/flatpages/fixtures/sample_flatpages.json
@@ -0,0 +1,63 @@
+[
+ {
+ "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": false,
+ "title": "A Nested Flatpage",
+ "url": "/location/flatpage/",
+ "template_name": "",
+ "sites": [
+ 1
+ ],
+ "content": "Isn't it flat and deep!",
+ "enable_comments": false
+ }
+ },
+
+ {
+ "pk": 101,
+ "model": "flatpages.flatpage",
+ "fields": {
+ "registration_required": true,
+ "title": "Sekrit Flatpage",
+ "url": "/sekrit/",
+ "template_name": "",
+ "sites": [
+ 1
+ ],
+ "content": "Isn't it sekrit!",
+ "enable_comments": false
+ }
+ },
+ {
+ "pk": 102,
+ "model": "flatpages.flatpage",
+ "fields": {
+ "registration_required": true,
+ "title": "Sekrit Nested Flatpage",
+ "url": "/location/sekrit/",
+ "template_name": "",
+ "sites": [
+ 1
+ ],
+ "content": "Isn't it sekrit and deep!",
+ "enable_comments": false
+ }
+ }
+] \ No newline at end of file
diff --git a/django/contrib/flatpages/templatetags/__init__.py b/django/contrib/flatpages/templatetags/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/django/contrib/flatpages/templatetags/__init__.py
diff --git a/django/contrib/flatpages/templatetags/flatpages.py b/django/contrib/flatpages/templatetags/flatpages.py
new file mode 100644
index 0000000000..5c76699b79
--- /dev/null
+++ b/django/contrib/flatpages/templatetags/flatpages.py
@@ -0,0 +1,99 @@
+from django import template
+from django.contrib.flatpages.models import FlatPage
+from django.utils.translation import ugettext as _
+from django.conf import settings
+
+
+register = template.Library()
+
+
+class FlatpageNode(template.Node):
+ def __init__(self, context_name, starts_with=None, user=None):
+ self.context_name = context_name
+ if starts_with:
+ self.starts_with = template.Variable(starts_with)
+ else:
+ self.starts_with = None
+ if user:
+ self.user = template.Variable(user)
+ else:
+ self.user = None
+
+ def render(self, context):
+ flatpages = FlatPage.objects.filter(sites__id=settings.SITE_ID)
+ # If a prefix was specified, add a filter
+ if self.starts_with:
+ flatpages = flatpages.filter(
+ url__startswith=self.starts_with.resolve(context))
+
+ # If the provided user is not authenticated, or no user
+ # was provided, filter the list to only public flatpages.
+ if self.user:
+ user = self.user.resolve(context)
+ if not user.is_authenticated():
+ flatpages = flatpages.filter(registration_required=False)
+ else:
+ flatpages = flatpages.filter(registration_required=False)
+
+ context[self.context_name] = flatpages
+ return ''
+
+
+def get_flatpages(parser, token):
+ """
+ Retrieves all flatpage objects available for the current site and
+ visible to the specific user (or visible to all users if no user is
+ specified). Populates the template context with them in a variable
+ whose name is defined by the ``as`` clause.
+
+ An optional ``for`` clause can be used to control the user whose
+ permissions are to be used in determining which flatpages are visible.
+
+ An optional argument, ``starts_with``, can be applied to limit the
+ returned flatpages to those beginning with a particular base URL.
+ This argument can be passed as a variable or a string, as it resolves
+ from the template context.
+
+ Syntax::
+
+ {% get_flatpages ['url_starts_with'] [for user] as context_name %}
+
+ Example usage::
+
+ {% get_flatpages as flatpages %}
+ {% get_flatpages for someuser as flatpages %}
+ {% get_flatpages '/about/' as about_pages %}
+ {% get_flatpages prefix as about_pages %}
+ {% get_flatpages '/about/' for someuser as about_pages %}
+ """
+ bits = token.split_contents()
+ syntax_message = _("%(tag_name)s expects a syntax of %(tag_name)s "
+ "['url_starts_with'] [for user] as context_name" %
+ dict(tag_name=bits[0]))
+ # Must have at 3-6 bits in the tag
+ if len(bits) >= 3 and len(bits) <= 6:
+
+ # If there's an even number of bits, there's no prefix
+ if len(bits) % 2 == 0:
+ prefix = bits[1]
+ else:
+ prefix = None
+
+ # The very last bit must be the context name
+ if bits[-2] != 'as':
+ raise template.TemplateSyntaxError(syntax_message)
+ context_name = bits[-1]
+
+ # If there are 5 or 6 bits, there is a user defined
+ if len(bits) >= 5:
+ if bits[-4] != 'for':
+ raise template.TemplateSyntaxError(syntax_message)
+ user = bits[-3]
+ else:
+ user = None
+
+ return FlatpageNode(context_name, starts_with=prefix, user=user)
+ else:
+ raise template.TemplateSyntaxError(syntax_message)
+
+register.tag('get_flatpages', get_flatpages)
diff --git a/django/contrib/flatpages/tests/__init__.py b/django/contrib/flatpages/tests/__init__.py
new file mode 100644
index 0000000000..5dd5e89dca
--- /dev/null
+++ b/django/contrib/flatpages/tests/__init__.py
@@ -0,0 +1,5 @@
+from django.contrib.flatpages.tests.csrf import *
+from django.contrib.flatpages.tests.forms import *
+from django.contrib.flatpages.tests.middleware import *
+from django.contrib.flatpages.tests.templatetags import *
+from django.contrib.flatpages.tests.views import *
diff --git a/django/contrib/flatpages/tests/csrf.py b/django/contrib/flatpages/tests/csrf.py
new file mode 100644
index 0000000000..b65ee382a6
--- /dev/null
+++ b/django/contrib/flatpages/tests/csrf.py
@@ -0,0 +1,76 @@
+import os
+from django.conf import settings
+from django.contrib.auth.models import User
+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'
+ ),
+ )
+
+ def tearDown(self):
+ settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
+ settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
+
+ 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/')
+ User.objects.create_user('testuser', 'test@example.com', 's3krit')
+ self.client.login(username='testuser',password='s3krit')
+ response = self.client.get('/flatpage_root/sekrit/')
+ self.assertEquals(response.status_code, 200)
+ self.assertContains(response, "<p>Isn't it sekrit!</p>")
+
+ 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/django/contrib/flatpages/tests/forms.py b/django/contrib/flatpages/tests/forms.py
new file mode 100644
index 0000000000..969d347b39
--- /dev/null
+++ b/django/contrib/flatpages/tests/forms.py
@@ -0,0 +1,22 @@
+from django.contrib.flatpages.admin import FlatpageForm
+from django.test import TestCase
+
+class FlatpageAdminFormTests(TestCase):
+ def setUp(self):
+ self.form_data = {
+ 'title': "A test page",
+ 'content': "This is a test",
+ 'sites': [1],
+ }
+
+ def test_flatpage_admin_form_url_validation(self):
+ "The flatpage admin form validates correctly validates urls"
+ self.assertTrue(FlatpageForm(data=dict(url='/new_flatpage/', **self.form_data)).is_valid())
+ self.assertTrue(FlatpageForm(data=dict(url='/some.special~chars/', **self.form_data)).is_valid())
+ self.assertTrue(FlatpageForm(data=dict(url='/some.very_special~chars-here/', **self.form_data)).is_valid())
+
+ self.assertFalse(FlatpageForm(data=dict(url='/a space/', **self.form_data)).is_valid())
+ self.assertFalse(FlatpageForm(data=dict(url='/a % char/', **self.form_data)).is_valid())
+ self.assertFalse(FlatpageForm(data=dict(url='/a ! char/', **self.form_data)).is_valid())
+ self.assertFalse(FlatpageForm(data=dict(url='/a & char/', **self.form_data)).is_valid())
+ self.assertFalse(FlatpageForm(data=dict(url='/a ? char/', **self.form_data)).is_valid())
diff --git a/django/contrib/flatpages/tests/middleware.py b/django/contrib/flatpages/tests/middleware.py
new file mode 100644
index 0000000000..bedaffc8ac
--- /dev/null
+++ b/django/contrib/flatpages/tests/middleware.py
@@ -0,0 +1,67 @@
+import os
+from django.conf import settings
+from django.contrib.auth.models import User
+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'
+ ),
+ )
+
+ def tearDown(self):
+ settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
+ settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
+
+ 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/')
+ User.objects.create_user('testuser', 'test@example.com', 's3krit')
+ self.client.login(username='testuser',password='s3krit')
+ response = self.client.get('/flatpage_root/sekrit/')
+ self.assertEquals(response.status_code, 200)
+ self.assertContains(response, "<p>Isn't it sekrit!</p>")
+
+ 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/')
+ User.objects.create_user('testuser', 'test@example.com', 's3krit')
+ self.client.login(username='testuser',password='s3krit')
+ response = self.client.get('/sekrit/')
+ self.assertEquals(response.status_code, 200)
+ self.assertContains(response, "<p>Isn't it sekrit!</p>")
diff --git a/django/contrib/flatpages/tests/templates/404.html b/django/contrib/flatpages/tests/templates/404.html
new file mode 100644
index 0000000000..5fd5f3cf3b
--- /dev/null
+++ b/django/contrib/flatpages/tests/templates/404.html
@@ -0,0 +1 @@
+<h1>Oh Noes!</h1> \ No newline at end of file
diff --git a/django/contrib/flatpages/tests/templates/flatpages/default.html b/django/contrib/flatpages/tests/templates/flatpages/default.html
new file mode 100644
index 0000000000..1410e17adf
--- /dev/null
+++ b/django/contrib/flatpages/tests/templates/flatpages/default.html
@@ -0,0 +1,10 @@
+<!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>
+<p>{{ flatpage.content }}</p>
+</body>
+</html>
diff --git a/django/contrib/flatpages/tests/templates/registration/login.html b/django/contrib/flatpages/tests/templates/registration/login.html
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/django/contrib/flatpages/tests/templates/registration/login.html
diff --git a/django/contrib/flatpages/tests/templatetags.py b/django/contrib/flatpages/tests/templatetags.py
new file mode 100644
index 0000000000..9f42381c29
--- /dev/null
+++ b/django/contrib/flatpages/tests/templatetags.py
@@ -0,0 +1,134 @@
+import os
+from django.conf import settings
+from django.contrib.auth.models import AnonymousUser, User
+from django.template import Template, Context, TemplateSyntaxError
+from django.test import TestCase
+
+class FlatpageTemplateTagTests(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.me = User.objects.create_user('testuser', 'test@example.com', 's3krit')
+
+ def tearDown(self):
+ settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
+ settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
+
+ def test_get_flatpages_tag(self):
+ "The flatpage template tag retrives unregistered prefixed flatpages by default"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages as flatpages %}"
+ "{% for page in flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context())
+ self.assertEquals(out, "A Flatpage,A Nested Flatpage,")
+
+ def test_get_flatpages_tag_for_anon_user(self):
+ "The flatpage template tag retrives unregistered flatpages for an anonymous user"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages for anonuser as flatpages %}"
+ "{% for page in flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context({
+ 'anonuser': AnonymousUser()
+ }))
+ self.assertEquals(out, "A Flatpage,A Nested Flatpage,")
+
+ def test_get_flatpages_tag_for_user(self):
+ "The flatpage template tag retrives all flatpages for an authenticated user"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages for me as flatpages %}"
+ "{% for page in flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context({
+ 'me': self.me
+ }))
+ self.assertEquals(out, "A Flatpage,A Nested Flatpage,Sekrit Nested Flatpage,Sekrit Flatpage,")
+
+ def test_get_flatpages_with_prefix(self):
+ "The flatpage template tag retrives unregistered prefixed flatpages by default"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages '/location/' as location_flatpages %}"
+ "{% for page in location_flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context())
+ self.assertEquals(out, "A Nested Flatpage,")
+
+ def test_get_flatpages_with_prefix_for_anon_user(self):
+ "The flatpage template tag retrives unregistered prefixed flatpages for an anonymous user"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages '/location/' for anonuser as location_flatpages %}"
+ "{% for page in location_flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context({
+ 'anonuser': AnonymousUser()
+ }))
+ self.assertEquals(out, "A Nested Flatpage,")
+
+ def test_get_flatpages_with_prefix_for_user(self):
+ "The flatpage template tag retrive prefixed flatpages for an authenticated user"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages '/location/' for me as location_flatpages %}"
+ "{% for page in location_flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context({
+ 'me': self.me
+ }))
+ self.assertEquals(out, "A Nested Flatpage,Sekrit Nested Flatpage,")
+
+ def test_get_flatpages_with_variable_prefix(self):
+ "The prefix for the flatpage template tag can be a template variable"
+ out = Template(
+ "{% load flatpages %}"
+ "{% get_flatpages location_prefix as location_flatpages %}"
+ "{% for page in location_flatpages %}"
+ "{{ page.title }},"
+ "{% endfor %}"
+ ).render(Context({
+ 'location_prefix': '/location/'
+ }))
+ self.assertEquals(out, "A Nested Flatpage,")
+
+ def test_parsing_errors(self):
+ "There are various ways that the flatpages template tag won't parse"
+ render = lambda t: Template(t).render(Context())
+
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages %}")
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages as %}")
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages cheesecake flatpages %}")
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages as flatpages asdf%}")
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages cheesecake user as flatpages %}")
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages for user as flatpages asdf%}")
+ self.assertRaises(TemplateSyntaxError, render,
+ "{% load flatpages %}{% get_flatpages prefix for user as flatpages asdf%}")
+
diff --git a/django/contrib/flatpages/tests/urls.py b/django/contrib/flatpages/tests/urls.py
new file mode 100644
index 0000000000..3cffd09d0f
--- /dev/null
+++ b/django/contrib/flatpages/tests/urls.py
@@ -0,0 +1,8 @@
+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/django/contrib/flatpages/tests/views.py b/django/contrib/flatpages/tests/views.py
new file mode 100644
index 0000000000..89bdde2d92
--- /dev/null
+++ b/django/contrib/flatpages/tests/views.py
@@ -0,0 +1,72 @@
+import os
+from django.conf import settings
+from django.contrib.auth.models import User
+from django.contrib.flatpages.models import FlatPage
+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'
+ ),
+ )
+
+ def tearDown(self):
+ settings.MIDDLEWARE_CLASSES = self.old_MIDDLEWARE_CLASSES
+ settings.TEMPLATE_DIRS = self.old_TEMPLATE_DIRS
+
+ 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/')
+ User.objects.create_user('testuser', 'test@example.com', 's3krit')
+ self.client.login(username='testuser',password='s3krit')
+ response = self.client.get('/flatpage_root/sekrit/')
+ self.assertEquals(response.status_code, 200)
+ self.assertContains(response, "<p>Isn't it sekrit!</p>")
+
+ 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)
+
+ def test_view_flatpage_special_chars(self):
+ "A flatpage with special chars in the URL can be served through a view"
+ fp = FlatPage.objects.create(
+ url="/some.very_special~chars-here/",
+ title="A very special page",
+ content="Isn't it special!",
+ enable_comments=False,
+ registration_required=False,
+ )
+ fp.sites.add(1)
+
+ response = self.client.get('/flatpage_root/some.very_special~chars-here/')
+ self.assertEquals(response.status_code, 200)
+ self.assertContains(response, "<p>Isn't it special!</p>")
diff --git a/django/contrib/flatpages/views.py b/django/contrib/flatpages/views.py
index 336600328d..88ef4da65e 100644
--- a/django/contrib/flatpages/views.py
+++ b/django/contrib/flatpages/views.py
@@ -13,10 +13,13 @@ DEFAULT_TEMPLATE = 'flatpages/default.html'
# 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 %}.
-@csrf_protect
+# 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):
"""
- Flat page view.
+ Public interface to the flat page view.
Models: `flatpages.flatpages`
Templates: Uses the template defined by the ``template_name`` field,
@@ -30,6 +33,13 @@ def flatpage(request, url):
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():
diff --git a/django/contrib/formtools/wizard.py b/django/contrib/formtools/wizard.py
index 02d8fd71d4..32e27df574 100644
--- a/django/contrib/formtools/wizard.py
+++ b/django/contrib/formtools/wizard.py
@@ -27,7 +27,7 @@ class FormWizard(object):
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[:]
@@ -37,7 +37,7 @@ class FormWizard(object):
self.extra_context = {}
# A zero-based counter keeping track of which step we're in.
- self.step = 0
+ self.step = 0
def __repr__(self):
return "step: %d\nform_list: %s\ninitial_data: %s" % (self.step, self.form_list, self.initial)
@@ -48,7 +48,7 @@ class FormWizard(object):
def num_steps(self):
"Helper method that returns the number of steps."
- # You might think we should just set "self.form_list = len(form_list)"
+ # 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)
diff --git a/django/contrib/gis/db/backends/mysql/creation.py b/django/contrib/gis/db/backends/mysql/creation.py
index 93fd2e6166..dda77ea6ab 100644
--- a/django/contrib/gis/db/backends/mysql/creation.py
+++ b/django/contrib/gis/db/backends/mysql/creation.py
@@ -6,7 +6,7 @@ class MySQLCreation(DatabaseCreation):
from django.contrib.gis.db.models.fields import GeometryField
output = super(MySQLCreation, self).sql_indexes_for_field(model, f, style)
- if isinstance(f, GeometryField):
+ 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)
diff --git a/django/contrib/gis/db/backends/postgis/operations.py b/django/contrib/gis/db/backends/postgis/operations.py
index b1a9e31529..5affcf9a18 100644
--- a/django/contrib/gis/db/backends/postgis/operations.py
+++ b/django/contrib/gis/db/backends/postgis/operations.py
@@ -233,8 +233,6 @@ class PostGISOperations(DatabaseOperations, BaseSpatialOperations):
})
self.geography_operators = {
'bboverlaps' : PostGISOperator('&&'),
- 'exact' : PostGISOperator('~='),
- 'same_as' : PostGISOperator('~='),
}
# Creating a dictionary lookup of all GIS terms for PostGIS.
diff --git a/django/contrib/gis/db/backends/spatialite/base.py b/django/contrib/gis/db/backends/spatialite/base.py
index d419dab5e1..729fc152e7 100644
--- a/django/contrib/gis/db/backends/spatialite/base.py
+++ b/django/contrib/gis/db/backends/spatialite/base.py
@@ -51,7 +51,7 @@ class DatabaseWrapper(SqliteDatabaseWrapper):
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_created.send(sender=self.__class__, connection=self)
## From here on, customized for GeoDjango ##
diff --git a/django/contrib/gis/db/models/sql/compiler.py b/django/contrib/gis/db/models/sql/compiler.py
index 78eeeafe19..55dc4a66ec 100644
--- a/django/contrib/gis/db/models/sql/compiler.py
+++ b/django/contrib/gis/db/models/sql/compiler.py
@@ -95,7 +95,7 @@ class GeoSQLCompiler(compiler.SQLCompiler):
return result
def get_default_columns(self, with_aliases=False, col_aliases=None,
- start_alias=None, opts=None, as_pairs=False):
+ 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
@@ -121,6 +121,8 @@ class GeoSQLCompiler(compiler.SQLCompiler):
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]
diff --git a/django/contrib/gis/gdal/libgdal.py b/django/contrib/gis/gdal/libgdal.py
index 6589c5647c..a7a5658c49 100644
--- a/django/contrib/gis/gdal/libgdal.py
+++ b/django/contrib/gis/gdal/libgdal.py
@@ -14,10 +14,10 @@ if lib_path:
lib_names = None
elif os.name == 'nt':
# Windows NT shared library
- lib_names = ['gdal16', 'gdal15']
+ lib_names = ['gdal17', 'gdal16', 'gdal15']
elif os.name == 'posix':
# *NIX library names.
- lib_names = ['gdal', 'GDAL', 'gdal1.6.0', 'gdal1.5.0', 'gdal1.4.0']
+ lib_names = ['gdal', 'GDAL', 'gdal1.7.0', 'gdal1.6.0', 'gdal1.5.0', 'gdal1.4.0']
else:
raise OGRException('Unsupported OS "%s"' % os.name)
diff --git a/django/contrib/gis/tests/__init__.py b/django/contrib/gis/tests/__init__.py
index 0d862190c0..44d62c2a98 100644
--- a/django/contrib/gis/tests/__init__.py
+++ b/django/contrib/gis/tests/__init__.py
@@ -1,115 +1,108 @@
import sys
+import unittest
+
+from django.conf import settings
+from django.db.models import get_app
+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 geo_suite():
- """
- Builds a test suite for the GIS package. This is not named
- `suite` so it will not interfere with the Django test suite (since
- spatial database tables are required to execute these tests on
- some backends).
- """
- from django.conf import settings
- from django.contrib.gis.geos import GEOS_PREPARE
- from django.contrib.gis.gdal import HAS_GDAL
- from django.contrib.gis.utils import HAS_GEOIP
- from django.contrib.gis.tests.utils import postgis, mysql
- from django.db import connection
- from django.utils.importlib import import_module
-
- gis_tests = []
-
- # Adding the GEOS tests.
- from django.contrib.gis.geos import tests as geos_tests
- gis_tests.append(geos_tests.suite())
-
- # Tests that require use of a spatial database (e.g., creation of models)
- test_apps = ['geoapp', 'relatedapp']
- if postgis and connection.ops.geography:
- # Test geography support with PostGIS 1.5+.
- test_apps.append('geogapp')
-
- # Tests that do not require setting up and tearing down a spatial database.
- test_suite_names = [
- 'test_measure',
- ]
-
- if HAS_GDAL:
- # These tests require GDAL.
- if not mysql:
- test_apps.append('distapp')
-
- # Only PostGIS using GEOS 3.1+ can support 3D so far.
- if postgis and GEOS_PREPARE:
- test_apps.append('geo3d')
-
- test_suite_names.extend(['test_spatialrefsys', 'test_geoforms'])
- test_apps.append('layermap')
+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)
+
+class GeoDjangoTestSuiteRunner(DjangoTestSuiteRunner):
+
+ def setup_test_environment(self, **kwargs):
+ super(GeoDjangoTestSuiteRunner, self).setup_test_environment(**kwargs)
- # Adding the GDAL tests.
- from django.contrib.gis.gdal import tests as gdal_tests
- gis_tests.append(gdal_tests.suite())
- else:
- print >>sys.stderr, "GDAL not available - no tests requiring GDAL will be run."
-
- if HAS_GEOIP and hasattr(settings, 'GEOIP_PATH'):
- test_suite_names.append('test_geoip')
-
- # Adding the rest of the suites from the modules specified
- # in the `test_suite_names`.
- for suite_name in test_suite_names:
- tsuite = import_module('django.contrib.gis.tests.' + suite_name)
- gis_tests.append(tsuite.suite())
-
- return gis_tests, test_apps
-
-def run_gis_tests(test_labels, **kwargs):
- """
- Use this routine as the TEST_RUNNER in your settings in order to run the
- GeoDjango test suite. This must be done as a database superuser for
- PostGIS, so read the docstring in `run_test()` below for more details.
- """
- from django.conf import settings
- from django.db.models import loading
- from django.contrib.gis.tests.utils import mysql
-
- # Getting initial values.
- old_installed = settings.INSTALLED_APPS
- old_root_urlconf = settings.ROOT_URLCONF
-
- # Overridding the INSTALLED_APPS with only what we need,
- # to prevent unnecessary database table creation.
- new_installed = ['django.contrib.sites',
- 'django.contrib.sitemaps',
- 'django.contrib.gis',
- ]
-
- # Setting the URLs.
- settings.ROOT_URLCONF = 'django.contrib.gis.tests.urls'
-
- # Creating the test suite, adding the test models to INSTALLED_APPS
- # so they will be tested.
- gis_tests, test_apps = geo_suite()
- for test_model in test_apps:
- module_name = 'django.contrib.gis.tests.%s' % test_model
- new_installed.append(module_name)
-
- # Resetting the loaded flag to take into account what we appended to
- # the INSTALLED_APPS (since this routine is invoked through
- # django/core/management, it caches the apps; this ensures that syncdb
- # will see our appended models)
- settings.INSTALLED_APPS = new_installed
- loading.cache.loaded = False
-
- kwargs['extra_tests'] = gis_tests
-
- # Running the tests using the GIS test runner.
- result = run_tests(test_labels, **kwargs)
-
- # Restoring modified settings.
- settings.INSTALLED_APPS = old_installed
- settings.ROOT_URLCONF = old_root_urlconf
-
- return result
+ from django.db import connection
+ from django.contrib.gis.geos import GEOS_PREPARE
+ from django.contrib.gis.gdal import HAS_GDAL
+
+ # Getting and storing the original values of INSTALLED_APPS and
+ # the ROOT_URLCONF.
+ self.old_installed = settings.INSTALLED_APPS
+ self.old_root_urlconf = settings.ROOT_URLCONF
+
+ # Tests that require use of a spatial database (e.g., creation of models)
+ self.geo_apps = ['geoapp', 'relatedapp']
+ if connection.ops.postgis and connection.ops.geography:
+ # Test geography support with PostGIS 1.5+.
+ self.geo_apps.append('geogapp')
+
+ if HAS_GDAL:
+ # The following GeoDjango test apps depend on GDAL support.
+ if not connection.ops.mysql:
+ self.geo_apps.append('distapp')
+
+ # 3D apps use LayerMapping, which uses GDAL.
+ if connection.ops.postgis and GEOS_PREPARE:
+ self.geo_apps.append('geo3d')
+
+ self.geo_apps.append('layermap')
+
+ # Constructing the new INSTALLED_APPS, and including applications
+ # within the GeoDjango test namespace (`self.geo_apps`).
+ new_installed = ['django.contrib.sites',
+ 'django.contrib.sitemaps',
+ 'django.contrib.gis',
+ ]
+ new_installed.extend(['django.contrib.gis.tests.%s' % app
+ for app in self.geo_apps])
+ settings.INSTALLED_APPS = new_installed
+
+ # Setting the URLs.
+ settings.ROOT_URLCONF = 'django.contrib.gis.tests.urls'
+
+ 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
+
+ def build_suite(self, test_labels, extra_tests=None, **kwargs):
+ """
+ This method is overridden to construct a suite consisting only of tests
+ for GeoDjango.
+ """
+ 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.
+ for app_name in self.geo_apps:
+ suite.addTest(build_suite(get_app(app_name)))
+
+ return suite
diff --git a/django/contrib/gis/tests/geogapp/tests.py b/django/contrib/gis/tests/geogapp/tests.py
index 7be5193103..3dea930afd 100644
--- a/django/contrib/gis/tests/geogapp/tests.py
+++ b/django/contrib/gis/tests/geogapp/tests.py
@@ -44,6 +44,10 @@ class GeographyTest(TestCase):
# `@` 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,
diff --git a/django/contrib/gis/tests/relatedapp/models.py b/django/contrib/gis/tests/relatedapp/models.py
index 726f9826c0..2e9a62b61f 100644
--- a/django/contrib/gis/tests/relatedapp/models.py
+++ b/django/contrib/gis/tests/relatedapp/models.py
@@ -38,6 +38,11 @@ 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)
diff --git a/django/contrib/gis/tests/relatedapp/tests.py b/django/contrib/gis/tests/relatedapp/tests.py
index 184b65b9c7..5d3d00f08d 100644
--- a/django/contrib/gis/tests/relatedapp/tests.py
+++ b/django/contrib/gis/tests/relatedapp/tests.py
@@ -4,7 +4,7 @@ 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, postgis, spatialite, no_mysql, no_oracle, no_spatialite
from django.conf import settings
-from models import City, Location, DirectoryEntry, Parcel, Book, Author
+from models import City, Location, DirectoryEntry, Parcel, Book, Author, Article
cities = (('Aurora', 'TX', -97.516111, 33.058333),
('Roswell', 'NM', -104.528056, 33.387222),
@@ -291,6 +291,14 @@ class RelatedGeoModelTest(unittest.TestCase):
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.
def suite():
diff --git a/django/contrib/localflavor/in_/in_states.py b/django/contrib/localflavor/in_/in_states.py
index 498efe7069..bb4a7482ca 100644
--- a/django/contrib/localflavor/in_/in_states.py
+++ b/django/contrib/localflavor/in_/in_states.py
@@ -7,43 +7,43 @@ 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',
+ ('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',
+ ('AN', 'Andaman and Nicobar'),
+ ('CH', 'Chandigarh'),
+ ('DN', 'Dadra and Nagar Haveli'),
+ ('DD', 'Daman and Diu'),
+ ('DL', 'Delhi'),
+ ('LD', 'Lakshadweep'),
+ ('PY', 'Pondicherry'),
)
STATES_NORMALIZED = {
diff --git a/django/contrib/markup/tests.py b/django/contrib/markup/tests.py
index 9a96f8cda4..6a22e530ba 100644
--- a/django/contrib/markup/tests.py
+++ b/django/contrib/markup/tests.py
@@ -22,7 +22,7 @@ Paragraph 2 with "quotes" and @code@"""
t = Template("{{ textile_content|textile }}")
rendered = t.render(Context(locals())).strip()
if textile:
- self.assertEqual(rendered, """<p>Paragraph 1</p>
+ self.assertEqual(rendered.replace('\t', ''), """<p>Paragraph 1</p>
<p>Paragraph 2 with &#8220;quotes&#8221; and <code>code</code></p>""")
else:
diff --git a/django/contrib/sessions/backends/file.py b/django/contrib/sessions/backends/file.py
index 3f6350345f..843edca9cf 100644
--- a/django/contrib/sessions/backends/file.py
+++ b/django/contrib/sessions/backends/file.py
@@ -58,7 +58,7 @@ class SessionStore(SessionBase):
finally:
session_file.close()
except IOError:
- pass
+ self.create()
return session_data
def create(self):
diff --git a/django/contrib/sessions/tests.py b/django/contrib/sessions/tests.py
index f0a3c4ec8c..e645b73817 100644
--- a/django/contrib/sessions/tests.py
+++ b/django/contrib/sessions/tests.py
@@ -1,388 +1,273 @@
-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()
+from datetime import datetime, timedelta
+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
+from django.core.exceptions import ImproperlyConfigured
+from django.test import TestCase
+import shutil
+import tempfile
+import unittest
+
+
+class SessionTestsMixin(object):
+ # This does not inherit from TestCase to avoid any tests being run with this
+ # class, which wouldn't work, and to allow different TestCase subclasses to
+ # be used.
+
+ backend = None # subclasses must specify
+
+ def setUp(self):
+ self.session = self.backend()
+
+ def tearDown(self):
+ # NB: be careful to delete any sessions created; stale sessions fill up
+ # the /tmp (with some backends) and eventually overwhelm it after lots
+ # of runs (think buildbots)
+ self.session.delete()
+
+ def test_new_session(self):
+ self.assertFalse(self.session.modified)
+ self.assertFalse(self.session.accessed)
+
+ def test_get_empty(self):
+ self.assertEqual(self.session.get('cat'), None)
+
+ def test_store(self):
+ self.session['cat'] = "dog"
+ self.assertTrue(self.session.modified)
+ self.assertEqual(self.session.pop('cat'), 'dog')
+
+ def test_pop(self):
+ self.session['some key'] = 'exists'
+ # Need to reset these to pretend we haven't accessed it:
+ self.accessed = False
+ self.modified = False
+
+ self.assertEqual(self.session.pop('some key'), 'exists')
+ self.assertTrue(self.session.accessed)
+ self.assertTrue(self.session.modified)
+ self.assertEqual(self.session.get('some key'), None)
+
+ def test_pop_default(self):
+ self.assertEqual(self.session.pop('some key', 'does not exist'),
+ 'does not exist')
+ self.assertTrue(self.session.accessed)
+ self.assertFalse(self.session.modified)
+
+ def test_setdefault(self):
+ self.assertEqual(self.session.setdefault('foo', 'bar'), 'bar')
+ self.assertEqual(self.session.setdefault('foo', 'baz'), 'bar')
+ self.assertTrue(self.session.accessed)
+ self.assertTrue(self.session.modified)
+
+ def test_update(self):
+ self.session.update({'update key': 1})
+ self.assertTrue(self.session.accessed)
+ self.assertTrue(self.session.modified)
+ self.assertEqual(self.session.get('update key', None), 1)
+
+ def test_has_key(self):
+ self.session['some key'] = 1
+ self.session.modified = False
+ self.session.accessed = False
+ self.assertTrue(self.session.has_key('some key'))
+ self.assertTrue(self.session.accessed)
+ self.assertFalse(self.session.modified)
+
+ def test_values(self):
+ self.assertEqual(self.session.values(), [])
+ self.assertTrue(self.session.accessed)
+ self.session['some key'] = 1
+ self.assertEqual(self.session.values(), [1])
+
+ def test_iterkeys(self):
+ self.session['x'] = 1
+ self.session.modified = False
+ self.session.accessed = False
+ i = self.session.iterkeys()
+ self.assertTrue(hasattr(i, '__iter__'))
+ self.assertTrue(self.session.accessed)
+ self.assertFalse(self.session.modified)
+ self.assertEqual(list(i), ['x'])
+
+ def test_iterkeys(self):
+ self.session['x'] = 1
+ self.session.modified = False
+ self.session.accessed = False
+ i = self.session.itervalues()
+ self.assertTrue(hasattr(i, '__iter__'))
+ self.assertTrue(self.session.accessed)
+ self.assertFalse(self.session.modified)
+ self.assertEqual(list(i), [1])
+
+ def test_iteritems(self):
+ self.session['x'] = 1
+ self.session.modified = False
+ self.session.accessed = False
+ i = self.session.iteritems()
+ self.assertTrue(hasattr(i, '__iter__'))
+ self.assertTrue(self.session.accessed)
+ self.assertFalse(self.session.modified)
+ self.assertEqual(list(i), [('x',1)])
+
+ def test_clear(self):
+ self.session['x'] = 1
+ self.session.modified = False
+ self.session.accessed = False
+ self.assertEqual(self.session.items(), [('x',1)])
+ self.session.clear()
+ self.assertEqual(self.session.items(), [])
+ self.assertTrue(self.session.accessed)
+ self.assertTrue(self.session.modified)
+
+ def test_save(self):
+ self.session.save()
+ self.assertTrue(self.session.exists(self.session.session_key))
+
+ def test_delete(self):
+ self.session.delete(self.session.session_key)
+ self.assertFalse(self.session.exists(self.session.session_key))
+
+ def test_flush(self):
+ self.session['foo'] = 'bar'
+ self.session.save()
+ prev_key = self.session.session_key
+ self.session.flush()
+ self.assertFalse(self.session.exists(prev_key))
+ self.assertNotEqual(self.session.session_key, prev_key)
+ self.assertTrue(self.session.modified)
+ self.assertTrue(self.session.accessed)
+
+ def test_cycle(self):
+ self.session['a'], self.session['b'] = 'c', 'd'
+ self.session.save()
+ prev_key = self.session.session_key
+ prev_data = self.session.items()
+ self.session.cycle_key()
+ self.assertNotEqual(self.session.session_key, prev_key)
+ self.assertEqual(self.session.items(), prev_data)
+
+ def test_invalid_key(self):
+ # Submitting an invalid session key (either by guessing, or if the db has
+ # removed the key) results in a new key being generated.
+ session = self.backend('1')
+ session.save()
+ self.assertNotEqual(session.session_key, '1')
+ self.assertEqual(session.get('cat'), None)
+ session.delete()
+
+ # Custom session expiry
+ def test_default_expiry(self):
+ # A normal session has a max age equal to settings
+ self.assertEqual(self.session.get_expiry_age(), settings.SESSION_COOKIE_AGE)
+
+ # So does a custom session with an idle expiration time of 0 (but it'll
+ # expire at browser close)
+ self.session.set_expiry(0)
+ self.assertEqual(self.session.get_expiry_age(), settings.SESSION_COOKIE_AGE)
+
+ def test_custom_expiry_seconds(self):
+ # Using seconds
+ self.session.set_expiry(10)
+ delta = self.session.get_expiry_date() - datetime.now()
+ self.assertTrue(delta.seconds in (9, 10))
+
+ age = self.session.get_expiry_age()
+ self.assertTrue(age in (9, 10))
+
+ def test_custom_expiry_timedelta(self):
+ # Using timedelta
+ self.session.set_expiry(timedelta(seconds=10))
+ delta = self.session.get_expiry_date() - datetime.now()
+ self.assertTrue(delta.seconds in (9, 10))
+
+ age = self.session.get_expiry_age()
+ self.assertTrue(age in (9, 10))
+
+ def test_custom_expiry_timedelta(self):
+ # Using timedelta
+ self.session.set_expiry(datetime.now() + timedelta(seconds=10))
+ delta = self.session.get_expiry_date() - datetime.now()
+ self.assertTrue(delta.seconds in (9, 10))
+
+ age = self.session.get_expiry_age()
+ self.assertTrue(age in (9, 10))
+
+ def test_custom_expiry_reset(self):
+ self.session.set_expiry(None)
+ self.session.set_expiry(10)
+ self.session.set_expiry(None)
+ self.assertEqual(self.session.get_expiry_age(), settings.SESSION_COOKIE_AGE)
+
+ def test_get_expire_at_browser_close(self):
+ # Tests get_expire_at_browser_close with different settings and different
+ # set_expiry calls
+ try:
+ try:
+ original_expire_at_browser_close = settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
+ settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False
+
+ self.session.set_expiry(10)
+ self.assertFalse(self.session.get_expire_at_browser_close())
+
+ self.session.set_expiry(0)
+ self.assertTrue(self.session.get_expire_at_browser_close())
+
+ self.session.set_expiry(None)
+ self.assertFalse(self.session.get_expire_at_browser_close())
+
+ settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True
+
+ self.session.set_expiry(10)
+ self.assertFalse(self.session.get_expire_at_browser_close())
+
+ self.session.set_expiry(0)
+ self.assertTrue(self.session.get_expire_at_browser_close())
+
+ self.session.set_expiry(None)
+ self.assertTrue(self.session.get_expire_at_browser_close())
+
+ except:
+ raise
+ finally:
+ settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = original_expire_at_browser_close
+
+
+class DatabaseSessionTests(SessionTestsMixin, TestCase):
+
+ backend = DatabaseSession
+
+
+class CacheDBSessionTests(SessionTestsMixin, TestCase):
+
+ backend = CacheDBSession
+
+# Don't need DB flushing for these tests, so can use unittest.TestCase as base class
+class FileSessionTests(SessionTestsMixin, unittest.TestCase):
+
+ backend = FileSession
+
+ def setUp(self):
+ super(FileSessionTests, self).setUp()
+ # Do file session tests in an isolated directory, and kill it after we're done.
+ self.original_session_file_path = settings.SESSION_FILE_PATH
+ self.temp_session_store = settings.SESSION_FILE_PATH = tempfile.mkdtemp()
+
+ def tearDown(self):
+ settings.SESSION_FILE_PATH = self.original_session_file_path
+ shutil.rmtree(self.temp_session_store)
+ super(FileSessionTests, self).tearDown()
+
+ def test_configuration_check(self):
+ # Make sure the file backend checks for a good storage dir
+ settings.SESSION_FILE_PATH = "/if/this/directory/exists/you/have/a/weird/computer"
+ self.assertRaises(ImproperlyConfigured, self.backend)
+
+
+class CacheSessionTests(SessionTestsMixin, unittest.TestCase):
+
+ backend = CacheSession
diff --git a/django/contrib/sitemaps/__init__.py b/django/contrib/sitemaps/__init__.py
index f877317f16..eaa7f85de9 100644
--- a/django/contrib/sitemaps/__init__.py
+++ b/django/contrib/sitemaps/__init__.py
@@ -65,11 +65,12 @@ class Sitemap(object):
urls = []
for item in self.paginator.page(page).object_list:
loc = "http://%s%s" % (current_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': self.__get('priority', item, None)
+ 'priority': str(priority is not None and priority or '')
}
urls.append(url_info)
return urls
@@ -78,7 +79,7 @@ class FlatPageSitemap(Sitemap):
def items(self):
from django.contrib.sites.models import Site
current_site = Site.objects.get_current()
- return current_site.flatpage_set.all()
+ return current_site.flatpage_set.filter(registration_required=False)
class GenericSitemap(Sitemap):
priority = None
diff --git a/django/contrib/sitemaps/models.py b/django/contrib/sitemaps/models.py
new file mode 100644
index 0000000000..7ff128fa69
--- /dev/null
+++ b/django/contrib/sitemaps/models.py
@@ -0,0 +1 @@
+# This file intentionally left blank \ No newline at end of file
diff --git a/django/contrib/sitemaps/tests/__init__.py b/django/contrib/sitemaps/tests/__init__.py
new file mode 100644
index 0000000000..c5b483cde2
--- /dev/null
+++ b/django/contrib/sitemaps/tests/__init__.py
@@ -0,0 +1 @@
+from django.contrib.sitemaps.tests.basic import *
diff --git a/django/contrib/sitemaps/tests/basic.py b/django/contrib/sitemaps/tests/basic.py
new file mode 100644
index 0000000000..ad04db258f
--- /dev/null
+++ b/django/contrib/sitemaps/tests/basic.py
@@ -0,0 +1,77 @@
+from datetime import date
+from django.conf import settings
+from django.contrib.auth.models import User
+from django.contrib.flatpages.models import FlatPage
+from django.test import TestCase
+from django.utils.formats import localize
+from django.utils.translation import activate
+
+
+class SitemapTests(TestCase):
+ urls = 'django.contrib.sitemaps.tests.urls'
+
+ def setUp(self):
+ self.old_USE_L10N = settings.USE_L10N
+ # 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
+
+ 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'))
+
+ 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'))
+
+ def test_generic_sitemap(self):
+ "A minimal generic sitemap can be rendered"
+ # Retrieve the sitemap.
+ response = self.client.get('/generic/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/users/testuser/</loc></url>
+</urlset>
+""")
+
+ def test_flatpage_sitemap(self):
+ "Basic FlatPage sitemap test"
+ 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'Public 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)
+
diff --git a/django/contrib/sitemaps/tests/urls.py b/django/contrib/sitemaps/tests/urls.py
new file mode 100644
index 0000000000..6cdba36b02
--- /dev/null
+++ b/django/contrib/sitemaps/tests/urls.py
@@ -0,0 +1,33 @@
+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/django/core/cache/__init__.py b/django/core/cache/__init__.py
index 1b602908cb..680f724f94 100644
--- a/django/core/cache/__init__.py
+++ b/django/core/cache/__init__.py
@@ -18,7 +18,7 @@ See docs/cache.txt for information on the public API.
from cgi import parse_qsl
from django.conf import settings
from django.core import signals
-from django.core.cache.backends.base import InvalidCacheBackendError
+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.
diff --git a/django/core/cache/backends/base.py b/django/core/cache/backends/base.py
index e58267a2e9..83dd461804 100644
--- a/django/core/cache/backends/base.py
+++ b/django/core/cache/backends/base.py
@@ -1,10 +1,18 @@
"Base Cache class."
-from django.core.exceptions import ImproperlyConfigured
+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)
@@ -116,3 +124,21 @@ class BaseCache(object):
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/django/core/cache/backends/db.py b/django/core/cache/backends/db.py
index 3398e6a85b..c4429c80b3 100644
--- a/django/core/cache/backends/db.py
+++ b/django/core/cache/backends/db.py
@@ -1,7 +1,7 @@
"Database cache backend."
from django.core.cache.backends.base import BaseCache
-from django.db import connection, transaction, DatabaseError
+from django.db import connections, router, transaction, DatabaseError
import base64, time
from datetime import datetime
try:
@@ -9,10 +9,31 @@ try:
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 = connection.ops.quote_name(table)
+ 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)
@@ -25,78 +46,100 @@ class CacheClass(BaseCache):
self._cull_frequency = 3
def get(self, key, default=None):
- cursor = connection.cursor()
- cursor.execute("SELECT cache_key, value, expires FROM %s WHERE cache_key = %%s" % self._table, [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()
+
+ 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:
- cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % self._table, [key])
- transaction.commit_unless_managed()
+ 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 = connection.ops.process_clob(row[1])
+ 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
- cursor = connection.cursor()
- cursor.execute("SELECT COUNT(*) FROM %s" % self._table)
+ 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(cursor, now)
+ 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" % self._table, [key])
+ 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" % self._table,
- [encoded, connection.ops.value_to_db_datetime(exp), key])
+ 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)" % self._table,
- [key, encoded, connection.ops.value_to_db_datetime(exp)])
+ 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()
+ transaction.rollback_unless_managed(using=db)
return False
else:
- transaction.commit_unless_managed()
+ transaction.commit_unless_managed(using=db)
return True
def delete(self, key):
- cursor = connection.cursor()
- cursor.execute("DELETE FROM %s WHERE cache_key = %%s" % self._table, [key])
- transaction.commit_unless_managed()
+ 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 = connection.cursor()
- cursor.execute("SELECT cache_key FROM %s WHERE cache_key = %%s and expires > %%s" % self._table,
- [key, connection.ops.value_to_db_datetime(now)])
+ 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, cursor, now):
+ def _cull(self, db, cursor, now):
if self._cull_frequency == 0:
self.clear()
else:
- cursor.execute("DELETE FROM %s WHERE expires < %%s" % self._table,
- [connection.ops.value_to_db_datetime(now)])
- cursor.execute("SELECT COUNT(*) FROM %s" % self._table)
+ 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" % self._table, [num / self._cull_frequency])
- cursor.execute("DELETE FROM %s WHERE cache_key < %%s" % self._table, [cursor.fetchone()[0]])
+ 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):
- cursor = connection.cursor()
- cursor.execute('DELETE FROM %s' % self._table)
+ 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/django/core/cache/backends/dummy.py b/django/core/cache/backends/dummy.py
index 4337484cb1..f73b7408bc 100644
--- a/django/core/cache/backends/dummy.py
+++ b/django/core/cache/backends/dummy.py
@@ -6,22 +6,25 @@ class CacheClass(BaseCache):
def __init__(self, *args, **kwargs):
pass
- def add(self, *args, **kwargs):
+ 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, *args, **kwargs):
- pass
+ def set(self, key, *args, **kwargs):
+ self.validate_key(key)
- def delete(self, *args, **kwargs):
- pass
+ def delete(self, key, *args, **kwargs):
+ self.validate_key(key)
def get_many(self, *args, **kwargs):
return {}
- def has_key(self, *args, **kwargs):
+ def has_key(self, key, *args, **kwargs):
+ self.validate_key(key)
return False
def set_many(self, *args, **kwargs):
diff --git a/django/core/cache/backends/filebased.py b/django/core/cache/backends/filebased.py
index fe833336d0..46e69f3091 100644
--- a/django/core/cache/backends/filebased.py
+++ b/django/core/cache/backends/filebased.py
@@ -32,6 +32,7 @@ class CacheClass(BaseCache):
self._createdir()
def add(self, key, value, timeout=None):
+ self.validate_key(key)
if self.has_key(key):
return False
@@ -39,6 +40,7 @@ class CacheClass(BaseCache):
return True
def get(self, key, default=None):
+ self.validate_key(key)
fname = self._key_to_file(key)
try:
f = open(fname, 'rb')
@@ -56,6 +58,7 @@ class CacheClass(BaseCache):
return default
def set(self, key, value, timeout=None):
+ self.validate_key(key)
fname = self._key_to_file(key)
dirname = os.path.dirname(fname)
@@ -79,6 +82,7 @@ class CacheClass(BaseCache):
pass
def delete(self, key):
+ self.validate_key(key)
try:
self._delete(self._key_to_file(key))
except (IOError, OSError):
@@ -95,6 +99,7 @@ class CacheClass(BaseCache):
pass
def has_key(self, key):
+ self.validate_key(key)
fname = self._key_to_file(key)
try:
f = open(fname, 'rb')
@@ -116,7 +121,7 @@ class CacheClass(BaseCache):
return
try:
- filelist = os.listdir(self._dir)
+ filelist = sorted(os.listdir(self._dir))
except (IOError, OSError):
return
diff --git a/django/core/cache/backends/locmem.py b/django/core/cache/backends/locmem.py
index eff1201b97..fe33d33307 100644
--- a/django/core/cache/backends/locmem.py
+++ b/django/core/cache/backends/locmem.py
@@ -30,6 +30,7 @@ class CacheClass(BaseCache):
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)
@@ -44,6 +45,7 @@ class CacheClass(BaseCache):
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)
@@ -76,6 +78,7 @@ class CacheClass(BaseCache):
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:
@@ -87,6 +90,7 @@ class CacheClass(BaseCache):
self._lock.writer_leaves()
def has_key(self, key):
+ self.validate_key(key)
self._lock.reader_enters()
try:
exp = self._expire_info.get(key)
@@ -127,6 +131,7 @@ class CacheClass(BaseCache):
pass
def delete(self, key):
+ self.validate_key(key)
self._lock.writer_enters()
try:
self._delete(key)
diff --git a/django/core/exceptions.py b/django/core/exceptions.py
index ee6d5fe37b..21be8702fa 100644
--- a/django/core/exceptions.py
+++ b/django/core/exceptions.py
@@ -1,4 +1,9 @@
-"Global Django exceptions"
+"""
+Global Django exception and warning classes.
+"""
+
+class DjangoRuntimeWarning(RuntimeWarning):
+ pass
class ObjectDoesNotExist(Exception):
"The requested object does not exist"
diff --git a/django/core/files/images.py b/django/core/files/images.py
index 55008b548a..228a7118c5 100644
--- a/django/core/files/images.py
+++ b/django/core/files/images.py
@@ -23,23 +23,26 @@ class ImageFile(File):
if not hasattr(self, '_dimensions_cache'):
close = self.closed
self.open()
- self._dimensions_cache = get_image_dimensions(self)
- if close:
- self.close()
+ self._dimensions_cache = get_image_dimensions(self, close=close)
return self._dimensions_cache
-def get_image_dimensions(file_or_path):
- """Returns the (width, height) of an image, given an open file or a path."""
+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()
- close = False
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
@@ -55,3 +58,5 @@ def get_image_dimensions(file_or_path):
finally:
if close:
file.close()
+ else:
+ file.seek(file_pos)
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index 79f6607214..b03c2fd71e 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -137,9 +137,8 @@ class BaseHandler(object):
raise
except: # Handle everything else, including SuspiciousOperation, etc.
# Get the exception info now, in case another exception is thrown later.
- exc_info = sys.exc_info()
receivers = signals.got_request_exception.send(sender=self.__class__, request=request)
- return self.handle_uncaught_exception(request, resolver, exc_info)
+ 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
diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py
index b1e3e17227..17e739600c 100644
--- a/django/core/handlers/modpython.py
+++ b/django/core/handlers/modpython.py
@@ -1,5 +1,6 @@
import os
from pprint import pformat
+from warnings import warn
from django import http
from django.core import signals
@@ -179,6 +180,9 @@ class ModPythonHandler(BaseHandler):
request_class = ModPythonRequest
def __call__(self, req):
+ warn(('The mod_python handler is deprecated; use a WSGI or FastCGI server instead.'),
+ PendingDeprecationWarning)
+
# mod_python fakes the environ, and thus doesn't process SetEnv. This fixes that
os.environ.update(req.subprocess_env)
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index a61b648674..dabde96377 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -250,15 +250,15 @@ class ManagementUtility(object):
"""
try:
app_name = get_commands()[subcommand]
- 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)
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):
diff --git a/django/core/management/base.py b/django/core/management/base.py
index 4016faaa7a..dcd83ff300 100644
--- a/django/core/management/base.py
+++ b/django/core/management/base.py
@@ -118,7 +118,7 @@ class BaseCommand(object):
# Metadata about this command.
option_list = (
make_option('-v', '--verbosity', action='store', dest='verbosity', default='1',
- type='choice', choices=['0', '1', '2'],
+ type='choice', choices=['0', '1', '2', '3'],
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.'),
@@ -213,20 +213,24 @@ class BaseCommand(object):
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 connection
+ # 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():
- print self.style.SQL_KEYWORD(connection.ops.start_transaction_sql())
- print output
+ self.stdout.write(self.style.SQL_KEYWORD(connection.ops.start_transaction_sql()))
+ self.stdout.write(output)
if self.output_transaction:
- print self.style.SQL_KEYWORD("COMMIT;")
+ self.stdout.write(self.style.SQL_KEYWORD("COMMIT;") + '\n')
except CommandError, e:
- sys.stderr.write(smart_str(self.style.ERROR('Error: %s\n' % 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):
@@ -248,7 +252,7 @@ class BaseCommand(object):
error_text = s.read()
raise CommandError("One or more models did not validate:\n%s" % error_text)
if display_num_errors:
- print "%s error%s found" % (num_errors, num_errors != 1 and 's' or '')
+ self.stdout.write("%s error%s found\n" % (num_errors, num_errors != 1 and 's' or ''))
def handle(self, *args, **options):
"""
@@ -390,9 +394,9 @@ def copy_helper(style, app_or_project, name, directory, other_name=''):
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 i, subdir in enumerate(subdirs):
+ for subdir in subdirs[:]:
if subdir.startswith('.'):
- del subdirs[i]
+ subdirs.remove(subdir)
for f in files:
if not f.endswith('.py'):
# Ignore .pyc, .pyo, .py.class etc, as they cause various
diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py
index aaaa5845a5..706bf601f9 100644
--- a/django/core/management/commands/dumpdata.py
+++ b/django/core/management/commands/dumpdata.py
@@ -16,11 +16,15 @@ class Command(BaseCommand):
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).'),
+ help='An appname or appname.ModelName to exclude (use multiple --exclude to exclude multiple apps/models).'),
make_option('-n', '--natural', action='store_true', dest='use_natural_keys', default=False,
help='Use natural keys if they are available.'),
+ make_option('-a', '--all', action='store_true', dest='use_base_manager', default=False,
+ help="Use Django's base manager to dump all models stored in the database, including those that would otherwise be filtered or modified by a custom manager."),
)
- help = 'Output the contents of the database as a fixture of the given format.'
+ help = ("Output the contents of the database as a fixture of the given "
+ "format (using each model's default manager unless --all is "
+ "specified).")
args = '[appname appname.ModelName ...]'
def handle(self, *app_labels, **options):
@@ -30,11 +34,26 @@ class Command(BaseCommand):
indent = options.get('indent',None)
using = options.get('database', DEFAULT_DB_ALIAS)
connection = connections[using]
- exclude = options.get('exclude',[])
+ excludes = 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)
+ use_base_manager = options.get('use_base_manager', False)
+
+ excluded_apps = set()
+ excluded_models = set()
+ for exclude in excludes:
+ if '.' in exclude:
+ app_label, model_name = exclude.split('.', 1)
+ model_obj = get_model(app_label, model_name)
+ if not model_obj:
+ raise CommandError('Unknown model in excludes: %s' % exclude)
+ excluded_models.add(model_obj)
+ else:
+ try:
+ app_obj = get_app(exclude)
+ excluded_apps.add(app_obj)
+ except ImproperlyConfigured:
+ raise CommandError('Unknown app in excludes: %s' % exclude)
if len(app_labels) == 0:
app_list = SortedDict((app, None) for app in get_apps() if app not in excluded_apps)
@@ -47,7 +66,8 @@ class Command(BaseCommand):
app = get_app(app_label)
except ImproperlyConfigured:
raise CommandError("Unknown application: %s" % app_label)
-
+ if app in excluded_apps:
+ continue
model = get_model(app_label, model_label)
if model is None:
raise CommandError("Unknown model: %s.%s" % (app_label, model_label))
@@ -64,6 +84,8 @@ class Command(BaseCommand):
app = get_app(app_label)
except ImproperlyConfigured:
raise CommandError("Unknown application: %s" % app_label)
+ if app in excluded_apps:
+ continue
app_list[app] = None
# Check that the serialization format exists; this is a shortcut to
@@ -79,8 +101,13 @@ class Command(BaseCommand):
# Now collate the objects to be serialized.
objects = []
for model in sort_dependencies(app_list.items()):
+ if model in excluded_models:
+ continue
if not model._meta.proxy and router.allow_syncdb(using, model):
- objects.extend(model._default_manager.using(using).all())
+ if use_base_manager:
+ objects.extend(model._base_manager.using(using).all())
+ else:
+ objects.extend(model._default_manager.using(using).all())
try:
return serializers.serialize(format, objects, indent=indent,
@@ -163,4 +190,4 @@ def sort_dependencies(app_list):
)
model_dependencies = skipped
- return model_list \ No newline at end of file
+ return model_list
diff --git a/django/core/management/commands/flush.py b/django/core/management/commands/flush.py
index 6836fe35ca..093c6db7b9 100644
--- a/django/core/management/commands/flush.py
+++ b/django/core/management/commands/flush.py
@@ -1,7 +1,7 @@
from optparse import make_option
from django.conf import settings
-from django.db import connections, transaction, models, DEFAULT_DB_ALIAS
+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
@@ -66,7 +66,13 @@ The full error: %s""" % (connection.settings_dict['NAME'], e))
# Emit the post sync signal. This allows individual
# applications to respond as if the database had been
# sync'd from scratch.
- emit_post_sync_signal(models.get_models(), verbosity, interactive, db)
+ 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(set(all_models), verbosity, interactive, db)
# Reinstall the initial_data fixture.
kwargs = options.copy()
diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py
index 6212d6151d..0b752b57e2 100644
--- a/django/core/management/commands/loaddata.py
+++ b/django/core/management/commands/loaddata.py
@@ -47,7 +47,8 @@ class Command(BaseCommand):
# Keep a count of the installed objects and fixtures
fixture_count = 0
- object_count = 0
+ loaded_object_count = 0
+ fixture_object_count = 0
models = set()
humanize = lambda dirname: dirname and "'%s'" % dirname or 'absolute path'
@@ -111,11 +112,11 @@ class Command(BaseCommand):
formats = []
if formats:
- if verbosity > 1:
- print "Loading '%s' fixtures..." % fixture_name
+ if verbosity >= 2:
+ self.stdout.write("Loading '%s' fixtures...\n" % fixture_name)
else:
- sys.stderr.write(
- self.style.ERROR("Problem installing fixture '%s': %s is not a known serialization format." %
+ self.stderr.write(
+ self.style.ERROR("Problem installing fixture '%s': %s is not a known serialization format.\n" %
(fixture_name, format)))
transaction.rollback(using=using)
transaction.leave_transaction_management(using=using)
@@ -127,8 +128,8 @@ class Command(BaseCommand):
fixture_dirs = app_fixtures + list(settings.FIXTURE_DIRS) + ['']
for fixture_dir in fixture_dirs:
- if verbosity > 1:
- print "Checking %s for fixtures..." % humanize(fixture_dir)
+ if verbosity >= 2:
+ self.stdout.write("Checking %s for fixtures...\n" % humanize(fixture_dir))
label_found = False
for combo in product([using, None], formats, compression_formats):
@@ -140,34 +141,37 @@ class Command(BaseCommand):
if p
)
- if verbosity > 1:
- print "Trying %s for %s fixture '%s'..." % \
- (humanize(fixture_dir), file_name, fixture_name)
+ if verbosity >= 3:
+ 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()
- print self.style.ERROR("Multiple fixtures named '%s' in %s. Aborting." %
- (fixture_name, humanize(fixture_dir)))
+ self.stderr.write(self.style.ERROR("Multiple fixtures named '%s' in %s. Aborting.\n" %
+ (fixture_name, humanize(fixture_dir))))
transaction.rollback(using=using)
transaction.leave_transaction_management(using=using)
return
else:
fixture_count += 1
objects_in_fixture = 0
- if verbosity > 0:
- print "Installing %s fixture '%s' from %s." % \
- (format, fixture_name, humanize(fixture_dir))
+ loaded_objects_in_fixture = 0
+ if verbosity >= 2:
+ 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__):
- objects_in_fixture += 1
+ loaded_objects_in_fixture += 1
models.add(obj.object.__class__)
obj.save(using=using)
- object_count += objects_in_fixture
+ loaded_object_count += loaded_objects_in_fixture
+ fixture_object_count += objects_in_fixture
label_found = True
except (SystemExit, KeyboardInterrupt):
raise
@@ -179,7 +183,7 @@ class Command(BaseCommand):
if show_traceback:
traceback.print_exc()
else:
- sys.stderr.write(
+ 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)))))
@@ -189,25 +193,25 @@ class Command(BaseCommand):
# If the fixture we loaded contains 0 objects, assume that an
# error was encountered during fixture loading.
if objects_in_fixture == 0:
- sys.stderr.write(
- self.style.ERROR("No fixture data found for '%s'. (File format may be invalid.)" %
+ self.stderr.write(
+ self.style.ERROR("No fixture data found for '%s'. (File format may be invalid.)\n" %
(fixture_name)))
transaction.rollback(using=using)
transaction.leave_transaction_management(using=using)
return
except Exception, e:
- if verbosity > 1:
- print "No %s fixture '%s' in %s." % \
- (format, fixture_name, humanize(fixture_dir))
+ if verbosity >= 2:
+ 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 object_count > 0:
+ if loaded_object_count > 0:
sequence_sql = connection.ops.sequence_reset_sql(self.style, models)
if sequence_sql:
- if verbosity > 1:
- print "Resetting sequences"
+ if verbosity >= 2:
+ self.stdout.write("Resetting sequences\n")
for line in sequence_sql:
cursor.execute(line)
@@ -215,12 +219,17 @@ class Command(BaseCommand):
transaction.commit(using=using)
transaction.leave_transaction_management(using=using)
- if object_count == 0:
- if verbosity > 0:
- print "No fixtures found."
+ if fixture_object_count == 0:
+ if verbosity >= 1:
+ self.stdout.write("No fixtures found.\n")
else:
- if verbosity > 0:
- print "Installed %d object(s) from %d fixture(s)" % (object_count, fixture_count)
+ if verbosity >= 1:
+ 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
diff --git a/django/core/management/commands/syncdb.py b/django/core/management/commands/syncdb.py
index 6f1a198653..835e06f24a 100644
--- a/django/core/management/commands/syncdb.py
+++ b/django/core/management/commands/syncdb.py
@@ -77,10 +77,12 @@ class Command(NoArgsCommand):
)
# Create the tables for each model
+ if verbosity >= 1:
+ print "Creating tables ..."
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:
+ if verbosity >= 3:
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)
@@ -108,12 +110,14 @@ class Command(NoArgsCommand):
# Install custom SQL for the app (but only if this
# is a model we've just created)
+ if verbosity >= 1:
+ print "Installing custom SQL ..."
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:
+ if verbosity >= 2:
print "Installing custom SQL for %s.%s model" % (app_name, model._meta.object_name)
try:
for sql in custom_sql:
@@ -128,16 +132,18 @@ class Command(NoArgsCommand):
else:
transaction.commit_unless_managed(using=db)
else:
- if verbosity >= 2:
+ if verbosity >= 3:
print "No custom SQL for %s.%s model" % (app_name, model._meta.object_name)
+ if verbosity >= 1:
+ print "Installing indexes ..."
# 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:
+ if verbosity >= 2:
print "Installing index for %s.%s model" % (app_name, model._meta.object_name)
try:
for sql in index_sql:
diff --git a/django/core/management/commands/testserver.py b/django/core/management/commands/testserver.py
index 6c75a3e2b6..d3d9698c9a 100644
--- a/django/core/management/commands/testserver.py
+++ b/django/core/management/commands/testserver.py
@@ -4,6 +4,8 @@ from optparse import make_option
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('--addrport', action='store', dest='addrport',
type='string', default='',
help='port number or ipaddr:port to run the server on'),
@@ -18,10 +20,11 @@ class Command(BaseCommand):
from django.db import connection
verbosity = int(options.get('verbosity', 1))
+ interactive = options.get('interactive', True)
addrport = options.get('addrport')
# Create a test database.
- db_name = connection.creation.create_test_db(verbosity=verbosity)
+ db_name = connection.creation.create_test_db(verbosity=verbosity, autoclobber=not interactive)
# Import the fixture data into the test database.
call_command('loaddata', *fixture_labels, **{'verbosity': verbosity})
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index cad57a5d9f..5e565f75d6 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -30,6 +30,40 @@ _prefixes = {}
# Overridden URLconfs for each thread are stored here.
_urlconfs = {}
+class ResolverMatch(object):
+ def __init__(self, func, args, kwargs, url_name=None, app_name=None, namespaces=None):
+ self.func = func
+ self.args = args
+ self.kwargs = kwargs
+ self.app_name = app_name
+ if namespaces:
+ self.namespaces = [x for x in namespaces if x]
+ else:
+ self.namespaces = []
+ if not url_name:
+ if not hasattr(func, '__name__'):
+ # An instance of a callable class
+ url_name = '.'.join([func.__class__.__module__, func.__class__.__name__])
+ else:
+ # A function
+ url_name = '.'.join([func.__module__, func.__name__])
+ self.url_name = url_name
+
+ def namespace(self):
+ return ':'.join(self.namespaces)
+ namespace = property(namespace)
+
+ def view_name(self):
+ return ':'.join([ x for x in [ self.namespace, self.url_name ] if x ])
+ view_name = property(view_name)
+
+ def __getitem__(self, index):
+ return (self.func, self.args, self.kwargs)[index]
+
+ def __repr__(self):
+ return "ResolverMatch(func=%s, args=%s, kwargs=%s, url_name='%s', app_name='%s', namespace='%s')" % (
+ self.func, self.args, self.kwargs, self.url_name, self.app_name, self.namespace)
+
class Resolver404(Http404):
pass
@@ -120,7 +154,7 @@ class RegexURLPattern(object):
# In both cases, pass any extra_kwargs as **kwargs.
kwargs.update(self.default_args)
- return self.callback, args, kwargs
+ return ResolverMatch(self.callback, args, kwargs, self.name)
def _get_callback(self):
if self._callback is not None:
@@ -183,7 +217,8 @@ class RegexURLResolver(object):
else:
bits = normalize(p_pattern)
lookups.appendlist(pattern.callback, (bits, p_pattern))
- lookups.appendlist(pattern.name, (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
@@ -217,17 +252,17 @@ class RegexURLResolver(object):
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])
+ tried.extend([[pattern] + t for t in sub_tried])
else:
- tried.append(pattern.regex.pattern)
+ tried.append([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():
+ for k, v in sub_match.kwargs.iteritems():
sub_match_dict[smart_str(k)] = v
- return sub_match[0], sub_match[1], sub_match_dict
- tried.append(pattern.regex.pattern)
+ return ResolverMatch(sub_match.func, sub_match.args, sub_match_dict, sub_match.url_name, self.app_name or sub_match.app_name, [self.namespace] + sub_match.namespaces)
+ tried.append([pattern])
raise Resolver404({'tried': tried, 'path': new_path})
raise Resolver404({'path' : path})
@@ -249,7 +284,12 @@ class RegexURLResolver(object):
url_patterns = property(_get_url_patterns)
def _resolve_special(self, view_type):
- callback = getattr(self.urlconf_module, 'handler%s' % view_type)
+ callback = getattr(self.urlconf_module, 'handler%s' % view_type, None)
+ if not callback:
+ # No handler specified in file; use default
+ # Lazy import, since urls.defaults imports this file
+ from django.conf.urls import defaults
+ callback = getattr(defaults, 'handler%s' % view_type)
try:
return get_callable(callback), {}
except (ImportError, AttributeError), e:
diff --git a/django/db/__init__.py b/django/db/__init__.py
index 4bae04ab9a..4c4faef694 100644
--- a/django/db/__init__.py
+++ b/django/db/__init__.py
@@ -35,6 +35,8 @@ if DEFAULT_DB_ALIAS not in settings.DATABASES:
raise ImproperlyConfigured("You must default 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:
diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py
index 5918935899..fe2c7c451b 100644
--- a/django/db/backends/__init__.py
+++ b/django/db/backends/__init__.py
@@ -353,6 +353,11 @@ class BaseDatabaseOperations(object):
"""
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
diff --git a/django/db/backends/creation.py b/django/db/backends/creation.py
index 492ac1e3e9..6cdf415f7a 100644
--- a/django/db/backends/creation.py
+++ b/django/db/backends/creation.py
@@ -350,12 +350,17 @@ class BaseDatabaseCreation(object):
can_rollback = self._rollback_works()
self.connection.settings_dict["SUPPORTS_TRANSACTIONS"] = can_rollback
- call_command('syncdb', verbosity=verbosity, interactive=False, database=self.connection.alias)
+ # Report syncdb messages at one level lower than that requested.
+ # This ensures we don't get flooded with messages during testing
+ # (unless you really ask to be flooded)
+ call_command('syncdb', verbosity=max(verbosity - 1, 0), 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)
+ 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.
@@ -388,10 +393,8 @@ class BaseDatabaseCreation(object):
if autoclobber or confirm == 'yes':
try:
if verbosity >= 1:
- print "Destroying old test database..."
+ print "Destroying old test database '%s'..." % self.connection.alias
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)
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index e94e24bff9..a39c41f8d8 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -297,7 +297,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
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_created.send(sender=self.__class__, connection=self)
cursor = CursorWrapper(self.connection.cursor())
return cursor
diff --git a/django/db/backends/mysql/client.py b/django/db/backends/mysql/client.py
index ff5b64d1e0..24dc642abe 100644
--- a/django/db/backends/mysql/client.py
+++ b/django/db/backends/mysql/client.py
@@ -24,7 +24,10 @@ class DatabaseClient(BaseDatabaseClient):
if passwd:
args += ["--password=%s" % passwd]
if host:
- args += ["--host=%s" % host]
+ if '/' in host:
+ args += ["--socket=%s" % host]
+ else:
+ args += ["--host=%s" % host]
if port:
args += ["--port=%s" % port]
if db:
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index 369e65baf7..0cf26c406d 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -384,7 +384,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
# 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_created.send(sender=self.__class__, connection=self)
if not cursor:
cursor = FormatStylePlaceholderCursor(self.connection)
return cursor
diff --git a/django/db/backends/oracle/creation.py b/django/db/backends/oracle/creation.py
index e6e242b9f7..8167640aac 100644
--- a/django/db/backends/oracle/creation.py
+++ b/django/db/backends/oracle/creation.py
@@ -61,8 +61,6 @@ class DatabaseCreation(BaseDatabaseCreation):
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:
@@ -72,10 +70,8 @@ class DatabaseCreation(BaseDatabaseCreation):
if autoclobber or confirm == 'yes':
try:
if verbosity >= 1:
- print "Destroying old test database..."
+ print "Destroying old test database '%s'..." % self.connection.alias
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)
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index a1c858bd8f..f84ad1da61 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -135,8 +135,9 @@ class DatabaseWrapper(BaseDatabaseWrapper):
if settings_dict['PORT']:
conn_string += " port=%s" % settings_dict['PORT']
self.connection = Database.connect(conn_string, **settings_dict['OPTIONS'])
- self.connection.set_isolation_level(1) # make transactions transparent to all cursors
- connection_created.send(sender=self.__class__)
+ # 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:
diff --git a/django/db/backends/postgresql/creation.py b/django/db/backends/postgresql/creation.py
index af26d0b78f..9984716389 100644
--- a/django/db/backends/postgresql/creation.py
+++ b/django/db/backends/postgresql/creation.py
@@ -1,4 +1,5 @@
from django.db.backends.creation import BaseDatabaseCreation
+from django.db.backends.util import truncate_name
class DatabaseCreation(BaseDatabaseCreation):
# This dictionary maps Field objects to their associated PostgreSQL column
@@ -51,7 +52,7 @@ class DatabaseCreation(BaseDatabaseCreation):
def get_index_sql(index_name, opclass=''):
return (style.SQL_KEYWORD('CREATE INDEX') + ' ' +
- style.SQL_TABLE(qn(index_name)) + ' ' +
+ style.SQL_TABLE(qn(truncate_name(index_name,self.connection.ops.max_name_length()))) + ' ' +
style.SQL_KEYWORD('ON') + ' ' +
style.SQL_TABLE(qn(db_table)) + ' ' +
"(%s%s)" % (style.SQL_FIELD(qn(f.column)), opclass) +
@@ -63,7 +64,7 @@ class DatabaseCreation(BaseDatabaseCreation):
# 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()
+ 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'))
diff --git a/django/db/backends/postgresql/operations.py b/django/db/backends/postgresql/operations.py
index 2951c33db9..e8ce3f242b 100644
--- a/django/db/backends/postgresql/operations.py
+++ b/django/db/backends/postgresql/operations.py
@@ -54,7 +54,10 @@ class DatabaseOperations(BaseDatabaseOperations):
return '%s'
def last_insert_id(self, cursor, table_name, pk_name):
- cursor.execute("SELECT CURRVAL('\"%s_%s_seq\"')" % (table_name, pk_name))
+ # Use pg_get_serial_sequence to get the underlying sequence name
+ # from the table name and column name (available since PostgreSQL 8)
+ cursor.execute("SELECT CURRVAL(pg_get_serial_sequence('%s','%s'))" % (
+ self.quote_name(table_name), pk_name))
return cursor.fetchone()[0]
def no_limit_value(self):
@@ -90,13 +93,14 @@ class DatabaseOperations(BaseDatabaseOperations):
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);" % \
+ if not (column_name and len(column_name) > 0):
+ # This will be the case if it's an m2m using an autogenerated
+ # intermediate table (see BaseDatabaseIntrospection.sequence_list)
+ column_name = 'id'
+ sql.append("%s setval(pg_get_serial_sequence('%s','%s'), 1, false);" % \
(style.SQL_KEYWORD('SELECT'),
- style.SQL_FIELD(self.quote_name(sequence_name)))
+ style.SQL_TABLE(self.quote_name(table_name)),
+ style.SQL_FIELD(column_name))
)
return sql
else:
@@ -110,11 +114,15 @@ class DatabaseOperations(BaseDatabaseOperations):
# 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.
+ # Use pg_get_serial_sequence to get the underlying sequence name from the table name
+ # and column name (available since PostgreSQL 8)
+
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;" % \
+ output.append("%s setval(pg_get_serial_sequence('%s','%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_TABLE(qn(model._meta.db_table)),
+ style.SQL_FIELD(f.column),
style.SQL_FIELD(qn(f.column)),
style.SQL_FIELD(qn(f.column)),
style.SQL_KEYWORD('IS NOT'),
@@ -123,9 +131,10 @@ class DatabaseOperations(BaseDatabaseOperations):
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;" % \
+ output.append("%s setval(pg_get_serial_sequence('%s','%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_TABLE(qn(f.m2m_db_table())),
+ style.SQL_FIELD('id'),
style.SQL_FIELD(qn('id')),
style.SQL_FIELD(qn('id')),
style.SQL_KEYWORD('IS NOT'),
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
index 29b7e7ff1a..ce4e48330e 100644
--- a/django/db/backends/postgresql_psycopg2/base.py
+++ b/django/db/backends/postgresql_psycopg2/base.py
@@ -136,7 +136,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
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_created.send(sender=self.__class__, connection=self)
cursor = self.connection.cursor()
cursor.tzinfo_factory = None
if new_connection:
diff --git a/django/db/backends/signals.py b/django/db/backends/signals.py
index a8079d0d76..c16a63f9f6 100644
--- a/django/db/backends/signals.py
+++ b/django/db/backends/signals.py
@@ -1,3 +1,3 @@
from django.dispatch import Signal
-connection_created = Signal()
+connection_created = Signal(providing_args=["connection"])
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index bc97f5cfd8..1ab2557627 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -176,7 +176,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
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_created.send(sender=self.__class__, connection=self)
return self.connection.cursor(factory=SQLiteCursorWrapper)
def close(self):
diff --git a/django/db/backends/sqlite3/creation.py b/django/db/backends/sqlite3/creation.py
index 03897078a2..a65db1160b 100644
--- a/django/db/backends/sqlite3/creation.py
+++ b/django/db/backends/sqlite3/creation.py
@@ -43,14 +43,12 @@ class DatabaseCreation(BaseDatabaseCreation):
if test_database_name and test_database_name != ":memory:":
# Erase the old test database
if verbosity >= 1:
- print "Destroying old test database..."
+ print "Destroying old test database '%s'..." % self.connection.alias
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)
@@ -58,8 +56,6 @@ class DatabaseCreation(BaseDatabaseCreation):
else:
print "Tests cancelled."
sys.exit(1)
- if verbosity >= 1:
- print "Creating test database..."
else:
test_database_name = ":memory:"
return test_database_name
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 6304e009d3..b3deda13d4 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -1,6 +1,5 @@
import types
import sys
-import os
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
@@ -16,7 +15,7 @@ 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, smart_unicode
+from django.utils.encoding import smart_str, force_unicode
from django.utils.text import get_text_list, capfirst
from django.conf import settings
@@ -456,7 +455,7 @@ class Model(object):
meta = cls._meta
if origin and not meta.auto_created:
- signals.pre_save.send(sender=origin, instance=self, raw=raw)
+ signals.pre_save.send(sender=origin, instance=self, raw=raw, using=using)
# 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
@@ -540,7 +539,7 @@ class Model(object):
# 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)
+ created=(not record_exists), raw=raw, using=using)
save_base.alters_data = True
@@ -645,6 +644,8 @@ class Model(object):
return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
+ if not self.pk:
+ raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
op = is_next and 'gt' or 'lt'
order = not is_next and '-' or ''
param = smart_str(getattr(self, field.attname))
@@ -744,11 +745,11 @@ class Model(object):
continue
if f.unique:
unique_checks.append((model_class, (name,)))
- if f.unique_for_date:
+ 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:
+ 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:
+ 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
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 65b60a0173..3c58873035 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -459,6 +459,9 @@ class AutoField(Field):
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
@@ -795,6 +798,14 @@ class EmailField(CharField):
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")
@@ -1105,6 +1116,14 @@ class URLField(CharField):
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")
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 5830a794df..1634d7d974 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -566,7 +566,7 @@ def create_many_related_manager(superclass, rel=False):
# 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)
+ model=self.model, pk_set=new_ids, using=db)
# Add the ones that aren't there already
for obj_id in new_ids:
self.through._default_manager.using(db).create(**{
@@ -578,7 +578,7 @@ def create_many_related_manager(superclass, rel=False):
# 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)
+ model=self.model, pk_set=new_ids, using=db)
def _remove_items(self, source_field_name, target_field_name, *objs):
# source_col_name: the PK colname in join_table for the source object
@@ -594,14 +594,16 @@ def create_many_related_manager(superclass, rel=False):
old_ids.add(obj.pk)
else:
old_ids.add(obj)
+ # Work out what DB we're operating on
+ db = router.db_for_write(self.through.__class__, instance=self.instance)
+ # Send a signal to the other end if need be.
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)
+ model=self.model, pk_set=old_ids, using=db)
# 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
@@ -611,17 +613,17 @@ def create_many_related_manager(superclass, rel=False):
# 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)
+ model=self.model, pk_set=old_ids, using=db)
def _clear_items(self, source_field_name):
+ db = router.db_for_write(self.through.__class__, instance=self.instance)
# 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)
+ model=self.model, pk_set=None, using=db)
self.through._default_manager.using(db).filter(**{
source_field_name: self._pk_val
}).delete()
@@ -630,7 +632,7 @@ def create_many_related_manager(superclass, rel=False):
# 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)
+ model=self.model, pk_set=None, using=db)
return ManyRelatedManager
@@ -812,6 +814,9 @@ class ForeignKey(RelatedField, Field):
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),
@@ -819,8 +824,6 @@ class ForeignKey(RelatedField, Field):
parent_link=kwargs.pop('parent_link', False))
Field.__init__(self, **kwargs)
- self.db_index = True
-
def validate(self, value, model_instance):
if self.rel.parent_link:
return
diff --git a/django/db/models/query.py b/django/db/models/query.py
index d9fbd9b8cb..9ecfb745fd 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1311,7 +1311,8 @@ def delete_objects(seen_objs, using):
# 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)
+ signals.pre_delete.send(sender=cls, instance=instance,
+ using=using)
pk_list = [pk for pk,instance in items]
@@ -1343,7 +1344,7 @@ def delete_objects(seen_objs, using):
setattr(instance, field.attname, None)
if not cls._meta.auto_created:
- signals.post_delete.send(sender=cls, instance=instance)
+ signals.post_delete.send(sender=cls, instance=instance, using=using)
setattr(instance, cls._meta.pk.attname, None)
if forced_managed:
diff --git a/django/db/models/signals.py b/django/db/models/signals.py
index cd0350bc01..48872e7e7f 100644
--- a/django/db/models/signals.py
+++ b/django/db/models/signals.py
@@ -5,12 +5,12 @@ 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_save = Signal(providing_args=["instance", "raw", "using"])
+post_save = Signal(providing_args=["instance", "raw", "created", "using"])
-pre_delete = Signal(providing_args=["instance"])
-post_delete = Signal(providing_args=["instance"])
+pre_delete = Signal(providing_args=["instance", "using"])
+post_delete = Signal(providing_args=["instance", "using"])
post_syncdb = Signal(providing_args=["class", "app", "created_models", "verbosity", "interactive"])
-m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set"])
+m2m_changed = Signal(providing_args=["action", "instance", "reverse", "model", "pk_set", "using"])
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 0913399e2a..ec477447f3 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1090,10 +1090,7 @@ class Query(object):
# 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
- entry = self.where_class()
- entry.add((Constraint(alias, col, None), 'isnull', True), AND)
- entry.negate()
- self.where.add(entry, AND)
+ self.where.add((Constraint(alias, col, None), 'isnull', False), AND)
if can_reuse is not None:
can_reuse.update(join_list)
diff --git a/django/dispatch/__init__.py b/django/dispatch/__init__.py
index 0798acc7db..9aeb83c5e1 100644
--- a/django/dispatch/__init__.py
+++ b/django/dispatch/__init__.py
@@ -6,4 +6,4 @@ See license.txt for original license.
Heavily modified for Django's purposes.
"""
-from django.dispatch.dispatcher import Signal \ No newline at end of file
+from django.dispatch.dispatcher import Signal, receiver \ No newline at end of file
diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py
index de09334637..c4516d88b0 100644
--- a/django/dispatch/dispatcher.py
+++ b/django/dispatch/dispatcher.py
@@ -235,3 +235,19 @@ class Signal(object):
for idx, (r_key, _) in enumerate(self.receivers):
if r_key == key:
del self.receivers[idx]
+
+
+def receiver(signal, **kwargs):
+ """
+ A decorator for connecting receivers to signals. Used by passing in the
+ signal and keyword arguments to connect::
+
+ @receiver(post_save, sender=MyModel)
+ def signal_receiver(sender, **kwargs):
+ ...
+
+ """
+ def _decorator(func):
+ signal.connect(func, **kwargs)
+ return func
+ return _decorator
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 0bae4ba157..de14a5c8a8 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -127,6 +127,9 @@ class Field(object):
self.validators = self.default_validators + validators
+ def prepare_value(self, value):
+ return value
+
def to_python(self, value):
return value
@@ -396,6 +399,8 @@ class DateTimeField(Field):
# 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:
diff --git a/django/forms/forms.py b/django/forms/forms.py
index b3718efa9a..7b2bc66fc7 100644
--- a/django/forms/forms.py
+++ b/django/forms/forms.py
@@ -18,10 +18,10 @@ __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()
+ """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):
"""
@@ -35,7 +35,7 @@ def get_declared_fields(bases, attrs, with_base_fields=True):
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))
+ fields.sort(key=lambda x: x[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
@@ -213,7 +213,7 @@ class BaseForm(StrAndUnicode):
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',
+ help_text_html = u'<br /><span class="helptext">%s</span>',
errors_on_separate_row = False)
def as_ul(self):
@@ -222,7 +222,7 @@ class BaseForm(StrAndUnicode):
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',
+ help_text_html = u' <span class="helptext">%s</span>',
errors_on_separate_row = False)
def as_p(self):
@@ -231,7 +231,7 @@ class BaseForm(StrAndUnicode):
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',
+ help_text_html = u' <span class="helptext">%s</span>',
errors_on_separate_row = True)
def non_field_errors(self):
@@ -423,6 +423,7 @@ class BoundField(StrAndUnicode):
"""
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:
@@ -430,6 +431,7 @@ class BoundField(StrAndUnicode):
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):
@@ -439,6 +441,8 @@ class BoundField(StrAndUnicode):
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:
diff --git a/django/forms/formsets.py b/django/forms/formsets.py
index 3804f2b3c1..508950eee9 100644
--- a/django/forms/formsets.py
+++ b/django/forms/formsets.py
@@ -199,14 +199,12 @@ class BaseFormSet(StrAndUnicode):
# 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)
+ # blank.
+ def compare_ordering_key(k):
+ if k[1] is None:
+ return (1, 0) # +infinity, larger than any number
+ return (0, k[1])
+ self._ordering.sort(key=compare_ordering_key)
# 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]
diff --git a/django/forms/models.py b/django/forms/models.py
index 8accd61f30..cf465ad30c 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -9,7 +9,8 @@ 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.exceptions import ValidationError, NON_FIELD_ERRORS, \
+ FieldError
from django.core.validators import EMPTY_VALUES
from util import ErrorList
from forms import BaseForm, get_declared_fields
@@ -150,7 +151,7 @@ def model_to_dict(instance, fields=None, exclude=None):
data[f.name] = f.value_from_object(instance)
return data
-def fields_for_model(model, fields=None, exclude=None, widgets=None, formfield_callback=lambda f, **kwargs: f.formfield(**kwargs)):
+def fields_for_model(model, fields=None, exclude=None, widgets=None, formfield_callback=None):
"""
Returns a ``SortedDict`` containing form fields for the given model.
@@ -175,7 +176,14 @@ def fields_for_model(model, fields=None, exclude=None, widgets=None, formfield_c
kwargs = {'widget': widgets[f.name]}
else:
kwargs = {}
- formfield = formfield_callback(f, **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:
@@ -198,8 +206,7 @@ class ModelFormOptions(object):
class ModelFormMetaclass(type):
def __new__(cls, name, bases, attrs):
- formfield_callback = attrs.pop('formfield_callback',
- lambda f, **kwargs: f.formfield(**kwargs))
+ formfield_callback = attrs.pop('formfield_callback', None)
try:
parents = [b for b in bases if issubclass(b, ModelForm)]
except NameError:
@@ -218,6 +225,15 @@ class ModelFormMetaclass(type):
# If a model is defined, extract form fields from it.
fields = fields_for_model(opts.model, opts.fields,
opts.exclude, opts.widgets, formfield_callback)
+ # make sure opts.fields doesn't specify an invalid field
+ none_model_fields = [k for k, v in fields.iteritems() if not v]
+ missing_fields = set(none_model_fields) - \
+ set(declared_fields.keys())
+ if missing_fields:
+ message = 'Unknown field(s) (%s) specified for %s'
+ message = message % (', '.join(missing_fields),
+ opts.model.__name__)
+ raise FieldError(message)
# Override default model fields with any custom declared ones
# (plus, include all the other declared fields).
fields.update(declared_fields)
@@ -376,7 +392,7 @@ class ModelForm(BaseModelForm):
__metaclass__ = ModelFormMetaclass
def modelform_factory(model, form=ModelForm, fields=None, exclude=None,
- formfield_callback=lambda f: f.formfield()):
+ 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.
@@ -658,7 +674,7 @@ class BaseModelFormSet(BaseFormSet):
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=lambda f: f.formfield(),
+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):
@@ -813,7 +829,7 @@ 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=lambda f: f.formfield()):
+ formfield_callback=None):
"""
Returns an ``InlineFormSet`` for the given kwargs.
@@ -906,12 +922,7 @@ class ModelChoiceIterator(object):
return len(self.queryset)
def choice(self, obj):
- if self.field.to_field_name:
- key = obj.serializable_value(self.field.to_field_name)
- else:
- key = obj.pk
- return (key, self.field.label_from_instance(obj))
-
+ return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
class ModelChoiceField(ChoiceField):
"""A ChoiceField whose choices are a model QuerySet."""
@@ -971,8 +982,8 @@ class ModelChoiceField(ChoiceField):
return self._choices
# Otherwise, execute the QuerySet in self.queryset to determine the
- # choices dynamically. Return a fresh QuerySetIterator that has not been
- # consumed. Note that we're instantiating a new QuerySetIterator *each*
+ # 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
@@ -981,13 +992,21 @@ class ModelChoiceField(ChoiceField):
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 self.queryset.model.DoesNotExist:
+ except (ValueError, self.queryset.model.DoesNotExist):
raise ValidationError(self.error_messages['invalid_choice'])
return value
@@ -1030,3 +1049,8 @@ class ModelMultipleChoiceField(ModelChoiceField):
if force_unicode(val) not in pks:
raise ValidationError(self.error_messages['invalid_choice'] % val)
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/django/forms/widgets.py b/django/forms/widgets.py
index e3799c69ad..2e16c35d8b 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -229,7 +229,7 @@ class TextInput(Input):
class PasswordInput(Input):
input_type = 'password'
- def __init__(self, attrs=None, render_value=True):
+ def __init__(self, attrs=None, render_value=False):
super(PasswordInput, self).__init__(attrs)
self.render_value = render_value
@@ -308,9 +308,13 @@ class DateInput(Input):
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:
+ if self.is_localized and not self.manual_format:
return formats.localize_input(value)
elif hasattr(value, 'strftime'):
value = datetime_safe.new_date(value)
@@ -336,9 +340,13 @@ class DateTimeInput(Input):
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:
+ if self.is_localized and not self.manual_format:
return formats.localize_input(value)
elif hasattr(value, 'strftime'):
value = datetime_safe.new_datetime(value)
@@ -364,9 +372,13 @@ class TimeInput(Input):
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:
+ if self.is_localized and not self.manual_format:
return formats.localize_input(value)
elif hasattr(value, 'strftime'):
return value.strftime(self.format)
@@ -438,13 +450,14 @@ class Select(Widget):
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):
- def render_option(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)))
# Normalize to strings.
selected_choices = set([force_unicode(v) for v in selected_choices])
output = []
@@ -452,10 +465,10 @@ class Select(Widget):
if isinstance(option_label, (list, tuple)):
output.append(u'<optgroup label="%s">' % escape(force_unicode(option_value)))
for option in option_label:
- output.append(render_option(*option))
+ output.append(self.render_option(selected_choices, *option))
output.append(u'</optgroup>')
else:
- output.append(render_option(option_value, option_label))
+ output.append(self.render_option(selected_choices, option_value, option_label))
return u'\n'.join(output)
class NullBooleanSelect(Select):
@@ -751,12 +764,8 @@ class SplitDateTimeWidget(MultiWidget):
time_format = TimeInput.format
def __init__(self, attrs=None, date_format=None, time_format=None):
- if date_format:
- self.date_format = date_format
- if time_format:
- self.time_format = time_format
- widgets = (DateInput(attrs=attrs, format=self.date_format),
- TimeInput(attrs=attrs, format=self.time_format))
+ widgets = (DateInput(attrs=attrs, format=date_format),
+ TimeInput(attrs=attrs, format=time_format))
super(SplitDateTimeWidget, self).__init__(widgets, attrs)
def decompress(self, value):
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 8756d046b5..46232bee18 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -1,5 +1,7 @@
+import datetime
import os
import re
+import time
from Cookie import BaseCookie, SimpleCookie, CookieError
from pprint import pformat
from urllib import urlencode
@@ -12,6 +14,7 @@ except ImportError:
from django.utils.datastructures import MultiValueDict, ImmutableList
from django.utils.encoding import smart_str, iri_to_uri, force_unicode
+from django.utils.http import cookie_date
from django.http.multipartparser import MultiPartParser
from django.conf import settings
from django.core.files import uploadhandler
@@ -177,14 +180,14 @@ class QueryDict(MultiValueDict):
super(QueryDict, self).__delitem__(key)
def __copy__(self):
- result = self.__class__('', mutable=True)
+ 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)
+ 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))
@@ -303,13 +306,16 @@ class HttpResponse(object):
def __init__(self, content='', mimetype=None, status=None,
content_type=None):
- from django.conf import settings
+ # _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,
- settings.DEFAULT_CHARSET)
+ self._charset)
if not isinstance(content, basestring) and hasattr(content, '__iter__'):
self._container = content
self._is_string = False
@@ -320,10 +326,7 @@ class HttpResponse(object):
if status:
self.status_code = status
- # _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.
- self._headers = {'content-type': ('Content-Type', content_type)}
+ self['Content-Type'] = content_type
def __str__(self):
"""Full HTTP message, including headers."""
@@ -373,11 +376,32 @@ class HttpResponse(object):
def set_cookie(self, key, value='', max_age=None, expires=None, path='/',
domain=None, secure=False):
+ """
+ Sets a cookie.
+
+ ``expires`` can be a string in the correct format or a
+ ``datetime.datetime`` object in UTC. If ``expires`` is a datetime
+ object then ``max_age`` will be calculated.
+ """
self.cookies[key] = value
+ if expires is not None:
+ if isinstance(expires, datetime.datetime):
+ delta = expires - expires.utcnow()
+ # Add one second so the date matches exactly (a fraction of
+ # time gets lost between converting to a timedelta and
+ # then the date string).
+ delta = delta + datetime.timedelta(seconds=1)
+ # Just set max_age - the max_age logic will set expires.
+ expires = None
+ max_age = max(0, delta.days * 86400 + delta.seconds)
+ else:
+ self.cookies[key]['expires'] = expires
if max_age is not None:
self.cookies[key]['max-age'] = max_age
- if expires is not None:
- self.cookies[key]['expires'] = expires
+ # IE requires expires, so set it if hasn't been already.
+ if not expires:
+ self.cookies[key]['expires'] = cookie_date(time.time() +
+ max_age)
if path is not None:
self.cookies[key]['path'] = path
if domain is not None:
diff --git a/django/middleware/csrf.py b/django/middleware/csrf.py
index 9ca727fca9..5d3a871adb 100644
--- a/django/middleware/csrf.py
+++ b/django/middleware/csrf.py
@@ -27,22 +27,33 @@ 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.
+ 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'
@@ -52,6 +63,18 @@ def get_token(request):
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
@@ -62,9 +85,6 @@ class CsrfViewMiddleware(object):
tag.
"""
def process_view(self, request, callback, callback_args, callback_kwargs):
- if getattr(callback, 'csrf_exempt', False):
- return None
-
if getattr(request, 'csrf_processing_done', False):
return None
@@ -80,7 +100,10 @@ class CsrfViewMiddleware(object):
# request, so it's available to the view. We'll store it in a cookie when
# we reach the response.
try:
- request.META["CSRF_COOKIE"] = request.COOKIES[settings.CSRF_COOKIE_NAME]
+ # 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
@@ -90,6 +113,11 @@ class CsrfViewMiddleware(object):
# 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
@@ -124,16 +152,30 @@ class CsrfViewMiddleware(object):
return accept()
if request.is_secure():
- # Strict referer checking for HTTPS
+ # Suppose user visits http://example.com/
+ # An active network attacker,(man-in-the-middle, MITM) sends a
+ # POST form which targets https://example.com/detonate-bomb/ and
+ # submits it via javascript.
+ #
+ # The attacker will need to provide a CSRF cookie and token, but
+ # that is no problem for a MITM and the session independent
+ # nonce we are using. So the MITM can circumvent the CSRF
+ # protection. This is true for any HTTP connection, but anyone
+ # using HTTPS expects better! For this reason, for
+ # https://example.com/ we need additional protection that treats
+ # http://example.com/ as completely untrusted. Under HTTPS,
+ # Barth et al. found that the Referer header is missing for
+ # same-domain requests in only about 0.2% of cases or less, so
+ # we can use strict Referer checking.
referer = request.META.get('HTTP_REFERER')
if referer is None:
- return reject("Referer checking failed - no Referer.")
+ return reject(REASON_NO_REFERER)
# The following check ensures that the referer is HTTPS,
- # the domains match and the ports match. This might be too strict.
+ # the domains match and the ports match - the same origin policy.
good_referer = 'https://%s/' % request.get_host()
if not referer.startswith(good_referer):
- return reject("Referer checking failed - %s does not match %s." %
+ return reject(REASON_BAD_REFERER %
(referer, good_referer))
# If the user didn't already have a CSRF cookie, then fall back to
@@ -148,7 +190,7 @@ class CsrfViewMiddleware(object):
# 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 reject("No CSRF or session cookie.")
+ return reject(REASON_NO_COOKIE)
else:
csrf_token = request.META["CSRF_COOKIE"]
@@ -157,9 +199,9 @@ class CsrfViewMiddleware(object):
if request_csrf_token != csrf_token:
if cookie_is_new:
# probably a problem setting the CSRF cookie
- return reject("CSRF cookie not set.")
+ return reject(REASON_NO_CSRF_COOKIE)
else:
- return reject("CSRF token missing or incorrect.")
+ return reject(REASON_BAD_TOKEN)
return accept()
@@ -185,6 +227,7 @@ class CsrfViewMiddleware(object):
response.csrf_processing_done = True
return response
+
class CsrfResponseMiddleware(object):
"""
DEPRECATED
@@ -235,6 +278,7 @@ class CsrfResponseMiddleware(object):
del response['ETag']
return response
+
class CsrfMiddleware(object):
"""
Django middleware that adds protection against Cross Site
@@ -262,4 +306,3 @@ class CsrfMiddleware(object):
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/django/template/defaultfilters.py b/django/template/defaultfilters.py
index 4b720093b3..739f50f235 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -11,9 +11,10 @@ except ImportError:
from django.template import Variable, Library
from django.conf import settings
from django.utils import formats
-from django.utils.translation import ugettext, ungettext
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()
@@ -255,6 +256,8 @@ 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:
@@ -270,6 +273,8 @@ 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:
@@ -496,10 +501,9 @@ def join(value, arg, autoescape=None):
"""
value = map(force_unicode, value)
if autoescape:
- from django.utils.html import conditional_escape
value = [conditional_escape(v) for v in value]
try:
- data = arg.join(value)
+ data = conditional_escape(arg).join(value)
except AttributeError: # fail silently but nicely
return value
return mark_safe(data)
@@ -809,7 +813,11 @@ def filesizeformat(bytes):
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))
+ if bytes < 1024 * 1024 * 1024 * 1024:
+ return ugettext("%.1f GB") % (bytes / (1024 * 1024 * 1024))
+ if bytes < 1024 * 1024 * 1024 * 1024 * 1024:
+ return ugettext("%.1f TB") % (bytes / (1024 * 1024 * 1024 * 1024))
+ return ugettext("%.1f PB") % (bytes / (1024 * 1024 * 1024 * 1024 * 1024))
filesizeformat.is_safe = True
def pluralize(value, arg=u's'):
diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py
index 318ae5ffd2..1b07413530 100644
--- a/django/template/defaulttags.py
+++ b/django/template/defaulttags.py
@@ -42,7 +42,7 @@ class CsrfTokenNode(Node):
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))
+ 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
@@ -157,15 +157,22 @@ class ForNode(Node):
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.
- context.update(dict(zip(self.loopvars, item)))
+ 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 unpack:
+ 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
diff --git a/django/test/__init__.py b/django/test/__init__.py
index 957b293e12..c996ed49d6 100644
--- a/django/test/__init__.py
+++ b/django/test/__init__.py
@@ -4,3 +4,4 @@ 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/django/test/client.py b/django/test/client.py
index e5a16b6e79..08e3ff6b71 100644
--- a/django/test/client.py
+++ b/django/test/client.py
@@ -3,6 +3,7 @@ from urlparse import urlparse, urlunparse, urlsplit
import sys
import os
import re
+import mimetypes
try:
from cStringIO import StringIO
except ImportError:
@@ -54,6 +55,10 @@ class ClientHandler(BaseHandler):
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
@@ -70,7 +75,7 @@ class ClientHandler(BaseHandler):
# CsrfViewMiddleware. This makes life easier, and is probably
# required for backwards compatibility with external tests against
# admin views.
- request._dont_enforce_csrf_checks = True
+ request._dont_enforce_csrf_checks = not self.enforce_csrf_checks
response = self.get_response(request)
# Apply response middleware.
@@ -138,11 +143,14 @@ def encode_multipart(boundary, data):
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: application/octet-stream',
+ 'Content-Type: %s' % content_type,
'',
file.read()
]
@@ -165,8 +173,8 @@ class Client(object):
contexts and templates produced by a view, rather than the
HTML rendered to the end-user.
"""
- def __init__(self, **defaults):
- self.handler = ClientHandler()
+ def __init__(self, enforce_csrf_checks=False, **defaults):
+ self.handler = ClientHandler(enforce_csrf_checks)
self.defaults = defaults
self.cookies = SimpleCookie()
self.exc_info = None
@@ -289,7 +297,7 @@ class Client(object):
response = self.request(**r)
if follow:
- response = self._handle_redirects(response)
+ response = self._handle_redirects(response, **extra)
return response
def post(self, path, data={}, content_type=MULTIPART_CONTENT,
@@ -321,7 +329,7 @@ class Client(object):
response = self.request(**r)
if follow:
- response = self._handle_redirects(response)
+ response = self._handle_redirects(response, **extra)
return response
def head(self, path, data={}, follow=False, **extra):
@@ -340,7 +348,7 @@ class Client(object):
response = self.request(**r)
if follow:
- response = self._handle_redirects(response)
+ response = self._handle_redirects(response, **extra)
return response
def options(self, path, data={}, follow=False, **extra):
@@ -358,7 +366,7 @@ class Client(object):
response = self.request(**r)
if follow:
- response = self._handle_redirects(response)
+ response = self._handle_redirects(response, **extra)
return response
def put(self, path, data={}, content_type=MULTIPART_CONTENT,
@@ -390,7 +398,7 @@ class Client(object):
response = self.request(**r)
if follow:
- response = self._handle_redirects(response)
+ response = self._handle_redirects(response, **extra)
return response
def delete(self, path, data={}, follow=False, **extra):
@@ -408,7 +416,7 @@ class Client(object):
response = self.request(**r)
if follow:
- response = self._handle_redirects(response)
+ response = self._handle_redirects(response, **extra)
return response
def login(self, **credentials):
@@ -463,7 +471,7 @@ class Client(object):
session.delete(session_key=session_cookie.value)
self.cookies = SimpleCookie()
- def _handle_redirects(self, response):
+ def _handle_redirects(self, response, **extra):
"Follows any redirects by requesting responses from the server using GET."
response.redirect_chain = []
@@ -474,7 +482,6 @@ class Client(object):
redirect_chain = response.redirect_chain
redirect_chain.append((url, response.status_code))
- extra = {}
if scheme:
extra['wsgi.url_scheme'] = scheme
diff --git a/django/test/testcases.py b/django/test/testcases.py
index 2f8acad68c..10bd6c6c9f 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -347,7 +347,7 @@ class TransactionTestCase(unittest.TestCase):
def assertContains(self, response, text, count=None, status_code=200,
msg_prefix=''):
"""
- Asserts that a response indicates that a page was retrieved
+ Asserts that a response indicates that some content 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
@@ -357,7 +357,7 @@ class TransactionTestCase(unittest.TestCase):
msg_prefix += ": "
self.assertEqual(response.status_code, status_code,
- msg_prefix + "Couldn't retrieve page: Response code was %d"
+ msg_prefix + "Couldn't retrieve content: Response code was %d"
" (expected %d)" % (response.status_code, status_code))
text = smart_str(text, response._charset)
real_count = response.content.count(text)
@@ -372,7 +372,7 @@ class TransactionTestCase(unittest.TestCase):
def assertNotContains(self, response, text, status_code=200,
msg_prefix=''):
"""
- Asserts that a response indicates that a page was retrieved
+ Asserts that a response indicates that some content was retrieved
successfully, (i.e., the HTTP status code was as expected), and that
``text`` doesn't occurs in the content of the response.
"""
@@ -380,7 +380,7 @@ class TransactionTestCase(unittest.TestCase):
msg_prefix += ": "
self.assertEqual(response.status_code, status_code,
- msg_prefix + "Couldn't retrieve page: Response code was %d"
+ msg_prefix + "Couldn't retrieve content: Response code was %d"
" (expected %d)" % (response.status_code, status_code))
text = smart_str(text, response._charset)
self.assertEqual(response.content.count(text), 0,
@@ -466,6 +466,9 @@ class TransactionTestCase(unittest.TestCase):
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
diff --git a/django/test/utils.py b/django/test/utils.py
index b6ab39901b..8ecb5a0e60 100644
--- a/django/test/utils.py
+++ b/django/test/utils.py
@@ -1,4 +1,6 @@
-import sys, time, os
+import sys
+import time
+import os
from django.conf import settings
from django.core import mail
from django.core.mail.backends import locmem
@@ -6,6 +8,21 @@ 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.
@@ -19,6 +36,12 @@ class ContextList(list):
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):
"""
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 3cbbe27b91..30ce28d38d 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -77,6 +77,27 @@ class MergeDict(object):
"""Returns a copy of this object."""
return self.__copy__()
+ def __str__(self):
+ '''
+ Returns something like
+
+ "{'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}"
+
+ instead of the generic "<object meta-data>" inherited from object.
+ '''
+ return str(dict(self.items()))
+
+ def __repr__(self):
+ '''
+ Returns something like
+
+ MergeDict({'key1': 'val1', 'key2': 'val2'}, {'key3': 'val3'})
+
+ instead of generic "<object meta-data>" inherited from object.
+ '''
+ dictreprs = ', '.join(repr(d) for d in self.dicts)
+ return '%s(%s)' % (self.__class__.__name__, dictreprs)
+
class SortedDict(dict):
"""
A dictionary that keeps its keys in the order in which they're inserted.
@@ -99,9 +120,11 @@ class SortedDict(dict):
self.keyOrder = data.keys()
else:
self.keyOrder = []
+ seen = set()
for key, value in data:
- if key not in self.keyOrder:
+ if key not in seen:
self.keyOrder.append(key)
+ seen.add(key)
def __deepcopy__(self, memo):
return self.__class__([(key, deepcopy(value, memo))
diff --git a/django/utils/formats.py b/django/utils/formats.py
index 31027abd23..372998f221 100644
--- a/django/utils/formats.py
+++ b/django/utils/formats.py
@@ -79,16 +79,16 @@ def localize(value):
Checks if value is a localizable type (date, number...) and returns it
formatted as a string using current locale format
"""
- if settings.USE_L10N:
- if isinstance(value, (decimal.Decimal, float, int)):
- 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')
- return value
+ if isinstance(value, (decimal.Decimal, float, int)):
+ 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):
"""
diff --git a/django/utils/hashcompat.py b/django/utils/hashcompat.py
index b1e6021890..4d9b76f3a6 100644
--- a/django/utils/hashcompat.py
+++ b/django/utils/hashcompat.py
@@ -1,17 +1,17 @@
"""
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, preferring the hashlib module when
-available.
+interface to the md5 and sha constructors, depending on system version.
"""
-try:
+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
-except ImportError:
+else:
import md5
md5_constructor = md5.new
md5_hmac = md5
diff --git a/django/utils/text.py b/django/utils/text.py
index 5d633b7afe..b05460486d 100644
--- a/django/utils/text.py
+++ b/django/utils/text.py
@@ -39,7 +39,10 @@ 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, defaults to ellipsis (...)"""
+ truncated, defaulting to ellipsis (...)
+
+ Newlines in the string will be stripped.
+ """
s = force_unicode(s)
length = int(num)
words = s.split()
@@ -51,10 +54,13 @@ def truncate_words(s, num, end_text='...'):
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
+ """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, defaults to ellipsis (...)."""
+ string has been truncated, defaulting to ellipsis (...).
+
+ Newlines in the HTML are preserved.
+ """
s = force_unicode(s)
length = int(num)
if length <= 0:
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index 017b99a8ca..f732cd931e 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -502,7 +502,7 @@ def parse_accept_lang_header(lang_string):
return []
priority = priority and float(priority) or 1.0
result.append((lang, priority))
- result.sort(lambda x, y: -cmp(x[1], y[1]))
+ result.sort(key=lambda k: k[1], reverse=True)
return result
# get_date_formats and get_partial_date_formats aren't used anymore by Django
diff --git a/django/views/csrf.py b/django/views/csrf.py
index fa996fff24..c627812dcb 100644
--- a/django/views/csrf.py
+++ b/django/views/csrf.py
@@ -23,7 +23,7 @@ CSRF_FAILRE_TEMPLATE = """
h1 span { font-size:60%; color:#666; font-weight:normal; }
#info { background:#f6f6f6; }
#info ul { margin: 0.5em 4em; }
- #info p { padding-top:10px; }
+ #info p, #summary p { padding-top:10px; }
#summary { background: #ffc; }
#explanation { background:#eee; border-bottom: 0px none; }
</style>
@@ -32,6 +32,16 @@ CSRF_FAILRE_TEMPLATE = """
<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">
@@ -83,7 +93,10 @@ 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})
+ 'reason': reason,
+ 'no_referer': reason == REASON_NO_REFERER
+ })
return HttpResponseForbidden(t.render(c), mimetype='text/html')
diff --git a/django/views/debug.py b/django/views/debug.py
index 6604bd3dae..7050ea38fb 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -12,7 +12,7 @@ from django.utils.importlib import import_module
from django.utils.encoding import smart_unicode, smart_str
-HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST')
+HIDDEN_SETTINGS = re.compile('SECRET|PASSWORD|PROFANITIES_LIST|SIGNATURE')
def linebreak_iter(template_source):
yield 0
@@ -412,7 +412,7 @@ TECHNICAL_500_TEMPLATE = """
<body>
<div id="summary">
<h1>{{ exception_type }} at {{ request.path_info|escape }}</h1>
- <pre class="exception_value">{{ exception_value|escape }}</pre>
+ <pre class="exception_value">{{ exception_value|force_escape }}</pre>
<table class="meta">
<tr>
<th>Request Method:</th>
@@ -432,7 +432,7 @@ TECHNICAL_500_TEMPLATE = """
</tr>
<tr>
<th>Exception Value:</th>
- <td><pre>{{ exception_value|escape }}</pre></td>
+ <td><pre>{{ exception_value|force_escape }}</pre></td>
</tr>
<tr>
<th>Exception Location:</th>
@@ -459,7 +459,7 @@ TECHNICAL_500_TEMPLATE = """
{% 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>
+ <p>The string that could not be encoded/decoded was: <strong>{{ unicode_hint|force_escape }}</strong></p>
</div>
{% endif %}
{% if template_does_not_exist %}
@@ -532,8 +532,8 @@ TECHNICAL_500_TEMPLATE = """
<tbody>
{% for var in frame.vars|dictsort:"0" %}
<tr>
- <td>{{ var.0|escape }}</td>
- <td class="code"><div>{{ var.1|pprint|escape }}</div></td>
+ <td>{{ var.0|force_escape }}</td>
+ <td class="code"><div>{{ var.1|pprint|force_escape }}</div></td>
</tr>
{% endfor %}
</tbody>
@@ -582,7 +582,7 @@ Traceback:
{% 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 }}
+Exception Value: {{ exception_value|force_escape }}
</textarea>
<br><br>
<input type="submit" value="Share this traceback on a public Web site">
@@ -778,7 +778,12 @@ TECHNICAL_404_TEMPLATE = """
</p>
<ol>
{% for pattern in urlpatterns %}
- <li>{{ pattern }}</li>
+ <li>
+ {% for pat in pattern %}
+ {{ pat.regex.pattern }}
+ {% if forloop.last and pat.name %}[name='{{ pat.name }}']{% endif %}
+ {% endfor %}
+ </li>
{% endfor %}
</ol>
<p>The current URL, <code>{{ request_path|escape }}</code>, didn't match any of these.</p>
diff --git a/django/views/generic/simple.py b/django/views/generic/simple.py
index 3b5309df96..435cd7623d 100644
--- a/django/views/generic/simple.py
+++ b/django/views/generic/simple.py
@@ -17,7 +17,7 @@ def direct_to_template(request, template, extra_context=None, mimetype=None, **k
t = loader.get_template(template)
return HttpResponse(t.render(c), mimetype=mimetype)
-def redirect_to(request, url, permanent=True, **kwargs):
+def redirect_to(request, url, permanent=True, query_string=False, **kwargs):
"""
Redirect to a given URL.
@@ -33,7 +33,15 @@ def redirect_to(request, url, permanent=True, **kwargs):
If the ``permanent`` argument is False, then the response will have a 302
HTTP status code. Otherwise, the status code will be 301.
+
+ If the ``query_string`` argument is True, then the GET query string
+ from the request is appended to the URL.
+
"""
+ args = request.META["QUERY_STRING"]
+ if args and query_string and url is not None:
+ url = "%s?%s" % (url, args)
+
if url is not None:
klass = permanent and HttpResponsePermanentRedirect or HttpResponseRedirect
return klass(url % kwargs)