summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-07-01 05:55:01 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-07-01 05:55:01 +0000
commita61d4ebd5f4b49b296063eae603faa3c456d26e5 (patch)
tree3b88cfd1865e4a77400ec2becddaf93851f27f57
parentb89d409bf7ed7f9d6248c1ec188e241bdf5d4aa2 (diff)
downloaddjango-a61d4ebd5f4b49b296063eae603faa3c456d26e5.tar.gz
unicode: Merged changes from trunk up to [5579].
git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5580 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--AUTHORS2
-rw-r--r--django/conf/locale/bn/LC_MESSAGES/djangojs.mobin0 -> 367 bytes
-rw-r--r--django/conf/locale/bn/LC_MESSAGES/djangojs.po118
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/django.mobin49408 -> 49503 bytes
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/django.po257
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/djangojs.mobin1646 -> 1654 bytes
-rw-r--r--django/conf/locale/ca/LC_MESSAGES/djangojs.po9
-rw-r--r--django/conf/locale/da/LC_MESSAGES/djangojs.mobin0 -> 367 bytes
-rw-r--r--django/conf/locale/da/LC_MESSAGES/djangojs.po118
-rw-r--r--django/conf/locale/ja/LC_MESSAGES/django.mobin47042 -> 53143 bytes
-rw-r--r--django/conf/locale/ja/LC_MESSAGES/django.po760
-rw-r--r--django/conf/locale/ro/LC_MESSAGES/django.mobin16327 -> 21716 bytes
-rw-r--r--django/conf/locale/ro/LC_MESSAGES/django.po222
-rw-r--r--django/conf/locale/ro/LC_MESSAGES/djangojs.mobin0 -> 367 bytes
-rw-r--r--django/conf/locale/ro/LC_MESSAGES/djangojs.po118
-rw-r--r--django/conf/locale/uk/LC_MESSAGES/djangojs.mobin0 -> 367 bytes
-rw-r--r--django/conf/locale/uk/LC_MESSAGES/djangojs.po118
-rw-r--r--django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mobin0 -> 367 bytes
-rw-r--r--django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po118
-rw-r--r--django/conf/project_template/settings.py2
-rw-r--r--django/core/mail.py100
-rw-r--r--django/core/urlresolvers.py2
-rw-r--r--django/db/backends/dummy/base.py5
-rw-r--r--django/db/backends/mysql/base.py2
-rw-r--r--django/db/backends/mysql_old/base.py2
-rw-r--r--django/db/backends/postgresql/base.py2
-rw-r--r--django/db/backends/postgresql_psycopg2/base.py2
-rw-r--r--django/db/backends/sqlite3/base.py12
-rw-r--r--django/db/models/fields/__init__.py3
-rw-r--r--django/db/models/query.py11
-rw-r--r--django/http/__init__.py4
-rw-r--r--django/newforms/fields.py13
-rw-r--r--django/newforms/widgets.py34
-rw-r--r--docs/authentication.txt4
-rw-r--r--docs/contributing.txt59
-rw-r--r--docs/db-api.txt54
-rw-r--r--docs/django-admin.txt2
-rw-r--r--docs/email.txt126
-rw-r--r--docs/faq.txt2
-rw-r--r--docs/generic_views.txt4
-rw-r--r--docs/install.txt4
-rw-r--r--docs/legacy_databases.txt2
-rw-r--r--docs/model-api.txt17
-rw-r--r--docs/release_notes_0.96.txt2
-rw-r--r--docs/serialization.txt4
-rw-r--r--docs/templates_python.txt2
-rw-r--r--docs/testing.txt8
-rw-r--r--docs/tutorial01.txt2
-rw-r--r--tests/modeltests/lookup/models.py97
-rw-r--r--tests/regressiontests/templates/tests.py3
50 files changed, 1899 insertions, 527 deletions
diff --git a/AUTHORS b/AUTHORS
index 5fc0b94480..2ea96fa955 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -123,6 +123,7 @@ answer newbie questions, and generally made Django that much better:
Ian Holsman <http://feh.holsman.net/>
Kieran Holland <http://www.kieranholland.com>
Sung-Jin Hong <serialx.net@gmail.com>
+ Richard House <Richard.House@i-logue.com>
Robert Rock Howard <http://djangomojo.com/>
Jason Huggins <http://www.jrandolph.com/blog/>
Hyun Mi Ae
@@ -231,6 +232,7 @@ answer newbie questions, and generally made Django that much better:
Frank Tegtmeyer <fte@fte.to>
thebjorn <bp@datakortet.no>
Zach Thompson <zthompson47@gmail.com>
+ tibimicu@gmax.net
Tom Tobin
Joe Topjian <http://joe.terrarum.net/geek/code/python/django/>
torne-django@wolfpuppy.org.uk
diff --git a/django/conf/locale/bn/LC_MESSAGES/djangojs.mo b/django/conf/locale/bn/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..1db40df910
--- /dev/null
+++ b/django/conf/locale/bn/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/bn/LC_MESSAGES/djangojs.po b/django/conf/locale/bn/LC_MESSAGES/djangojs.po
new file mode 100644
index 0000000000..4084313848
--- /dev/null
+++ b/django/conf/locale/bn/LC_MESSAGES/djangojs.po
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-28 17:36+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr ""
diff --git a/django/conf/locale/ca/LC_MESSAGES/django.mo b/django/conf/locale/ca/LC_MESSAGES/django.mo
index 665d7d41a9..f308c7589a 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 30a8797a91..b8450ad1b9 100644
--- a/django/conf/locale/ca/LC_MESSAGES/django.po
+++ b/django/conf/locale/ca/LC_MESSAGES/django.po
@@ -1,20 +1,18 @@
# translation of django.po to
-# This file is distributed under the same license as the PACKAGE package.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# This file is distributed under the same license as the Django package.
#
msgid ""
msgstr ""
"Project-Id-Version: django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-05-25 13:04+0200\n"
-"PO-Revision-Date: 2007-05-25 13:04+0200\n"
-"Last-Translator: Marc Fargas <marc@fargas.com>\n"
+"POT-Creation-Date: 2007-06-25 17:31+0200\n"
+"PO-Revision-Date: 2007-06-25 17:47+0200\n"
+"Last-Translator: Marc Fargas <telenieko@telenieko.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: VIM 7.0\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);"
#: template/defaultfilters.py:491
msgid "yes,no,maybe"
@@ -42,38 +40,38 @@ msgstr "%.1f MB"
msgid "%.1f GB"
msgstr "%.1f GB"
-#: newforms/models.py:173 newforms/fields.py:432
+#: newforms/models.py:172 newforms/fields.py:432
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr ""
"Esculli una opció vàlida; Aquesta opció no és una de les opcions disponibles."
-#: newforms/models.py:186 newforms/fields.py:87 newforms/fields.py:444
-#: newforms/fields.py:520 newforms/fields.py:531 oldforms/__init__.py:357
-#: db/models/fields/__init__.py:121 db/models/fields/__init__.py:278
-#: db/models/fields/__init__.py:675 db/models/fields/__init__.py:686
+#: newforms/models.py:185 newforms/fields.py:87 newforms/fields.py:444
+#: newforms/fields.py:522 newforms/fields.py:533 oldforms/__init__.py:357
+#: db/models/fields/__init__.py:126 db/models/fields/__init__.py:283
+#: db/models/fields/__init__.py:680 db/models/fields/__init__.py:691
msgid "This field is required."
msgstr "Aquest camp és obligatori."
-#: newforms/models.py:190 newforms/fields.py:448 newforms/fields.py:524
+#: newforms/models.py:189 newforms/fields.py:448 newforms/fields.py:526
msgid "Enter a list of values."
msgstr "Introdueixi una llista de valors."
-#: newforms/models.py:196 newforms/fields.py:457
+#: newforms/models.py:195 newforms/fields.py:457
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "Esculli una opció vàlida; %s' no és una de les opcions vàlides."
-#: newforms/widgets.py:182 contrib/admin/filterspecs.py:150
+#: newforms/widgets.py:181 contrib/admin/filterspecs.py:150
#: oldforms/__init__.py:577
msgid "Unknown"
msgstr "Desconegut"
-#: newforms/widgets.py:182 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:181 contrib/admin/filterspecs.py:143
#: oldforms/__init__.py:577
msgid "Yes"
msgstr "Si"
-#: newforms/widgets.py:182 contrib/admin/filterspecs.py:143
+#: newforms/widgets.py:181 contrib/admin/filterspecs.py:143
#: oldforms/__init__.py:577
msgid "No"
msgstr "No"
@@ -121,11 +119,11 @@ msgstr "Asseguris de que no hi ha més de %s decimals."
msgid "Ensure that there are no more than %s digits before the decimal point."
msgstr "Asseguris de que no hia ha més de %s dígits decimals."
-#: newforms/fields.py:233
+#: newforms/fields.py:233 newforms/fields.py:566
msgid "Enter a valid date."
msgstr "Introdueixi una data vàlida."
-#: newforms/fields.py:260
+#: newforms/fields.py:260 newforms/fields.py:568
msgid "Enter a valid time."
msgstr "Introdueixi una hora vàlida."
@@ -198,118 +196,122 @@ msgid "Argentinean Spanish"
msgstr "Castellà Argentí"
#: conf/global_settings.py:51
+msgid "Persian"
+msgstr "Persa"
+
+#: conf/global_settings.py:52
msgid "Finnish"
msgstr "Finlandès"
-#: conf/global_settings.py:52
+#: conf/global_settings.py:53
msgid "French"
msgstr "Francès"
-#: conf/global_settings.py:53
+#: conf/global_settings.py:54
msgid "Galician"
msgstr "Galleg"
-#: conf/global_settings.py:54
+#: conf/global_settings.py:55
msgid "Hungarian"
msgstr "Húngar"
-#: conf/global_settings.py:55
+#: conf/global_settings.py:56
msgid "Hebrew"
msgstr "Hebreu"
-#: conf/global_settings.py:56
+#: conf/global_settings.py:57
msgid "Icelandic"
msgstr "Islandès"
-#: conf/global_settings.py:57
+#: conf/global_settings.py:58
msgid "Italian"
msgstr "Italià"
-#: conf/global_settings.py:58
+#: conf/global_settings.py:59
msgid "Japanese"
msgstr "Japonès"
-#: conf/global_settings.py:59
+#: conf/global_settings.py:60
msgid "Korean"
msgstr "Coreà"
-#: conf/global_settings.py:60
+#: conf/global_settings.py:61
msgid "Kannada"
msgstr ""
-#: conf/global_settings.py:61
+#: conf/global_settings.py:62
msgid "Latvian"
-msgstr ""
+msgstr "Letó"
-#: conf/global_settings.py:62
+#: conf/global_settings.py:63
msgid "Macedonian"
msgstr "Macedoni"
-#: conf/global_settings.py:63
+#: conf/global_settings.py:64
msgid "Dutch"
msgstr "Holandès"
-#: conf/global_settings.py:64
+#: conf/global_settings.py:65
msgid "Norwegian"
msgstr "Norueg"
-#: conf/global_settings.py:65
+#: conf/global_settings.py:66
msgid "Polish"
msgstr "Polac"
-#: conf/global_settings.py:66
+#: conf/global_settings.py:67
msgid "Portugese"
msgstr "Portuguès"
-#: conf/global_settings.py:67
+#: conf/global_settings.py:68
msgid "Brazilian"
msgstr "Brasileny"
-#: conf/global_settings.py:68
+#: conf/global_settings.py:69
msgid "Romanian"
msgstr "Rumanès"
-#: conf/global_settings.py:69
+#: conf/global_settings.py:70
msgid "Russian"
msgstr "Rús"
-#: conf/global_settings.py:70
+#: conf/global_settings.py:71
msgid "Slovak"
msgstr "Eslovac"
-#: conf/global_settings.py:71
+#: conf/global_settings.py:72
msgid "Slovenian"
msgstr "Esloveni"
-#: conf/global_settings.py:72
+#: conf/global_settings.py:73
msgid "Serbian"
msgstr "Serbi"
-#: conf/global_settings.py:73
+#: conf/global_settings.py:74
msgid "Swedish"
msgstr "Suec"
-#: conf/global_settings.py:74
+#: conf/global_settings.py:75
msgid "Tamil"
-msgstr ""
+msgstr "Tàmil"
-#: conf/global_settings.py:75
+#: conf/global_settings.py:76
msgid "Telugu"
-msgstr ""
+msgstr "Telugu"
-#: conf/global_settings.py:76
+#: conf/global_settings.py:77
msgid "Turkish"
msgstr "Turc"
-#: conf/global_settings.py:77
+#: conf/global_settings.py:78
msgid "Ukrainian"
msgstr "Ucranià"
-#: conf/global_settings.py:78
+#: conf/global_settings.py:79
msgid "Simplified Chinese"
msgstr "Xinés simplificat"
-#: conf/global_settings.py:79
+#: conf/global_settings.py:80
msgid "Traditional Chinese"
msgstr "Xinés tradicional"
@@ -576,17 +578,15 @@ msgid ""
"comment:\n"
"\n"
"%(text)s"
-msgid_plural ""
"This comment was posted by a user who has posted fewer than %(count)s "
"comments:\n"
"\n"
"%(text)s"
-msgstr[0] ""
+msgstr ""
"Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s "
"comentari:\n"
"\n"
"%(text)s"
-msgstr[1] ""
"Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s "
"comentaris:\n"
"\n"
@@ -1218,13 +1218,13 @@ msgstr "Editar aquest objecte (nova finestra)"
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/admin/views/auth.py:19 contrib/admin/views/main.py:257
+#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:262
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "El/la %(name)s \"%(obj)s\".ha estat agregat/da amb èxit."
-#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
-#: contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:266
+#: contrib/admin/views/main.py:352
msgid "You may edit it again below."
msgstr "Pot editar-lo de nou abaix."
@@ -1241,96 +1241,96 @@ msgstr "Canvi de clau exitós"
msgid "Change password: %s"
msgstr "Canviar clau: %s"
-#: contrib/admin/views/main.py:223
+#: contrib/admin/views/main.py:228
msgid "Site administration"
msgstr "Lloc administratiu"
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#: contrib/admin/views/main.py:276 contrib/admin/views/main.py:361
#, python-format
msgid "You may add another %s below."
msgstr "Pot agregar un altre %s abaix."
-#: contrib/admin/views/main.py:289
+#: contrib/admin/views/main.py:294
#, python-format
msgid "Add %s"
msgstr "Agregar %s"
-#: contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:340
#, python-format
msgid "Added %s."
msgstr "Agregat %s."
-#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339 db/models/manipulators.py:308
+#: contrib/admin/views/main.py:340 contrib/admin/views/main.py:342
+#: contrib/admin/views/main.py:344 db/models/manipulators.py:308
msgid "and"
msgstr "i"
-#: contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:342
#, python-format
msgid "Changed %s."
msgstr "Modificat %s."
-#: contrib/admin/views/main.py:339
+#: contrib/admin/views/main.py:344
#, python-format
msgid "Deleted %s."
msgstr "Eliminat %s."
-#: contrib/admin/views/main.py:342
+#: contrib/admin/views/main.py:347
msgid "No fields changed."
msgstr "Cap camp canviat."
-#: contrib/admin/views/main.py:345
+#: contrib/admin/views/main.py:350
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "S'ha modificat amb èxist el/la %(name)s \"%(obj)s."
-#: contrib/admin/views/main.py:353
+#: contrib/admin/views/main.py:358
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
"S'ha agregat amb èxit el/la %(name)s \"%(obj)s\". Pot editar-lo de nou abaix."
-#: contrib/admin/views/main.py:391
+#: contrib/admin/views/main.py:396
#, python-format
msgid "Change %s"
msgstr "Modificar %s"
-#: contrib/admin/views/main.py:476
+#: contrib/admin/views/main.py:481
#, 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/views/main.py:481
+#: contrib/admin/views/main.py:486
#, python-format
msgid "One or more %(fieldname)s in %(name)s:"
msgstr "Un o més %(fieldname)s en %(name)s:"
-#: contrib/admin/views/main.py:514
+#: contrib/admin/views/main.py:518
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "El/la %(name)s \"%(obj)s\".ha estat eliminat amb èxit."
-#: contrib/admin/views/main.py:517
+#: contrib/admin/views/main.py:521
msgid "Are you sure?"
msgstr "Està segur?"
-#: contrib/admin/views/main.py:539
+#: contrib/admin/views/main.py:543
#, python-format
msgid "Change history: %s"
msgstr "Modificar històric: %s"
-#: contrib/admin/views/main.py:573
+#: contrib/admin/views/main.py:577
#, python-format
msgid "Select %s"
msgstr "Seleccioni %s"
-#: contrib/admin/views/main.py:573
+#: contrib/admin/views/main.py:577
#, python-format
msgid "Select %s to change"
msgstr "Seleccioni %s per modificar"
-#: contrib/admin/views/main.py:768
+#: contrib/admin/views/main.py:772
msgid "Database error"
msgstr "Error de/en la base de dades"
@@ -1697,35 +1697,35 @@ msgstr "llocs"
msgid "Logged out"
msgstr "Sessió finalitzada"
-#: contrib/auth/models.py:44 contrib/auth/models.py:64
+#: contrib/auth/models.py:49 contrib/auth/models.py:69
msgid "name"
msgstr "nom"
-#: contrib/auth/models.py:46
+#: contrib/auth/models.py:51
msgid "codename"
msgstr "nom en clau"
-#: contrib/auth/models.py:49
+#: contrib/auth/models.py:54
msgid "permission"
msgstr "permís"
-#: contrib/auth/models.py:50 contrib/auth/models.py:65
+#: contrib/auth/models.py:55 contrib/auth/models.py:70
msgid "permissions"
msgstr "permissos"
-#: contrib/auth/models.py:68
+#: contrib/auth/models.py:73
msgid "group"
msgstr "grup"
-#: contrib/auth/models.py:69 contrib/auth/models.py:109
+#: contrib/auth/models.py:74 contrib/auth/models.py:114
msgid "groups"
msgstr "grups"
-#: contrib/auth/models.py:99
+#: contrib/auth/models.py:104
msgid "username"
msgstr "nom d'usuari"
-#: contrib/auth/models.py:99
+#: contrib/auth/models.py:104
msgid ""
"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
"digits and underscores)."
@@ -1733,23 +1733,23 @@ msgstr ""
"Requerit. 30 o menys caracters. Només caracters alfanumèrics (lletres, "
"dígits i guions baixos)."
-#: contrib/auth/models.py:100
+#: contrib/auth/models.py:105
msgid "first name"
msgstr "nom propi"
-#: contrib/auth/models.py:101
+#: contrib/auth/models.py:106
msgid "last name"
msgstr "cognoms"
-#: contrib/auth/models.py:102
+#: contrib/auth/models.py:107
msgid "e-mail address"
msgstr "adreça de correu electrònic"
-#: contrib/auth/models.py:103
+#: contrib/auth/models.py:108
msgid "password"
msgstr "contrasenya"
-#: contrib/auth/models.py:103
+#: contrib/auth/models.py:108
msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>."
@@ -1757,19 +1757,19 @@ msgstr ""
"Utilitzi '[algo]$[salt]$[hexdigest]' o el <a href=\"password/\">formulari de "
"canvi de contrasenya</a>."
-#: contrib/auth/models.py:104
+#: contrib/auth/models.py:109
msgid "staff status"
msgstr "és membre del personal"
-#: contrib/auth/models.py:104
+#: contrib/auth/models.py:109
msgid "Designates whether the user can log into this admin site."
msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
-#: contrib/auth/models.py:105
+#: contrib/auth/models.py:110
msgid "active"
msgstr "actiu"
-#: contrib/auth/models.py:105
+#: contrib/auth/models.py:110
msgid ""
"Designates whether this user can log into the Django admin. Unselect this "
"instead of deleting accounts."
@@ -1777,11 +1777,11 @@ msgstr ""
"Designa si aquest usuari pot iniciar sessió a la interfície administrativa "
"Djano. Deselecciona-ho enlloc de esborrar comptes d'usuari."
-#: contrib/auth/models.py:106
+#: contrib/auth/models.py:111
msgid "superuser status"
msgstr "estat de superusuari"
-#: contrib/auth/models.py:106
+#: contrib/auth/models.py:111
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1789,15 +1789,15 @@ msgstr ""
"Designa que aquest usuari té tots els permisos sense assignar-los "
"explícitament."
-#: contrib/auth/models.py:107
+#: contrib/auth/models.py:112
msgid "last login"
msgstr "últim inici de sessió"
-#: contrib/auth/models.py:108
+#: contrib/auth/models.py:113
msgid "date joined"
msgstr "data de creació"
-#: contrib/auth/models.py:110
+#: contrib/auth/models.py:115
msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
@@ -1805,39 +1805,39 @@ msgstr ""
"Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els "
"permissos dels grups dels que sigui membre."
-#: contrib/auth/models.py:111
+#: contrib/auth/models.py:116
msgid "user permissions"
msgstr "permissos de l'usuari"
-#: contrib/auth/models.py:115
+#: contrib/auth/models.py:120
msgid "user"
msgstr "usuari"
-#: contrib/auth/models.py:116
+#: contrib/auth/models.py:121
msgid "users"
msgstr "usuaris"
-#: contrib/auth/models.py:122
+#: contrib/auth/models.py:127
msgid "Personal info"
msgstr "Informaciò personal"
-#: contrib/auth/models.py:123
+#: contrib/auth/models.py:128
msgid "Permissions"
msgstr "permissos"
-#: contrib/auth/models.py:124
+#: contrib/auth/models.py:129
msgid "Important dates"
msgstr "Dates importants"
-#: contrib/auth/models.py:125
+#: contrib/auth/models.py:130
msgid "Groups"
msgstr "Grups"
-#: contrib/auth/models.py:269
+#: contrib/auth/models.py:273
msgid "message"
msgstr "missatge"
-#: contrib/auth/models.py:282
+#: contrib/auth/models.py:286
msgid "AnonymousUser"
msgstr "AnonymousUser"
@@ -1861,7 +1861,7 @@ msgstr ""
msgid "This account is inactive."
msgstr "Aquest compte està inactiu"
-#: contrib/auth/forms.py:85
+#: contrib/auth/forms.py:84
msgid ""
"That e-mail address doesn't have an associated user account. Are you sure "
"you've registered?"
@@ -2423,7 +2423,7 @@ msgstr "L'any ha de ser posterior al 1900"
msgid "Invalid date: %s"
msgstr "Data invàlida: %s"
-#: core/validators.py:149 db/models/fields/__init__.py:463
+#: core/validators.py:149 db/models/fields/__init__.py:468
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD."
@@ -2431,7 +2431,7 @@ msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD."
msgid "Enter a valid time in HH:MM format."
msgstr "Introdueixi una hora vàlida en el format HH:MM."
-#: core/validators.py:158 db/models/fields/__init__.py:532
+#: core/validators.py:158 db/models/fields/__init__.py:537
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
msgstr "Introdueixi un data/hora vàlida en format YYYY-MM-DD HH:MM."
@@ -2558,35 +2558,29 @@ msgstr "Si us plau, introdueixi un número decimal vàlid."
#: core/validators.py:423
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
-msgid_plural ""
"Please enter a valid decimal number with at most %s total digits."
-msgstr[0] ""
+msgstr ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s digit."
-msgstr[1] ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s digits."
#: core/validators.py:426
#, python-format
msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit."
-msgid_plural ""
"Please enter a valid decimal number with a whole part of at most %s digits."
-msgstr[0] ""
+msgstr ""
"Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a "
"màxim %s dígit."
-msgstr[1] ""
"Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a "
"màxim %s dígits."
#: core/validators.py:429
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
-msgid_plural ""
"Please enter a valid decimal number with at most %s decimal places."
-msgstr[0] ""
+msgstr ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s dígit en la "
"part decimal."
-msgstr[1] ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s dígits en "
"la part decimal."
@@ -2983,52 +2977,51 @@ msgstr "Ja existeix un %(object)s del tipus %(type)s amb aquest %(field)s."
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "Ja existeix %(optname)s amb auqest %(fieldname)s."
-#: db/models/fields/__init__.py:373
+#: db/models/fields/__init__.py:378
msgid "This value must be an integer."
msgstr "Aquest valor ha de ser un enter."
-#: db/models/fields/__init__.py:408
+#: db/models/fields/__init__.py:413
msgid "This value must be either True or False."
msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)"
-#: db/models/fields/__init__.py:429
+#: db/models/fields/__init__.py:434
msgid "This field cannot be null."
msgstr "Aquest camp no pot ser null (estar buit)."
-#: db/models/fields/__init__.py:592
+#: db/models/fields/__init__.py:597
msgid "This value must be a decimal number."
msgstr "Aquest valor ha de ser un número decimal."
-#: db/models/fields/__init__.py:695
+#: db/models/fields/__init__.py:700
msgid "Enter a valid filename."
msgstr "Introdueixi un nom de fitxer vàlid."
-#: db/models/fields/__init__.py:818
+#: db/models/fields/__init__.py:824
msgid "This value must be either None, True or False."
msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)"
-#: db/models/fields/related.py:53
+#: db/models/fields/related.py:54
#, python-format
msgid "Please enter a valid %s."
msgstr "Si us plau, introdueixi un %s vàlid."
-#: db/models/fields/related.py:642
+#: db/models/fields/related.py:640
msgid "Separate multiple IDs with commas."
msgstr "Separi múltiples IDs amb comes."
-#: db/models/fields/related.py:644
+#: db/models/fields/related.py:642
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr "Premi \"Control\" o \"Command\" en un Mac per escollir més d'un."
-#: db/models/fields/related.py:691
+#: db/models/fields/related.py:689
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
-msgid_plural ""
"Please enter valid %(self)s IDs. The values %(value)r are invalid."
-msgstr[0] ""
+msgstr ""
"Si us plau, introdueixi IDs de %(self)s vàlids. El valor %(value)r és "
"invàlid."
-msgstr[1] ""
"Si us plau, introdueixi IDs de %(self)s vàlids. Els valors %(value)r són "
"invàlids."
+
diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.mo b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo
index a5b908df1f..581b176be4 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 8167253005..3ae0e9bad8 100644
--- a/django/conf/locale/ca/LC_MESSAGES/djangojs.po
+++ b/django/conf/locale/ca/LC_MESSAGES/djangojs.po
@@ -1,15 +1,14 @@
# translation of djangojs.po to
-# Spanish translation for the django-admin JS files.
-# Copyright (C)
-# This file is distributed under the same license as the PACKAGE package.
+# Catalan translation for the django-admin JS files.
+# This file is distributed under the same license as the Django package.
#
msgid ""
msgstr ""
"Project-Id-Version: djangojs\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-05-20 18:25+0200\n"
-"PO-Revision-Date: 2007-05-20 18:24+0200\n"
-"Last-Translator: Marc Fargas <marc@fargas.com>\n"
+"PO-Revision-Date: 2007-06-25 17:47+0200\n"
+"Last-Translator: Marc Fargas <telenieko@telenieko.com>\n"
"Language-Team: <es@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
diff --git a/django/conf/locale/da/LC_MESSAGES/djangojs.mo b/django/conf/locale/da/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..1db40df910
--- /dev/null
+++ 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
new file mode 100644
index 0000000000..4084313848
--- /dev/null
+++ b/django/conf/locale/da/LC_MESSAGES/djangojs.po
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-28 17:36+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr ""
diff --git a/django/conf/locale/ja/LC_MESSAGES/django.mo b/django/conf/locale/ja/LC_MESSAGES/django.mo
index 07d3994755..20eb7dbcd3 100644
--- a/django/conf/locale/ja/LC_MESSAGES/django.mo
+++ b/django/conf/locale/ja/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/ja/LC_MESSAGES/django.po b/django/conf/locale/ja/LC_MESSAGES/django.po
index ab761254ae..56f1bf99da 100644
--- a/django/conf/locale/ja/LC_MESSAGES/django.po
+++ b/django/conf/locale/ja/LC_MESSAGES/django.po
@@ -1,13 +1,12 @@
# Translation of django.po to japanese.
# Copyright (C) 2005,2006,2007 makoto tsuyuki
# This file is distributed under the same license as the PACKAGE package.
-# makoto tsuyuki <mtsuyuki@gmail.com>, 2005,2006,2007.
-#
+#
msgid ""
msgstr ""
"Project-Id-Version: Django 1.0\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-03-26 22:51+0900\n"
+"POT-Creation-Date: 2007-06-26 11:33+0900\n"
"PO-Revision-Date: 2006-05-18 00:28+0900\n"
"Last-Translator: makoto tsuyuki <mtsuyuki@gmail.com>\n"
"Language-Team: Japanese <django-ja@googlegroups.com>\n"
@@ -24,150 +23,162 @@ msgid "Bengali"
msgstr "ベンガル語"
#: conf/global_settings.py:41
+msgid "Bulgarian"
+msgstr "ブルガリア語"
+
+#: conf/global_settings.py:42
msgid "Catalan"
msgstr "カタロニア語"
-#: conf/global_settings.py:42
+#: conf/global_settings.py:43
msgid "Czech"
msgstr "チェコ語"
-#: conf/global_settings.py:43
+#: conf/global_settings.py:44
msgid "Welsh"
msgstr "ウェールズ語"
-#: conf/global_settings.py:44
+#: conf/global_settings.py:45
msgid "Danish"
msgstr "デンマーク語"
-#: conf/global_settings.py:45
+#: conf/global_settings.py:46
msgid "German"
msgstr "ドイツ語"
-#: conf/global_settings.py:46
+#: conf/global_settings.py:47
msgid "Greek"
msgstr "ギリシャ語"
-#: conf/global_settings.py:47
+#: conf/global_settings.py:48
msgid "English"
msgstr "英語"
-#: conf/global_settings.py:48
+#: conf/global_settings.py:49
msgid "Spanish"
msgstr "スペイン語"
-#: conf/global_settings.py:49
+#: conf/global_settings.py:50
msgid "Argentinean Spanish"
msgstr "アルゼンチンスペイン語"
-#: conf/global_settings.py:50
+#: conf/global_settings.py:51
+msgid "Persian"
+msgstr "ペルシア語"
+
+#: conf/global_settings.py:52
msgid "Finnish"
msgstr "フィンランド語"
-#: conf/global_settings.py:51
+#: conf/global_settings.py:53
msgid "French"
msgstr "フランス語"
-#: conf/global_settings.py:52
+#: conf/global_settings.py:54
msgid "Galician"
msgstr "ガリシア語"
-#: conf/global_settings.py:53
+#: conf/global_settings.py:55
msgid "Hungarian"
msgstr "ハンガリー語"
-#: conf/global_settings.py:54
+#: conf/global_settings.py:56
msgid "Hebrew"
msgstr "ヘブライ語"
-#: conf/global_settings.py:55
+#: conf/global_settings.py:57
msgid "Icelandic"
msgstr "アイスランド語"
-#: conf/global_settings.py:56
+#: conf/global_settings.py:58
msgid "Italian"
msgstr "イタリア語"
-#: conf/global_settings.py:57
+#: conf/global_settings.py:59
msgid "Japanese"
msgstr "日本語"
-#: conf/global_settings.py:58
+#: conf/global_settings.py:60
+msgid "Korean"
+msgstr "韓国語"
+
+#: conf/global_settings.py:61
msgid "Kannada"
msgstr "カンナダ語"
-#: conf/global_settings.py:59
+#: conf/global_settings.py:62
msgid "Latvian"
msgstr "ラトビア語"
-#: conf/global_settings.py:60
+#: conf/global_settings.py:63
msgid "Macedonian"
msgstr "マケドニア語"
-#: conf/global_settings.py:61
+#: conf/global_settings.py:64
msgid "Dutch"
msgstr "オランダ語"
-#: conf/global_settings.py:62
+#: conf/global_settings.py:65
msgid "Norwegian"
msgstr "ノルウェー語"
-#: conf/global_settings.py:63
+#: conf/global_settings.py:66
msgid "Polish"
msgstr "ポーランド語"
-#: conf/global_settings.py:64
+#: conf/global_settings.py:67
msgid "Portugese"
msgstr "ポルトガル語"
-#: conf/global_settings.py:65
+#: conf/global_settings.py:68
msgid "Brazilian"
msgstr "ブラジル語"
-#: conf/global_settings.py:66
+#: conf/global_settings.py:69
msgid "Romanian"
msgstr "ルーマニア語"
-#: conf/global_settings.py:67
+#: conf/global_settings.py:70
msgid "Russian"
msgstr "ロシア語"
-#: conf/global_settings.py:68
+#: conf/global_settings.py:71
msgid "Slovak"
msgstr "スロバキア語"
-#: conf/global_settings.py:69
+#: conf/global_settings.py:72
msgid "Slovenian"
msgstr "スロヴェニア語"
-#: conf/global_settings.py:70
+#: conf/global_settings.py:73
msgid "Serbian"
msgstr "セルビア語"
-#: conf/global_settings.py:71
+#: conf/global_settings.py:74
msgid "Swedish"
msgstr "スウェーデン語"
-#: conf/global_settings.py:72
+#: conf/global_settings.py:75
msgid "Tamil"
msgstr "タミル語"
-#: conf/global_settings.py:73
+#: conf/global_settings.py:76
msgid "Telugu"
msgstr "テルグ語"
-#: conf/global_settings.py:74
+#: conf/global_settings.py:77
msgid "Turkish"
msgstr "トルコ語"
-#: conf/global_settings.py:75
+#: conf/global_settings.py:78
msgid "Ukrainian"
msgstr "ウクライナ語"
-#: conf/global_settings.py:76
+#: conf/global_settings.py:79
msgid "Simplified Chinese"
msgstr "簡体字中国語"
-#: conf/global_settings.py:77
+#: conf/global_settings.py:80
msgid "Traditional Chinese"
msgstr "繁体字中国語"
@@ -205,17 +216,17 @@ msgstr "今月"
msgid "This year"
msgstr "今年"
-#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143 newforms/widgets.py:181
#: oldforms/__init__.py:577
msgid "Yes"
msgstr "はい"
-#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:143 newforms/widgets.py:181
#: oldforms/__init__.py:577
msgid "No"
msgstr "いいえ"
-#: contrib/admin/filterspecs.py:150 newforms/widgets.py:170
+#: contrib/admin/filterspecs.py:150 newforms/widgets.py:181
#: oldforms/__init__.py:577
msgid "Unknown"
msgstr "不明"
@@ -781,17 +792,17 @@ msgstr "現在:"
msgid "Change:"
msgstr "変更:"
-#: contrib/admin/templatetags/admin_list.py:247
+#: contrib/admin/templatetags/admin_list.py:249
msgid "All dates"
msgstr "いつでも"
-#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257
+#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:262
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "%(name)s \"%(obj)s\" を追加しました。"
-#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261
-#: contrib/admin/views/main.py:347
+#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:266
+#: contrib/admin/views/main.py:352
msgid "You may edit it again below."
msgstr "続けて編集できます。"
@@ -895,9 +906,9 @@ msgstr "%s の数"
msgid "Fields on %s objects"
msgstr "%s のフィールド"
-#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301
-#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309
-#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312
+#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310
+#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313
msgid "Integer"
msgstr "整数"
@@ -905,7 +916,7 @@ msgstr "整数"
msgid "Boolean (Either True or False)"
msgstr "ブール値 (真: True または偽: False)"
-#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311
+#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312
#, python-format
msgid "String (up to %(maxlength)s)"
msgstr "文字列 ( %(maxlength)s 字まで )"
@@ -923,148 +934,152 @@ msgid "Date (with time)"
msgstr "日時"
#: contrib/admin/views/doc.py:297
+msgid "Decimal number"
+msgstr "10 進数 (小数可)"
+
+#: contrib/admin/views/doc.py:298
msgid "E-mail address"
msgstr "メールアドレス"
-#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299
-#: contrib/admin/views/doc.py:302
+#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300
+#: contrib/admin/views/doc.py:303
msgid "File path"
msgstr "ファイルの場所"
-#: contrib/admin/views/doc.py:300
-msgid "Decimal number"
-msgstr "10 進数 (小数可)"
+#: contrib/admin/views/doc.py:301
+msgid "Floating point number"
+msgstr "浮動小数点"
-#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85
+#: contrib/admin/views/doc.py:305 contrib/comments/models.py:85
msgid "IP address"
msgstr "IP アドレス"
-#: contrib/admin/views/doc.py:306
+#: contrib/admin/views/doc.py:307
msgid "Boolean (Either True, False or None)"
msgstr "ブール値 (真: True 、偽: False または None)"
-#: contrib/admin/views/doc.py:307
+#: contrib/admin/views/doc.py:308
msgid "Relation to parent model"
msgstr "親モデルへのリレーション"
-#: contrib/admin/views/doc.py:308
+#: contrib/admin/views/doc.py:309
msgid "Phone number"
msgstr "電話番号"
-#: contrib/admin/views/doc.py:313
+#: contrib/admin/views/doc.py:314
msgid "Text"
msgstr "テキスト"
-#: contrib/admin/views/doc.py:314
+#: contrib/admin/views/doc.py:315
msgid "Time"
msgstr "時刻"
-#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7
+#: contrib/admin/views/doc.py:316 contrib/flatpages/models.py:7
msgid "URL"
msgstr "URL"
-#: contrib/admin/views/doc.py:316
+#: contrib/admin/views/doc.py:317
msgid "U.S. state (two uppercase letters)"
msgstr "アメリカの州 (大文字二文字で)"
-#: contrib/admin/views/doc.py:317
+#: contrib/admin/views/doc.py:318
msgid "XML text"
msgstr "XMLテキスト"
-#: contrib/admin/views/doc.py:343
+#: contrib/admin/views/doc.py:344
#, python-format
msgid "%s does not appear to be a urlpattern object"
msgstr "%s はurlpatternオブジェクトでは無いようです"
-#: contrib/admin/views/main.py:223
+#: contrib/admin/views/main.py:228
msgid "Site administration"
msgstr "サイト管理"
-#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356
+#: contrib/admin/views/main.py:276 contrib/admin/views/main.py:361
#, python-format
msgid "You may add another %s below."
msgstr "続けて別の %s を追加できます。"
-#: contrib/admin/views/main.py:289
+#: contrib/admin/views/main.py:294
#, python-format
msgid "Add %s"
msgstr "%s を追加"
-#: contrib/admin/views/main.py:335
+#: contrib/admin/views/main.py:340
#, python-format
msgid "Added %s."
msgstr "%s を追加しました。"
-#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337
-#: contrib/admin/views/main.py:339 db/models/manipulators.py:308
+#: contrib/admin/views/main.py:340 contrib/admin/views/main.py:342
+#: contrib/admin/views/main.py:344 db/models/manipulators.py:308
msgid "and"
msgstr "と"
-#: contrib/admin/views/main.py:337
+#: contrib/admin/views/main.py:342
#, python-format
msgid "Changed %s."
msgstr "%s を変更しました。"
-#: contrib/admin/views/main.py:339
+#: contrib/admin/views/main.py:344
#, python-format
msgid "Deleted %s."
msgstr "%s を削除しました。"
-#: contrib/admin/views/main.py:342
+#: contrib/admin/views/main.py:347
msgid "No fields changed."
msgstr "変更はありませんでした。"
-#: contrib/admin/views/main.py:345
+#: contrib/admin/views/main.py:350
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "%(name)s \"%(obj)s\" を変更しました。"
-#: contrib/admin/views/main.py:353
+#: contrib/admin/views/main.py:358
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr "%(name)s \"%(obj)s\" を追加しました。続けて編集できます。"
-#: contrib/admin/views/main.py:391
+#: contrib/admin/views/main.py:396
#, python-format
msgid "Change %s"
msgstr "%s を変更"
-#: contrib/admin/views/main.py:476
+#: contrib/admin/views/main.py:481
#, python-format
msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
msgstr "%(name)s に %(fieldname)s が一つ以上あります: %(obj)s"
-#: contrib/admin/views/main.py:481
+#: contrib/admin/views/main.py:486
#, python-format
msgid "One or more %(fieldname)s in %(name)s:"
msgstr "%(name)s に %(fieldname)s が一つ以上あります:"
-#: contrib/admin/views/main.py:514
+#: contrib/admin/views/main.py:518
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "%(name)s \"%(obj)s\" を削除しました。"
-#: contrib/admin/views/main.py:517
+#: contrib/admin/views/main.py:521
msgid "Are you sure?"
msgstr "よろしいですか?"
-#: contrib/admin/views/main.py:539
+#: contrib/admin/views/main.py:543
#, python-format
msgid "Change history: %s"
msgstr "変更履歴: %s"
-#: contrib/admin/views/main.py:573
+#: contrib/admin/views/main.py:577
#, python-format
msgid "Select %s"
msgstr "%s を選択"
-#: contrib/admin/views/main.py:573
+#: contrib/admin/views/main.py:577
#, python-format
msgid "Select %s to change"
msgstr "変更する %s を選択"
-#: contrib/admin/views/main.py:768
+#: contrib/admin/views/main.py:772
msgid "Database error"
msgstr "データベースエラー"
@@ -1088,7 +1103,7 @@ msgstr ""
msgid "This account is inactive."
msgstr "アカウントが無効です。"
-#: contrib/auth/forms.py:85
+#: contrib/auth/forms.py:84
msgid ""
"That e-mail address doesn't have an associated user account. Are you sure "
"you've registered?"
@@ -1102,35 +1117,35 @@ msgstr "新しいパスワード(確認用)が一致しません。"
msgid "Your old password was entered incorrectly. Please enter it again."
msgstr "元のパスワードが間違っています。もう一度入力してください。"
-#: contrib/auth/models.py:38 contrib/auth/models.py:57
+#: contrib/auth/models.py:49 contrib/auth/models.py:69
msgid "name"
msgstr "名前"
-#: contrib/auth/models.py:40
+#: contrib/auth/models.py:51
msgid "codename"
msgstr "コード名"
-#: contrib/auth/models.py:42
+#: contrib/auth/models.py:54
msgid "permission"
msgstr "パーミッション"
-#: contrib/auth/models.py:43 contrib/auth/models.py:58
+#: contrib/auth/models.py:55 contrib/auth/models.py:70
msgid "permissions"
msgstr "パーミッション"
-#: contrib/auth/models.py:60
+#: contrib/auth/models.py:73
msgid "group"
msgstr "グループ"
-#: contrib/auth/models.py:61 contrib/auth/models.py:100
+#: contrib/auth/models.py:74 contrib/auth/models.py:114
msgid "groups"
msgstr "グループ"
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:104
msgid "username"
msgstr "ユーザ名"
-#: contrib/auth/models.py:90
+#: contrib/auth/models.py:104
msgid ""
"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
"digits and underscores)."
@@ -1138,23 +1153,23 @@ msgstr ""
"この項目は必須です。半角アルファベット、半角数字、半角アンダーバーで30文字以"
"下にしてください。"
-#: contrib/auth/models.py:91
+#: contrib/auth/models.py:105
msgid "first name"
msgstr "名"
-#: contrib/auth/models.py:92
+#: contrib/auth/models.py:106
msgid "last name"
msgstr "姓"
-#: contrib/auth/models.py:93
+#: contrib/auth/models.py:107
msgid "e-mail address"
msgstr "メールアドレス"
-#: contrib/auth/models.py:94
+#: contrib/auth/models.py:108
msgid "password"
msgstr "パスワード"
-#: contrib/auth/models.py:94
+#: contrib/auth/models.py:108
msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>."
@@ -1162,43 +1177,43 @@ msgstr ""
"'[algo]$[salt]$[hexdigest]'形式か、<a href=\"password/\">パスワード変更フォー"
"ム</a>を使ってください。"
-#: contrib/auth/models.py:95
+#: contrib/auth/models.py:109
msgid "staff status"
msgstr "スタッフ権限"
-#: contrib/auth/models.py:95
+#: contrib/auth/models.py:109
msgid "Designates whether the user can log into this admin site."
msgstr "ユーザが管理サイトにログイン可能かどうかを示します。"
-#: contrib/auth/models.py:96
+#: contrib/auth/models.py:110
msgid "active"
msgstr "有効"
-#: contrib/auth/models.py:96
+#: contrib/auth/models.py:110
msgid ""
"Designates whether this user can log into the Django admin. Unselect this "
"instead of deleting accounts."
msgstr "ユーザが管理サイトにログイン可能かどうかを示します。"
-#: contrib/auth/models.py:97
+#: contrib/auth/models.py:111
msgid "superuser status"
msgstr "スーパーユーザ権限"
-#: contrib/auth/models.py:97
+#: contrib/auth/models.py:111
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
msgstr "全ての権限を持っているとみなされます。"
-#: contrib/auth/models.py:98
+#: contrib/auth/models.py:112
msgid "last login"
msgstr "最終ログイン"
-#: contrib/auth/models.py:99
+#: contrib/auth/models.py:113
msgid "date joined"
msgstr "登録日"
-#: contrib/auth/models.py:101
+#: contrib/auth/models.py:115
msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
@@ -1206,39 +1221,43 @@ msgstr ""
"手動で付与したパーミッションに加え、所属しているグループに付与された全ての"
"パーミッションを獲得します。"
-#: contrib/auth/models.py:102
+#: contrib/auth/models.py:116
msgid "user permissions"
msgstr "ユーザパーミッション"
-#: contrib/auth/models.py:105
+#: contrib/auth/models.py:120
msgid "user"
msgstr "ユーザ"
-#: contrib/auth/models.py:106
+#: contrib/auth/models.py:121
msgid "users"
msgstr "ユーザ"
-#: contrib/auth/models.py:111
+#: contrib/auth/models.py:127
msgid "Personal info"
msgstr "個人情報"
-#: contrib/auth/models.py:112
+#: contrib/auth/models.py:128
msgid "Permissions"
msgstr "パーミッション"
-#: contrib/auth/models.py:113
+#: contrib/auth/models.py:129
msgid "Important dates"
msgstr "重要な日程"
-#: contrib/auth/models.py:114
+#: contrib/auth/models.py:130
msgid "Groups"
msgstr "グループ"
-#: contrib/auth/models.py:258
+#: contrib/auth/models.py:272
msgid "message"
msgstr "メッセージ"
-#: contrib/auth/views.py:39
+#: contrib/auth/models.py:285
+msgid "AnonymousUser"
+msgstr "非認証ユーザ"
+
+#: contrib/auth/views.py:40
msgid "Logged out"
msgstr "ログアウト"
@@ -1660,11 +1679,260 @@ msgstr "8"
msgid "nine"
msgstr "9"
+#: contrib/localflavor/au/forms.py:18
+msgid "Enter a 4 digit post code."
+msgstr "4桁でポストコードを入力してください。"
+
+#: contrib/localflavor/br/forms.py:18
+msgid "Enter a zip code in the format XXXXX-XXX."
+msgstr "XXXXX-XXXの形式でZipコードを入力してください。"
+
+#: contrib/localflavor/br/forms.py:30
+msgid "Phone numbers must be in XX-XXXX-XXXX format."
+msgstr "電話番号は XX-XXXX-XXXX 形式で入力してください。"
+
+#: contrib/localflavor/br/forms.py:72
+msgid "This field requires only numbers."
+msgstr "このフィールドは必須です(数値のみ)。"
+
+#: contrib/localflavor/br/forms.py:74
+msgid "This field requires at most 11 digits or 14 characters."
+msgstr "11桁の数字か14文字で入力してください。"
+
+#: contrib/localflavor/br/forms.py:84
+msgid "Invalid CPF number."
+msgstr "ブラジル納税者番号が無効です。"
+
+#: contrib/localflavor/br/forms.py:106
+msgid "This field requires at least 14 digits"
+msgstr "14桁以上で入力して下さい。"
+
+#: contrib/localflavor/br/forms.py:116
+msgid "Invalid CNPJ number."
+msgstr "納税登録番号が正しくありません。"
+
+#: contrib/localflavor/ch/ch_states.py:5
+msgid "Aargau"
+msgstr "Aargau"
+
+#: contrib/localflavor/ch/ch_states.py:6
+msgid "Appenzell Innerrhoden"
+msgstr "Appenzell Innerrhoden"
+
+#: contrib/localflavor/ch/ch_states.py:7
+msgid "Appenzell Ausserrhoden"
+msgstr "Appenzell Ausserrhoden"
+
+#: contrib/localflavor/ch/ch_states.py:8
+msgid "Basel-Stadt"
+msgstr "Basel-Stadt"
+
+#: contrib/localflavor/ch/ch_states.py:9
+msgid "Basel-Land"
+msgstr "Basel-Land"
+
+#: contrib/localflavor/ch/ch_states.py:10
+msgid "Berne"
+msgstr "Berne"
+
+#: contrib/localflavor/ch/ch_states.py:11
+msgid "Fribourg"
+msgstr "Fribourg"
+
+#: contrib/localflavor/ch/ch_states.py:12
+msgid "Geneva"
+msgstr "Geneva"
+
+#: contrib/localflavor/ch/ch_states.py:13
+msgid "Glarus"
+msgstr "Glarus"
+
+#: contrib/localflavor/ch/ch_states.py:14
+msgid "Graubuenden"
+msgstr "Graubuenden"
+
+#: contrib/localflavor/ch/ch_states.py:15
+msgid "Jura"
+msgstr "Jura"
+
+#: contrib/localflavor/ch/ch_states.py:16
+msgid "Lucerne"
+msgstr "Lucerne"
+
+#: contrib/localflavor/ch/ch_states.py:17
+msgid "Neuchatel"
+msgstr "Neuchatel"
+
+#: contrib/localflavor/ch/ch_states.py:18
+msgid "Nidwalden"
+msgstr "Nidwalden"
+
+#: contrib/localflavor/ch/ch_states.py:19
+msgid "Obwalden"
+msgstr "Obwalden"
+
+#: contrib/localflavor/ch/ch_states.py:20
+msgid "Schaffhausen"
+msgstr "Schaffhausen"
+
+#: contrib/localflavor/ch/ch_states.py:21
+msgid "Schwyz"
+msgstr "Schwyz"
+
+#: contrib/localflavor/ch/ch_states.py:22
+msgid "Solothurn"
+msgstr "Solothurn"
+
+#: contrib/localflavor/ch/ch_states.py:23
+msgid "St. Gallen"
+msgstr "St. Gallen"
+
+#: contrib/localflavor/ch/ch_states.py:24
+msgid "Thurgau"
+msgstr "Thurgau"
+
+#: contrib/localflavor/ch/ch_states.py:25
+msgid "Ticino"
+msgstr "Ticino"
+
+#: contrib/localflavor/ch/ch_states.py:26
+msgid "Uri"
+msgstr "Uri"
+
+#: contrib/localflavor/ch/ch_states.py:27
+msgid "Valais"
+msgstr "Valais"
+
+#: contrib/localflavor/ch/ch_states.py:28
+msgid "Vaud"
+msgstr "Vaud"
+
+#: contrib/localflavor/ch/ch_states.py:29
+msgid "Zug"
+msgstr "Zug"
+
+#: contrib/localflavor/ch/ch_states.py:30
+msgid "Zurich"
+msgstr "Zurich"
+
+#: contrib/localflavor/ch/forms.py:18 contrib/localflavor/no/forms.py:15
+msgid "Enter a zip code in the format XXXX."
+msgstr "XXXXの形式でZipコードを入力してください。"
+
+#: contrib/localflavor/ch/forms.py:90
+msgid ""
+"Enter a valid Swiss identity or passport card number in X1234567<0 or "
+"1234567890 format."
+msgstr "スイス アイデンティティかパスポート番号を X1234567<0 か 1234567890 の形式で入力して下さい。"
+
+#: contrib/localflavor/cl/forms.py:21
+msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X."
+msgstr "XX.XXX.XXX-Xの形式でチリ納税者番号を入力してください。"
+
+#: contrib/localflavor/cl/forms.py:26
+msgid "Enter valid a Chilean RUT"
+msgstr "正しいチリ納税者番号を入力してください。"
+
+#: contrib/localflavor/de/de_states.py:5
+msgid "Baden-Wuerttemberg"
+msgstr "Baden-Wuerttemberg"
+
+#: contrib/localflavor/de/de_states.py:6
+msgid "Bavaria"
+msgstr "Bavaria"
+
+#: contrib/localflavor/de/de_states.py:7
+msgid "Berlin"
+msgstr "Berlin"
+
+#: contrib/localflavor/de/de_states.py:8
+msgid "Brandenburg"
+msgstr "Brandenburg"
+
+#: contrib/localflavor/de/de_states.py:9
+msgid "Bremen"
+msgstr "Bremen"
+
+#: contrib/localflavor/de/de_states.py:10
+msgid "Hamburg"
+msgstr "Hamburg"
+
+#: contrib/localflavor/de/de_states.py:11
+msgid "Hessen"
+msgstr "Hessen"
+
+#: contrib/localflavor/de/de_states.py:12
+msgid "Mecklenburg-Western Pomerania"
+msgstr "Mecklenburg-Western Pomerania"
+
+#: contrib/localflavor/de/de_states.py:13
+msgid "Lower Saxony"
+msgstr "Lower Saxony"
+
+#: contrib/localflavor/de/de_states.py:14
+msgid "North Rhine-Westphalia"
+msgstr "North Rhine-Westphalia"
+
+#: contrib/localflavor/de/de_states.py:15
+msgid "Rhineland-Palatinate"
+msgstr "Rhineland-Palatinate"
+
+#: contrib/localflavor/de/de_states.py:16
+msgid "Saarland"
+msgstr "Saarland"
+
+#: contrib/localflavor/de/de_states.py:17
+msgid "Saxony"
+msgstr "Saxony"
+
+#: contrib/localflavor/de/de_states.py:18
+msgid "Saxony-Anhalt"
+msgstr "Saxony-Anhalt"
+
+#: contrib/localflavor/de/de_states.py:19
+msgid "Schleswig-Holstein"
+msgstr "Schleswig-Holstein"
+
+#: contrib/localflavor/de/de_states.py:20
+msgid "Thuringia"
+msgstr "Thuringia"
+
+#: contrib/localflavor/de/forms.py:16 contrib/localflavor/fi/forms.py:14
#: contrib/localflavor/fr/forms.py:17
-#, fuzzy
msgid "Enter a zip code in the format XXXXX."
msgstr "XXXXXの形式でZipコードを入力してください。"
+#: contrib/localflavor/de/forms.py:60
+msgid ""
+"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X "
+"format."
+msgstr "XXXXXXXXXXX-XXXXXXX-XXXXXXX-X の形式でドイツIDカード番号を入力して下さい。"
+
+#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45
+msgid "Enter a valid Finnish social security number."
+msgstr "フィンランド社会保証番号を正しく入力してください。"
+
+#: contrib/localflavor/is_/forms.py:16
+msgid ""
+"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX."
+msgstr "XXXXXか、XXXXX-XXXXの形式でアイスランド納税者番号を入力してください。"
+
+#: contrib/localflavor/is_/forms.py:30
+msgid "The Icelandic identification number is not valid."
+msgstr "アイスランド納税者番号を正しく入力して下さい。"
+
+#: contrib/localflavor/it/forms.py:16
+msgid "Enter a valid zip code."
+msgstr "Zipコードを正しく入力してください。"
+
+#: contrib/localflavor/it/forms.py:41
+msgid "Enter a valid Social Security number."
+msgstr "社会保障番号番号を正しく入力してください。"
+
+#: contrib/localflavor/it/forms.py:68
+msgid "Enter a valid VAT number."
+msgstr "VAT番号を正しく入力してください。"
+
#: contrib/localflavor/jp/forms.py:21
msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX."
msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
@@ -1857,14 +2125,24 @@ msgstr "鹿児島県"
msgid "Okinawa"
msgstr "沖縄県"
+#: contrib/localflavor/no/forms.py:36
+msgid "Enter a valid Norwegian social security number."
+msgstr "ノルウェー社会保障番号を正しく入力してください。"
+
#: contrib/localflavor/uk/forms.py:18
msgid "Enter a postcode. A space is required between the two postcode parts."
-msgstr "ポスタルコードを入力してください。コードとコードの間は半角のスペースで区切ってください。"
+msgstr ""
+"ポスタルコードを入力してください。コードとコードの間は半角のスペースで区切っ"
+"てください。"
-#: contrib/localflavor/usa/forms.py:17
+#: contrib/localflavor/us/forms.py:18
msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX."
msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。"
+#: contrib/localflavor/us/forms.py:51
+msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format."
+msgstr "XXX-XX-XXXX の形式で、米国社会保障番号を入力して下さい。"
+
#: contrib/redirects/models.py:7
msgid "redirect from"
msgstr "リダイレクト元"
@@ -1929,92 +2207,92 @@ msgstr "サイト"
msgid "sites"
msgstr "サイト"
-#: core/validators.py:64
+#: core/validators.py:65
msgid "This value must contain only letters, numbers and underscores."
msgstr "半角の英数字およびアンダースコア以外は使用できません。"
-#: core/validators.py:68
+#: core/validators.py:69
msgid ""
"This value must contain only letters, numbers, underscores, dashes or "
"slashes."
msgstr ""
"半角の英数字、アンダースコア、ダッシュ、スラッシュ以外は使用できません。"
-#: core/validators.py:72
+#: core/validators.py:73
msgid "This value must contain only letters, numbers, underscores or hyphens."
msgstr "半角の英数字、アンダースコア、ハイフン以外は使用できません。"
-#: core/validators.py:76
+#: core/validators.py:77
msgid "Uppercase letters are not allowed here."
msgstr "大文字はここでは使用できません。"
-#: core/validators.py:80
+#: core/validators.py:81
msgid "Lowercase letters are not allowed here."
msgstr "小文字はここでは使用できません。"
-#: core/validators.py:87
+#: core/validators.py:88
msgid "Enter only digits separated by commas."
msgstr "カンマ区切りの数字だけを入力してください。"
-#: core/validators.py:99
+#: core/validators.py:100
msgid "Enter valid e-mail addresses separated by commas."
msgstr "カンマ区切りの有効なメールアドレスを入力してください。"
-#: core/validators.py:103
+#: core/validators.py:104
msgid "Please enter a valid IP address."
msgstr "有効な IP アドレスを入力してください。"
-#: core/validators.py:107
+#: core/validators.py:108
msgid "Empty values are not allowed here."
msgstr "入力は必須です。"
-#: core/validators.py:111
+#: core/validators.py:112
msgid "Non-numeric characters aren't allowed here."
msgstr "数値以外は使用できません。"
-#: core/validators.py:115
+#: core/validators.py:116
msgid "This value can't be comprised solely of digits."
msgstr "数値だけの値にはできません。"
-#: core/validators.py:120 newforms/fields.py:126
+#: core/validators.py:121 newforms/fields.py:135
msgid "Enter a whole number."
msgstr "整数を入力してください。"
-#: core/validators.py:124
+#: core/validators.py:125
msgid "Only alphabetical characters are allowed here."
msgstr "半角アルファベット以外使用できません。"
-#: core/validators.py:139
+#: core/validators.py:140
msgid "Year must be 1900 or later."
msgstr "1900年以降を指定してください。"
-#: core/validators.py:143
+#: core/validators.py:144
#, python-format
msgid "Invalid date: %s"
msgstr "無効な日付: %s"
-#: core/validators.py:148 db/models/fields/__init__.py:457
+#: core/validators.py:149 db/models/fields/__init__.py:468
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "YYYY-MM-DD形式で日付を入力してください。"
-#: core/validators.py:153
+#: core/validators.py:154
msgid "Enter a valid time in HH:MM format."
msgstr "HH:MM形式で時刻を入力してください。"
-#: core/validators.py:157 db/models/fields/__init__.py:526
+#: core/validators.py:158 db/models/fields/__init__.py:537
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
msgstr "YYYY-MM-DD HH:MM形式で日時を入力してください。"
-#: core/validators.py:162 newforms/fields.py:269
+#: core/validators.py:163 newforms/fields.py:339
msgid "Enter a valid e-mail address."
msgstr "有効なメールアドレスを入力してください。"
-#: core/validators.py:174 core/validators.py:445 oldforms/__init__.py:672
+#: core/validators.py:175 core/validators.py:453 oldforms/__init__.py:672
msgid "No file was submitted. Check the encoding type on the form."
msgstr ""
"ファイルが取得できませんでした。formのencoding typeを確認してください。"
-#: core/validators.py:178
+#: core/validators.py:179
msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
@@ -2022,26 +2300,26 @@ msgstr ""
"画像をアップロードしてください。アップロードした画像は画像でないか、または壊"
"れています。"
-#: core/validators.py:185
+#: core/validators.py:186
#, python-format
msgid "The URL %s does not point to a valid image."
msgstr "URL ( %s ) は画像ではありません。"
-#: core/validators.py:189
+#: core/validators.py:190
#, python-format
msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
msgstr "電話番号は XXX-XXX-XXXX 形式で入力してください。\"%s\" は無効です。"
-#: core/validators.py:197
+#: core/validators.py:198
#, python-format
msgid "The URL %s does not point to a valid QuickTime video."
msgstr "URL ( %s ) は QuickTime ビデオではありません。"
-#: core/validators.py:201
+#: core/validators.py:202
msgid "A valid URL is required."
msgstr "正しい URL を入力してください。"
-#: core/validators.py:215
+#: core/validators.py:216
#, python-format
msgid ""
"Valid HTML is required. Specific errors are:\n"
@@ -2050,86 +2328,86 @@ msgstr ""
"有効な HTML を入力してください。エラー:\n"
"%s"
-#: core/validators.py:222
+#: core/validators.py:223
#, python-format
msgid "Badly formed XML: %s"
msgstr "不正な XML です: %s"
-#: core/validators.py:239
+#: core/validators.py:240
#, python-format
msgid "Invalid URL: %s"
msgstr "無効なURL: %s"
-#: core/validators.py:244 core/validators.py:246
+#: core/validators.py:245 core/validators.py:247
#, python-format
msgid "The URL %s is a broken link."
msgstr "URL ( %s ) はリンクが壊れています。"
-#: core/validators.py:252
+#: core/validators.py:253
msgid "Enter a valid U.S. state abbreviation."
msgstr "正しい米州略称を入力してください。"
-#: core/validators.py:266
+#: core/validators.py:267
#, python-format
msgid "Watch your mouth! The word %s is not allowed here."
msgid_plural "Watch your mouth! The words %s are not allowed here."
msgstr[0] "言葉使いに気を付けて! %s という言葉は使えません。"
msgstr[1] "言葉使いに気を付けて! %s という言葉は使えません。"
-#: core/validators.py:273
+#: core/validators.py:274
#, python-format
msgid "This field must match the '%s' field."
msgstr "このフィールドは '%s' フィールドと一致せねばなりません。"
-#: core/validators.py:292
+#: core/validators.py:293
msgid "Please enter something for at least one field."
msgstr "少なくとも一つのフィールドに何か入力してください。"
-#: core/validators.py:301 core/validators.py:312
+#: core/validators.py:302 core/validators.py:313
msgid "Please enter both fields or leave them both empty."
msgstr "両方のフィールドに入力するか、両方とも未入力にしてください。"
-#: core/validators.py:320
+#: core/validators.py:321
#, python-format
msgid "This field must be given if %(field)s is %(value)s"
msgstr ""
"%(field)s を %(value)s にするのなら、このフィールドに必ず入力してください。"
-#: core/validators.py:333
+#: core/validators.py:334
#, python-format
msgid "This field must be given if %(field)s is not %(value)s"
msgstr ""
"%(field)s を %(value)s にしないのなら、このフィールドに必ず入力してください。"
-#: core/validators.py:352
+#: core/validators.py:353
msgid "Duplicate values are not allowed."
msgstr "重複する値は認められません。"
-#: core/validators.py:367
+#: core/validators.py:368
#, python-format
msgid "This value must be between %(lower)s and %(upper)s."
msgstr "この値は %(lower)s から %(upper)s の間でなければなりません。"
-#: core/validators.py:369
+#: core/validators.py:370
#, python-format
msgid "This value must be at least %s."
msgstr "この値は %s 以上でなければなりません。"
-#: core/validators.py:371
+#: core/validators.py:372
#, python-format
msgid "This value must be no more than %s."
msgstr "この値は %s より小さくなければなりません。"
-#: core/validators.py:407
+#: core/validators.py:408
#, python-format
msgid "This value must be a power of %s."
msgstr "この値は %s の累乗でなければなりません。"
-#: core/validators.py:418
+#: core/validators.py:417
msgid "Please enter a valid decimal number."
msgstr "有効な 10 進数を入力してください。"
-#: core/validators.py:422
+#: core/validators.py:423
#, python-format
msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
@@ -2137,7 +2415,7 @@ msgid_plural ""
msgstr[0] "全体で %s 文字以下の数字を入力してください。"
msgstr[1] "全体で %s 文字以下の数字を入力してください。"
-#: core/validators.py:425
+#: core/validators.py:426
#, python-format
msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit."
@@ -2146,7 +2424,7 @@ msgid_plural ""
msgstr[0] "整数部は %s 文字以下の数字を入力してください。"
msgstr[1] "整数部は %s 文字以下の数字を入力してください。"
-#: core/validators.py:428
+#: core/validators.py:429
#, python-format
msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
@@ -2154,37 +2432,41 @@ msgid_plural ""
msgstr[0] "小数部は %s 文字以下の数字を入力してください。"
msgstr[1] "小数部は %s 文字以下の数字を入力してください。"
-#: core/validators.py:438
+#: core/validators.py:437
+msgid "Please enter a valid floating point number."
+msgstr "有効な 小数 を入力してください。"
+
+#: core/validators.py:446
#, python-format
msgid "Make sure your uploaded file is at least %s bytes big."
msgstr "アップロードするファイルの大きさは %s バイト以上にしてください。"
-#: core/validators.py:439
+#: core/validators.py:447
#, python-format
msgid "Make sure your uploaded file is at most %s bytes big."
msgstr "アップロードするファイルの大きさは %s 最大バイトまでです。"
-#: core/validators.py:456
+#: core/validators.py:464
msgid "The format for this field is wrong."
msgstr "フィールドの形式が正しくありません。"
-#: core/validators.py:471
+#: core/validators.py:479
msgid "This field is invalid."
msgstr "このフィールドは無効です。"
-#: core/validators.py:507
+#: core/validators.py:515
#, python-format
msgid "Could not retrieve anything from %s."
msgstr "%s から何も検索できませんでした。"
-#: core/validators.py:510
+#: core/validators.py:518
#, python-format
msgid ""
"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
msgstr ""
"URL %(url)s は無効なコンテンツタイプヘッダ '%(contenttype)s' を返しました。"
-#: core/validators.py:543
+#: core/validators.py:551
#, python-format
msgid ""
"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
@@ -2193,7 +2475,7 @@ msgstr ""
"%(line)s 行目から始まる %(tag)s タグを閉じてください (\"%(start)s\" で始まる"
"行です)。"
-#: core/validators.py:547
+#: core/validators.py:555
#, python-format
msgid ""
"Some text starting on line %(line)s is not allowed in that context. (Line "
@@ -2202,7 +2484,7 @@ msgstr ""
"%(line)s 行目から始まるテキストはこのコンテキストでは使えません。 (\"%(start)"
"s\" で始まる行です)。"
-#: core/validators.py:552
+#: core/validators.py:560
#, python-format
msgid ""
"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
@@ -2211,7 +2493,7 @@ msgstr ""
"%(line)s 行目の \"%(attr)s\" は無効なアトリビュートです (\"%(start)s\" で始ま"
"る行です)。"
-#: core/validators.py:557
+#: core/validators.py:565
#, python-format
msgid ""
"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
@@ -2220,7 +2502,7 @@ msgstr ""
"%(line)s 行目の \"<%(tag)s>\" は無効なタグです( \"%(start)s\" で始まる行で"
"す)。"
-#: core/validators.py:561
+#: core/validators.py:569
#, python-format
msgid ""
"A tag on line %(line)s is missing one or more required attributes. (Line "
@@ -2229,7 +2511,7 @@ msgstr ""
"%(line)s 行目のタグは必須アトリビュートが未入力です( \"%(start)s\" で始まる行"
"です)。"
-#: core/validators.py:566
+#: core/validators.py:574
#, python-format
msgid ""
"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
@@ -2244,55 +2526,59 @@ msgid "%(object)s with this %(type)s already exists for the given %(field)s."
msgstr ""
"%(field)s に入力されたものは、この %(type)s の %(object)s に既に存在します。"
-#: db/models/fields/__init__.py:42
+#: db/models/fields/__init__.py:46
#, python-format
msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "%(fieldname)s に %(optname)s は既に存在します。"
-#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274
-#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621
-#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450
-#: newforms/fields.py:461 newforms/models.py:177 oldforms/__init__.py:357
+#: db/models/fields/__init__.py:126 db/models/fields/__init__.py:283
+#: db/models/fields/__init__.py:680 db/models/fields/__init__.py:691
+#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:522
+#: newforms/fields.py:533 newforms/models.py:185 oldforms/__init__.py:357
msgid "This field is required."
msgstr "このフィールドは必須です。"
-#: db/models/fields/__init__.py:367
+#: db/models/fields/__init__.py:378
msgid "This value must be an integer."
msgstr "値は整数でなければなりません。"
-#: db/models/fields/__init__.py:402
+#: db/models/fields/__init__.py:413
msgid "This value must be either True or False."
msgstr "値は真: True または偽: False でなければなりません。"
-#: db/models/fields/__init__.py:423
+#: db/models/fields/__init__.py:434
msgid "This field cannot be null."
msgstr "このフィールドには NULL を指定できません。"
-#: db/models/fields/__init__.py:630
+#: db/models/fields/__init__.py:597
+msgid "This value must be a decimal number."
+msgstr "値は整数でなければなりません。"
+
+#: db/models/fields/__init__.py:700
msgid "Enter a valid filename."
msgstr "正しいファイル名を入力してください。"
-#: db/models/fields/__init__.py:751
+#: db/models/fields/__init__.py:824
msgid "This value must be either None, True or False."
msgstr "値は、空: None、真: True または偽: False でなければなりません。"
-#: db/models/fields/related.py:53
+#: db/models/fields/related.py:54
#, python-format
msgid "Please enter a valid %s."
msgstr "正しい %s を入力してください。"
-#: db/models/fields/related.py:642
+#: db/models/fields/related.py:640
msgid "Separate multiple IDs with commas."
msgstr "複数の ID はカンマで区切ってください。"
-#: db/models/fields/related.py:644
+#: db/models/fields/related.py:642
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"複数選択するときには Control キーを押したまま選択してください。Mac は "
"Command キーを使ってください"
-#: db/models/fields/related.py:691
+#: db/models/fields/related.py:689
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -2300,59 +2586,78 @@ msgid_plural ""
msgstr[0] "正しい %(self)s IDを入力してください。 %(value)r は無効です。"
msgstr[1] "正しい %(self)s IDを入力してください。 %(value)r は無効です。"
-#: newforms/fields.py:101 newforms/fields.py:254
+#: newforms/fields.py:110 newforms/fields.py:324
#, python-format
msgid "Ensure this value has at most %d characters."
msgstr "%d 字以下で入力してください。"
-#: newforms/fields.py:103 newforms/fields.py:256
+#: newforms/fields.py:112 newforms/fields.py:326
#, python-format
msgid "Ensure this value has at least %d characters."
msgstr "%d 字以上で入力してください。"
-#: newforms/fields.py:128
+#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192
#, python-format
msgid "Ensure this value is less than or equal to %s."
msgstr "この値は %s 以下でなければなりません。"
-#: newforms/fields.py:130
+#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194
#, python-format
msgid "Ensure this value is greater than or equal to %s."
msgstr "この値は %s 以上でなければなりません。"
-#: newforms/fields.py:163
+#: newforms/fields.py:158 newforms/fields.py:186
+msgid "Enter a number."
+msgstr "整数を入力してください。"
+
+#: newforms/fields.py:196
+#, python-format
+msgid "Ensure that there are no more than %s digits in total."
+msgstr "整数部と少数部を併せて %s 桁までで入力して下さい。"
+
+#: newforms/fields.py:198
+#, python-format
+msgid "Ensure that there are no more than %s decimal places."
+msgstr "少数部は %s 桁までで入力して下さい。"
+
+#: newforms/fields.py:200
+#, python-format
+msgid "Ensure that there are no more than %s digits before the decimal point."
+msgstr "整数部は %s 桁までで入力して下さい。"
+
+#: newforms/fields.py:233 newforms/fields.py:566
msgid "Enter a valid date."
msgstr "日付を正しく入力してください。"
-#: newforms/fields.py:190
+#: newforms/fields.py:260 newforms/fields.py:568
msgid "Enter a valid time."
msgstr "時間を正しく入力してください。"
-#: newforms/fields.py:226
+#: newforms/fields.py:296
msgid "Enter a valid date/time."
msgstr "日付/時間を正しく入力してください。"
-#: newforms/fields.py:240
+#: newforms/fields.py:310
msgid "Enter a valid value."
msgstr "値を正しく入力してください。"
-#: newforms/fields.py:287 newforms/fields.py:309
+#: newforms/fields.py:357 newforms/fields.py:379
msgid "Enter a valid URL."
msgstr "URLを正しく入力してください。"
-#: newforms/fields.py:311
+#: newforms/fields.py:381
msgid "This URL appears to be a broken link."
msgstr "このURLはリンクが壊れています。"
-#: newforms/fields.py:360 newforms/models.py:164
+#: newforms/fields.py:432 newforms/models.py:172
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "正しく選択してください。選択したものは候補にありません。"
-#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181
+#: newforms/fields.py:448 newforms/fields.py:526 newforms/models.py:189
msgid "Enter a list of values."
msgstr "リストを入力してください。"
-#: newforms/fields.py:387 newforms/models.py:187
+#: newforms/fields.py:457 newforms/models.py:195
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "正しく選択してください。 %s は候補にありません。"
@@ -2393,6 +2698,28 @@ msgstr "0 から 32,767 までの整数を入力してください。"
msgid "yes,no,maybe"
msgstr "はい,いいえ,たぶん"
+#: template/defaultfilters.py:520
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] "%(size)d byte"
+msgstr[1] "%(size)d bytes"
+
+#: template/defaultfilters.py:522
+#, python-format
+msgid "%.1f KB"
+msgstr "%.1f KB"
+
+#: template/defaultfilters.py:524
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: template/defaultfilters.py:525
+#, python-format
+msgid "%.1f GB"
+msgstr "%.1f GB"
+
#: utils/dateformat.py:40
msgid "p.m."
msgstr "p.m."
@@ -2605,23 +2932,38 @@ msgid_plural "minutes"
msgstr[0] "分"
msgstr[1] "分"
-#: utils/translation/trans_real.py:362
+#: utils/timesince.py:40
+#, python-format
+msgid "%d milliseconds"
+msgstr "%d ミリ秒"
+
+#: utils/timesince.py:41
+#, python-format
+msgid "%(number)d %(type)s"
+msgstr "%(number)d %(type)s"
+
+#: utils/timesince.py:47
+#, python-format
+msgid ", %(number)d %(type)s"
+msgstr ", %(number)d %(type)s"
+
+#: utils/translation/trans_real.py:358
msgid "DATE_FORMAT"
msgstr "Y/m/d"
-#: utils/translation/trans_real.py:363
+#: utils/translation/trans_real.py:359
msgid "DATETIME_FORMAT"
msgstr "Y/m/d H:i"
-#: utils/translation/trans_real.py:364
+#: utils/translation/trans_real.py:360
msgid "TIME_FORMAT"
msgstr "H:i"
-#: utils/translation/trans_real.py:380
+#: utils/translation/trans_real.py:376
msgid "YEAR_MONTH_FORMAT"
msgstr "Y/m/d"
-#: utils/translation/trans_real.py:381
+#: utils/translation/trans_real.py:377
msgid "MONTH_DAY_FORMAT"
msgstr "m/d"
diff --git a/django/conf/locale/ro/LC_MESSAGES/django.mo b/django/conf/locale/ro/LC_MESSAGES/django.mo
index ffac5d5f9e..9b46b6c6d6 100644
--- a/django/conf/locale/ro/LC_MESSAGES/django.mo
+++ b/django/conf/locale/ro/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/ro/LC_MESSAGES/django.po b/django/conf/locale/ro/LC_MESSAGES/django.po
index 293e428c71..09494d7b4e 100644
--- a/django/conf/locale/ro/LC_MESSAGES/django.po
+++ b/django/conf/locale/ro/LC_MESSAGES/django.po
@@ -23,13 +23,13 @@ msgstr "id obiect"
#: contrib/comments/models.py:68
msgid "headline"
-msgstr ""
+msgstr "titlu"
#: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167
#, fuzzy
msgid "comment"
-msgstr "conţinut"
+msgstr "comentariu"
#: contrib/comments/models.py:70
msgid "rating #1"
@@ -69,20 +69,19 @@ msgstr ""
#: contrib/comments/models.py:83 contrib/comments/models.py:169
msgid "date/time submitted"
-msgstr ""
+msgstr "data/ora crearii"
#: contrib/comments/models.py:84 contrib/comments/models.py:170
msgid "is public"
-msgstr ""
+msgstr "public"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
-#, fuzzy
msgid "IP address"
-msgstr "adresa email"
+msgstr "adresa ip"
#: contrib/comments/models.py:86
msgid "is removed"
-msgstr ""
+msgstr "sters"
#: contrib/comments/models.py:86
msgid ""
@@ -122,7 +121,7 @@ msgstr "adresa email"
#: contrib/comments/models.py:173
msgid "approved by staff"
-msgstr ""
+msgstr "aprobat de echipa"
#: contrib/comments/models.py:176
#, fuzzy
@@ -282,9 +281,8 @@ msgid "Password:"
msgstr "Parola:"
#: contrib/comments/templates/comments/form.html:6
-#, fuzzy
msgid "Forgotten your password?"
-msgstr "Schimbă-mi parola"
+msgstr "Ai uitat parola?"
#: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/object_history.html:3
@@ -338,9 +336,8 @@ msgid "Preview comment"
msgstr "permite comentarii"
#: contrib/comments/templates/comments/freeform.html:4
-#, fuzzy
msgid "Your name:"
-msgstr "nume utilizator"
+msgstr "numele dumneavoastra"
#: contrib/admin/filterspecs.py:40
#, python-format
@@ -352,41 +349,39 @@ msgstr ""
#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
#: contrib/admin/filterspecs.py:143
msgid "All"
-msgstr ""
+msgstr "tot"
#: contrib/admin/filterspecs.py:109
msgid "Any date"
-msgstr ""
+msgstr "orice data"
#: contrib/admin/filterspecs.py:110
-#, fuzzy
msgid "Today"
-msgstr "Luni"
+msgstr "Astazi"
#: contrib/admin/filterspecs.py:113
msgid "Past 7 days"
-msgstr ""
+msgstr "Ultimele 7 zile"
#: contrib/admin/filterspecs.py:115
msgid "This month"
-msgstr ""
+msgstr "Luna aceasta"
#: contrib/admin/filterspecs.py:117
msgid "This year"
-msgstr ""
+msgstr "Anul acesta"
#: contrib/admin/filterspecs.py:143
msgid "Yes"
-msgstr ""
+msgstr "Da"
#: contrib/admin/filterspecs.py:143
-#, fuzzy
msgid "No"
-msgstr "Noi."
+msgstr "Nu"
#: contrib/admin/filterspecs.py:150
msgid "Unknown"
-msgstr ""
+msgstr "Necunoscut"
#: contrib/admin/models.py:16
msgid "action time"
@@ -418,7 +413,7 @@ msgstr "intrări log"
#: contrib/admin/templatetags/admin_list.py:228
msgid "All dates"
-msgstr ""
+msgstr "Toate datele"
#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
#: contrib/auth/forms.py:41
@@ -426,6 +421,8 @@ msgid ""
"Please enter a correct username and password. Note that both fields are case-"
"sensitive."
msgstr ""
+"Va rugam sa introduceti username-ul si parola corecta. Aveti grija deoarece"
+"casutele sunt case sensitive."
#: contrib/admin/views/decorators.py:23
#: contrib/admin/templates/admin/login.html:25
@@ -437,16 +434,21 @@ msgid ""
"Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved."
msgstr ""
+"Va rugam sa va inregistrati din nou, deoarece sesiunea a expirat. Nu va "
+"faceti griji datele au fost salvate."
#: contrib/admin/views/decorators.py:68
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
msgstr ""
+"Se pare ca browserul dumneavostra nu este configurat sa accepte cookies. Va "
+"rugam sa va setati browserul sa accepte cookies, dati un reload la pagina si "
+"incercati din nou."
#: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character."
-msgstr ""
+msgstr "Username-ul nu are voie sa contina caracterul '@'."
#: contrib/admin/views/decorators.py:84
#, python-format
@@ -461,61 +463,62 @@ msgstr "Administrare Django"
#: contrib/admin/views/main.py:260
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" a fost inserat cu succes."
#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
msgid "You may edit it again below."
-msgstr ""
+msgstr "Va puteti edita datele din nou mai jos."
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format
msgid "You may add another %s below."
-msgstr ""
+msgstr "Mai puteti adauga un alt %s mai jos."
#: contrib/admin/views/main.py:290
-#, fuzzy, python-format
+#, python-format
msgid "Add %s"
-msgstr "Adaugă"
+msgstr "Adaugă %s"
#: contrib/admin/views/main.py:336
#, python-format
msgid "Added %s."
-msgstr ""
+msgstr "Adaugat %s."
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
#: contrib/admin/views/main.py:340
msgid "and"
-msgstr ""
+msgstr "si"
#: contrib/admin/views/main.py:338
-#, fuzzy, python-format
+#, python-format
msgid "Changed %s."
-msgstr "Schimbă"
+msgstr "Schimbă %s."
#: contrib/admin/views/main.py:340
#, python-format
msgid "Deleted %s."
-msgstr ""
+msgstr "Am sters %s."
#: contrib/admin/views/main.py:343
msgid "No fields changed."
-msgstr ""
+msgstr "Nu s-a facut nicio schimbare."
#: contrib/admin/views/main.py:346
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" au fost modificate cu succes."
#: contrib/admin/views/main.py:354
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
+"%(name)s \"%(obj)s\" au fost adaugate cu succes. Le puteti edita mai jos."
#: contrib/admin/views/main.py:392
-#, fuzzy, python-format
+#, python-format
msgid "Change %s"
-msgstr "Schimbă"
+msgstr "Schimbă %s"
#: contrib/admin/views/main.py:470
#, python-format
@@ -530,16 +533,16 @@ msgstr ""
#: contrib/admin/views/main.py:508
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
-msgstr ""
+msgstr "%(name)s \"%(obj)s\" au fost sterse cu succes."
#: contrib/admin/views/main.py:511
msgid "Are you sure?"
-msgstr ""
+msgstr "Sunteti sigur?"
#: contrib/admin/views/main.py:533
-#, fuzzy, python-format
+#, python-format
msgid "Change history: %s"
-msgstr "Schimbă parola"
+msgstr "Schimbari facute: %s"
#: contrib/admin/views/main.py:565
#, python-format
@@ -549,13 +552,13 @@ msgstr ""
#: contrib/admin/views/main.py:565
#, python-format
msgid "Select %s to change"
-msgstr ""
+msgstr "Selecteaza %s pentru schimbare"
#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
msgid "Integer"
-msgstr ""
+msgstr "Intreg"
#: contrib/admin/views/doc.py:278
msgid "Boolean (Either True or False)"
@@ -564,26 +567,23 @@ msgstr ""
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
#, python-format
msgid "String (up to %(maxlength)s)"
-msgstr ""
+msgstr "String (pana la %(maxlength)s caractere)"
#: contrib/admin/views/doc.py:280
msgid "Comma-separated integers"
msgstr ""
#: contrib/admin/views/doc.py:281
-#, fuzzy
msgid "Date (without time)"
-msgstr "timp acţiune"
+msgstr "Data (fara ora)"
#: contrib/admin/views/doc.py:282
-#, fuzzy
msgid "Date (with time)"
-msgstr "Dată/oră"
+msgstr "Data (cu ora)"
#: contrib/admin/views/doc.py:283
-#, fuzzy
msgid "E-mail address"
-msgstr "Adresa email:"
+msgstr "Adresa email"
#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
msgid "File path"
@@ -603,9 +603,8 @@ msgid "Relation to parent model"
msgstr ""
#: contrib/admin/views/doc.py:293
-#, fuzzy
msgid "Phone number"
-msgstr "Introduceţi un număr întreg."
+msgstr "Numar de telefon"
#: contrib/admin/views/doc.py:298
msgid "Text"
@@ -613,7 +612,7 @@ msgstr ""
#: contrib/admin/views/doc.py:299
msgid "Time"
-msgstr ""
+msgstr "Timp"
#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
msgid "URL"
@@ -636,7 +635,7 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_form.html:3
#: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Documentation"
-msgstr ""
+msgstr "Documentatie"
#: contrib/admin/templates/admin/object_history.html:3
#: contrib/admin/templates/admin/change_list.html:5
@@ -770,9 +769,9 @@ msgid "None available"
msgstr "Indisponibil"
#: contrib/admin/templates/admin/change_list.html:11
-#, fuzzy, python-format
+#, python-format
msgid "Add %(name)s"
-msgstr "Adaugă"
+msgstr "Adaugă %(name)s"
#: contrib/admin/templates/admin/login.html:22
msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
@@ -785,7 +784,7 @@ msgstr "Bine ai venit,"
#: contrib/admin/templates/admin/delete_confirmation.html:9
#: contrib/admin/templates/admin/submit_line.html:3
msgid "Delete"
-msgstr ""
+msgstr "Sterge"
#: contrib/admin/templates/admin/delete_confirmation.html:14
#, python-format
@@ -814,7 +813,7 @@ msgstr "Da, sînt sigur"
#: contrib/admin/templates/admin/filter.html:2
#, python-format
msgid " By %(title)s "
-msgstr ""
+msgstr " Dupa %(title)s "
#: contrib/admin/templates/admin/search_form.html:8
msgid "Go"
@@ -827,33 +826,32 @@ msgstr ""
#: contrib/admin/templates/admin/change_form.html:30
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "Va rugam sa corectati eroarea de mai jos"
+msgstr[1] "Va rugam sa corectati erorile de mai jos"
#: contrib/admin/templates/admin/change_form.html:48
msgid "Ordering"
-msgstr ""
+msgstr "Ordonate dupa"
#: contrib/admin/templates/admin/change_form.html:51
msgid "Order:"
-msgstr ""
+msgstr "Ordonare:"
#: contrib/admin/templates/admin/submit_line.html:4
msgid "Save as new"
-msgstr ""
+msgstr "Salvati ca nou"
#: contrib/admin/templates/admin/submit_line.html:5
msgid "Save and add another"
-msgstr ""
+msgstr "Salvati si adaugati altul"
#: contrib/admin/templates/admin/submit_line.html:6
msgid "Save and continue editing"
-msgstr ""
+msgstr "Salvati si continuati"
#: contrib/admin/templates/admin/submit_line.html:7
-#, fuzzy
msgid "Save"
-msgstr "activ"
+msgstr "Salveaza"
#: contrib/admin/templates/registration/password_change_done.html:4
#: contrib/admin/templates/registration/password_change_form.html:4
@@ -1133,24 +1131,20 @@ msgid "codename"
msgstr "nume cod"
#: contrib/auth/models.py:17
-#, fuzzy
msgid "permission"
-msgstr "Permisiune"
+msgstr "permisiune"
#: contrib/auth/models.py:18 contrib/auth/models.py:27
-#, fuzzy
msgid "permissions"
-msgstr "Permisiuni"
+msgstr "permisiuni"
#: contrib/auth/models.py:29
-#, fuzzy
msgid "group"
-msgstr "Grup"
+msgstr "grup"
#: contrib/auth/models.py:30 contrib/auth/models.py:65
-#, fuzzy
msgid "groups"
-msgstr "Grupuri"
+msgstr "grupuri"
#: contrib/auth/models.py:55
msgid "username"
@@ -1209,19 +1203,16 @@ msgstr ""
"permisiunile alocate fiecărui grup din care el/ea face parte."
#: contrib/auth/models.py:67
-#, fuzzy
msgid "user permissions"
-msgstr "Permisiuni"
+msgstr "permisiuni utilizator"
#: contrib/auth/models.py:70
-#, fuzzy
msgid "user"
-msgstr "Utilizator"
+msgstr "utilizator"
#: contrib/auth/models.py:71
-#, fuzzy
msgid "users"
-msgstr "Utilizatori"
+msgstr "utilizatori"
#: contrib/auth/models.py:76
msgid "Personal info"
@@ -1240,15 +1231,16 @@ msgid "Groups"
msgstr "Grupuri"
#: contrib/auth/models.py:219
-#, fuzzy
msgid "message"
-msgstr "Mesaj"
+msgstr "mesaj"
#: contrib/auth/forms.py:30
msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in."
msgstr ""
+"Se pare ca browserul dumneavoastra nu suporta cookies. Aveti nevoie de un "
+"browser care suporta cookies ca sa va logati."
#: contrib/contenttypes/models.py:25
#, fuzzy
@@ -1277,7 +1269,7 @@ msgstr "data expirare"
#: contrib/sessions/models.py:41
msgid "session"
-msgstr "seiune"
+msgstr "sesiune"
#: contrib/sessions/models.py:42
msgid "sessions"
@@ -1389,7 +1381,7 @@ msgstr "Decembrie"
#: utils/dates.py:19
msgid "jan"
-msgstr ""
+msgstr "ian"
#: utils/dates.py:19
msgid "feb"
@@ -1404,17 +1396,16 @@ msgid "apr"
msgstr ""
#: utils/dates.py:19
-#, fuzzy
msgid "may"
-msgstr "Mai"
+msgstr "mai"
#: utils/dates.py:19
msgid "jun"
-msgstr ""
+msgstr "iun"
#: utils/dates.py:20
msgid "jul"
-msgstr ""
+msgstr "iul"
#: utils/dates.py:20
msgid "aug"
@@ -1430,7 +1421,7 @@ msgstr ""
#: utils/dates.py:20
msgid "nov"
-msgstr ""
+msgstr "noi"
#: utils/dates.py:20
msgid "dec"
@@ -1467,40 +1458,38 @@ msgstr "Dec."
#: utils/timesince.py:12
msgid "year"
msgid_plural "years"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "an"
+msgstr[1] "ani"
#: utils/timesince.py:13
msgid "month"
msgid_plural "months"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "luna"
+msgstr[1] "luni"
#: utils/timesince.py:14
msgid "week"
msgid_plural "weeks"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "saptamana"
+msgstr[1] "saptamani"
#: utils/timesince.py:15
-#, fuzzy
msgid "day"
msgid_plural "days"
-msgstr[0] "Mai"
-msgstr[1] "Mai"
+msgstr[0] "zi"
+msgstr[1] "zile"
#: utils/timesince.py:16
msgid "hour"
msgid_plural "hours"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ora"
+msgstr[1] "ore"
#: utils/timesince.py:17
-#, fuzzy
msgid "minute"
msgid_plural "minutes"
-msgstr[0] "sit"
-msgstr[1] "sit"
+msgstr[0] "minut"
+msgstr[1] "minute"
#: conf/global_settings.py:37
msgid "Bengali"
@@ -1545,7 +1534,7 @@ msgstr "Galiciană"
#: conf/global_settings.py:47
msgid "Hungarian"
-msgstr ""
+msgstr "Ungara"
#: conf/global_settings.py:48
msgid "Hebrew"
@@ -1577,7 +1566,7 @@ msgstr "Braziliană"
#: conf/global_settings.py:55
msgid "Romanian"
-msgstr ""
+msgstr "Romana"
#: conf/global_settings.py:56
msgid "Russian"
@@ -1750,7 +1739,7 @@ msgstr[1] "Îngrijiţi-vă limbajul! Cuvintele %s nu sînt permise aici."
#: core/validators.py:236
#, python-format
msgid "This field must match the '%s' field."
-msgstr ""
+msgstr "Acest camp trebuie sa fie identic cu '%s'."
#: core/validators.py:255
#, fuzzy
@@ -1897,9 +1886,8 @@ msgstr ""
#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
#: forms/__init__.py:346
-#, fuzzy
msgid "This field is required."
-msgstr "Cîmpul este invalid."
+msgstr "Campul acesta trebuie completat obligatoriu."
#: db/models/fields/__init__.py:337
#, fuzzy
@@ -1917,14 +1905,13 @@ msgid "This field cannot be null."
msgstr "Cîmpul este invalid."
#: db/models/fields/__init__.py:562
-#, fuzzy
msgid "Enter a valid filename."
-msgstr "Introduceţi o adresă de email validă."
+msgstr "Introduceti un nume de fisier valid."
#: db/models/fields/related.py:43
-#, fuzzy, python-format
+#, python-format
msgid "Please enter a valid %s."
-msgstr "Introduceţi vă rog o adresă IP validă."
+msgstr "Introduceti va rog un %s valid."
#: db/models/fields/related.py:579
#, fuzzy
@@ -1953,6 +1940,7 @@ msgid "Ensure your text is less than %s character."
msgid_plural "Ensure your text is less than %s characters."
msgstr[0] ""
msgstr[1] ""
+"Va rugam asigurati-va ca textul dumneavoastra are mai putin de %s caractere."
#: forms/__init__.py:385
#, fuzzy
@@ -1966,7 +1954,7 @@ msgstr ""
#: forms/__init__.py:645
msgid "The submitted file is empty."
-msgstr ""
+msgstr "Fisierul uploadat este gol"
#: forms/__init__.py:699
#, fuzzy
@@ -1985,7 +1973,7 @@ msgstr "Introduceţi un număr întreg."
#: template/defaultfilters.py:379
msgid "yes,no,maybe"
-msgstr ""
+msgstr "da,nu,poate"
#, fuzzy
#~ msgid "Comments"
diff --git a/django/conf/locale/ro/LC_MESSAGES/djangojs.mo b/django/conf/locale/ro/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..1db40df910
--- /dev/null
+++ b/django/conf/locale/ro/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/ro/LC_MESSAGES/djangojs.po b/django/conf/locale/ro/LC_MESSAGES/djangojs.po
new file mode 100644
index 0000000000..4084313848
--- /dev/null
+++ b/django/conf/locale/ro/LC_MESSAGES/djangojs.po
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-28 17:36+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr ""
diff --git a/django/conf/locale/uk/LC_MESSAGES/djangojs.mo b/django/conf/locale/uk/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..1db40df910
--- /dev/null
+++ b/django/conf/locale/uk/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/uk/LC_MESSAGES/djangojs.po b/django/conf/locale/uk/LC_MESSAGES/djangojs.po
new file mode 100644
index 0000000000..4084313848
--- /dev/null
+++ b/django/conf/locale/uk/LC_MESSAGES/djangojs.po
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-28 17:36+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr ""
diff --git a/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo
new file mode 100644
index 0000000000..1db40df910
--- /dev/null
+++ b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po
new file mode 100644
index 0000000000..4084313848
--- /dev/null
+++ b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po
@@ -0,0 +1,118 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-06-28 17:36+1000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/media/js/SelectFilter2.js:33
+#, perl-format
+msgid "Available %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:41
+msgid "Choose all"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:46
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:48
+msgid "Remove"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:53
+#, perl-format
+msgid "Chosen %s"
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:54
+msgid "Select your choice(s) and click "
+msgstr ""
+
+#: contrib/admin/media/js/SelectFilter2.js:59
+msgid "Clear all"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:32
+#: contrib/admin/media/js/calendar.js:24
+msgid ""
+"January February March April May June July August September October November "
+"December"
+msgstr ""
+
+#: contrib/admin/media/js/dateparse.js:33
+msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
+msgstr ""
+
+#: contrib/admin/media/js/calendar.js:25
+msgid "S M T W T F S"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
+msgid "Now"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
+msgid "Clock"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
+msgid "Choose a time"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
+msgid "Midnight"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
+msgid "6 a.m."
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
+msgid "Noon"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
+msgid "Cancel"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
+msgid "Today"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
+msgid "Calendar"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
+msgid "Yesterday"
+msgstr ""
+
+#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
+msgid "Tomorrow"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
+msgid "Show"
+msgstr ""
+
+#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
+msgid "Hide"
+msgstr ""
diff --git a/django/conf/project_template/settings.py b/django/conf/project_template/settings.py
index 36039d7e98..8b3617d4b6 100644
--- a/django/conf/project_template/settings.py
+++ b/django/conf/project_template/settings.py
@@ -9,7 +9,7 @@ ADMINS = (
MANAGERS = ADMINS
-DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
+DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = '' # Or path to database file if using sqlite3.
DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
diff --git a/django/core/mail.py b/django/core/mail.py
index 9190a55989..4cfb5f37cb 100644
--- a/django/core/mail.py
+++ b/django/core/mail.py
@@ -4,10 +4,13 @@ Tools for sending email.
from django.conf import settings
from django.utils.encoding import smart_str, force_unicode
+from email import Charset, Encoders
from email.MIMEText import MIMEText
+from email.MIMEMultipart import MIMEMultipart
+from email.MIMEBase import MIMEBase
from email.Header import Header
from email.Utils import formatdate, parseaddr, formataddr
-from email import Charset
+import mimetypes
import os
import smtplib
import socket
@@ -18,6 +21,10 @@ import random
# some spam filters.
Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8')
+# Default MIME type to use on attachments (if it is not explicitly given
+# and cannot be guessed).
+DEFAULT_ATTACHMENT_MIME_TYPE = 'application/octet-stream'
+
# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of
# seconds, which slows down the restart of the server.
class CachedDnsName(object):
@@ -56,7 +63,7 @@ def make_msgid(idstring=None):
class BadHeaderError(ValueError):
pass
-class SafeMIMEText(MIMEText):
+class SafeHeaderMixin(object):
def __setitem__(self, name, val):
"Forbids multi-line headers, to prevent header injection."
if '\n' in val or '\r' in val:
@@ -73,7 +80,15 @@ class SafeMIMEText(MIMEText):
val = ', '.join(result)
else:
val = Header(force_unicode(val), settings.DEFAULT_CHARSET)
- MIMEText.__setitem__(self, name, val)
+ # Note: using super() here is safe; any __setitem__ overrides must use
+ # the same argument signature.
+ super(SafeHeaderMixin, self).__setitem__(name, val)
+
+class SafeMIMEText(MIMEText, SafeHeaderMixin):
+ pass
+
+class SafeMIMEMultipart(MIMEMultipart, SafeHeaderMixin):
+ pass
class SMTPConnection(object):
"""
@@ -165,7 +180,12 @@ class EmailMessage(object):
"""
A container for email information.
"""
- def __init__(self, subject='', body='', from_email=None, to=None, bcc=None, connection=None):
+ content_subtype = 'plain'
+ multipart_subtype = 'mixed'
+ encoding = None # None => use settings default
+
+ def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
+ connection=None, attachments=None, headers=None):
"""
Initialise a single email message (which can be sent to multiple
recipients).
@@ -179,6 +199,8 @@ class EmailMessage(object):
self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
self.subject = subject
self.body = body
+ self.attachments = attachments or []
+ self.extra_headers = headers or {}
self.connection = connection
def get_connection(self, fail_silently=False):
@@ -187,7 +209,18 @@ class EmailMessage(object):
return self.connection
def message(self):
- msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET), 'plain', settings.DEFAULT_CHARSET)
+ encoding = self.encoding or settings.DEFAULT_CHARSET
+ msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET), self.content_subtype, encoding)
+ if self.attachments:
+ body_msg = msg
+ msg = SafeMIMEMultipart(_subtype=self.multipart_subtype)
+ if self.body:
+ msg.attach(body_msg)
+ for attachment in self.attachments:
+ if isinstance(attachment, MIMEBase):
+ msg.attach(attachment)
+ else:
+ msg.attach(self._create_attachment(*attachment))
msg['Subject'] = self.subject
msg['From'] = self.from_email
msg['To'] = ', '.join(self.to)
@@ -195,6 +228,8 @@ class EmailMessage(object):
msg['Message-ID'] = make_msgid()
if self.bcc:
msg['Bcc'] = ', '.join(self.bcc)
+ for name, value in self.extra_headers.items():
+ msg[name] = value
return msg
def recipients(self):
@@ -208,6 +243,61 @@ class EmailMessage(object):
"""Send the email message."""
return self.get_connection(fail_silently).send_messages([self])
+ def attach(self, filename=None, content=None, mimetype=None):
+ """
+ Attaches a file with the given filename and content. The filename can
+ be omitted (useful for multipart/alternative messages) and the mimetype
+ is guessed, if not provided.
+
+ If the first parameter is a MIMEBase subclass it is inserted directly
+ into the resulting message attachments.
+ """
+ if isinstance(filename, MIMEBase):
+ assert content == mimetype == None
+ self.attachements.append(filename)
+ else:
+ assert content is not None
+ self.attachments.append((filename, content, mimetype))
+
+ def attach_file(self, path, mimetype=None):
+ """Attaches a file from the filesystem."""
+ filename = os.path.basename(path)
+ content = open(path, 'rb').read()
+ self.attach(filename, content, mimetype)
+
+ def _create_attachment(self, filename, content, mimetype=None):
+ """
+ Convert the filename, content, mimetype triple into a MIME attachment
+ object.
+ """
+ if mimetype is None:
+ mimetype, _ = mimetypes.guess_type(filename)
+ if mimetype is None:
+ mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
+ basetype, subtype = mimetype.split('/', 1)
+ if basetype == 'text':
+ attachment = SafeMIMEText(content, subtype, settings.DEFAULT_CHARSET)
+ else:
+ # Encode non-text attachments with base64.
+ attachment = MIMEBase(basetype, subtype)
+ attachment.set_payload(content)
+ Encoders.encode_base64(attachment)
+ if filename:
+ attachment.add_header('Content-Disposition', 'attachment', filename=filename)
+ return attachment
+
+class EmailMultiAlternatives(EmailMessage):
+ """
+ A version of EmailMessage that makes it easy to send multipart/alternative
+ messages. For example, including text and HTML versions of the text is
+ made easier.
+ """
+ multipart_subtype = 'alternative'
+
+ def attach_alternative(self, content, mimetype=None):
+ """Attach an alternative content representation."""
+ self.attach(content=content, mimetype=mimetype)
+
def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None):
"""
Easy wrapper for sending a single message to a recipient list. All members
diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py
index b2cc86708d..7de840d578 100644
--- a/django/core/urlresolvers.py
+++ b/django/core/urlresolvers.py
@@ -202,7 +202,7 @@ class RegexURLResolver(object):
self._reverse_dict = {}
def _get_reverse_dict(self):
- if not self._reverse_dict:
+ if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
for pattern in reversed(self.urlconf_module.urlpatterns):
if isinstance(pattern, RegexURLResolver):
for key, value in pattern.reverse_dict.iteritems():
diff --git a/django/db/backends/dummy/base.py b/django/db/backends/dummy/base.py
index 6a190cf59c..f47cbdf3d4 100644
--- a/django/db/backends/dummy/base.py
+++ b/django/db/backends/dummy/base.py
@@ -41,11 +41,16 @@ dictfetchall = complain
get_last_insert_id = complain
get_date_extract_sql = complain
get_date_trunc_sql = complain
+get_datetime_cast_sql = complain
get_limit_offset_sql = complain
get_random_function_sql = complain
get_deferrable_sql = complain
get_fulltext_search_sql = complain
get_drop_foreignkey_sql = complain
+get_pk_default_value = complain
+get_max_name_length = ignore
+get_start_transaction_sql = complain
+get_autoinc_sql = complain
get_sql_flush = complain
get_sql_sequence_reset = complain
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index a6d56406d6..25ae2fa84f 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -247,6 +247,8 @@ OPERATOR_MAPPING = {
'iexact': 'LIKE %s',
'contains': 'LIKE BINARY %s',
'icontains': 'LIKE %s',
+ 'regex': 'REGEXP BINARY %s',
+ 'iregex': 'REGEXP %s',
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
diff --git a/django/db/backends/mysql_old/base.py b/django/db/backends/mysql_old/base.py
index 4a14fa822a..0a5c127e81 100644
--- a/django/db/backends/mysql_old/base.py
+++ b/django/db/backends/mysql_old/base.py
@@ -250,6 +250,8 @@ OPERATOR_MAPPING = {
'iexact': 'LIKE %s',
'contains': 'LIKE BINARY %s',
'icontains': 'LIKE %s',
+ 'regex': 'REGEXP BINARY %s',
+ 'iregex': 'REGEXP %s',
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py
index e2051beaa2..d90f0cc225 100644
--- a/django/db/backends/postgresql/base.py
+++ b/django/db/backends/postgresql/base.py
@@ -300,6 +300,8 @@ OPERATOR_MAPPING = {
'iexact': 'ILIKE %s',
'contains': 'LIKE %s',
'icontains': 'ILIKE %s',
+ 'regex': '~ %s',
+ 'iregex': '~* %s',
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py
index 4a9a44b3f9..c0ecbf80e9 100644
--- a/django/db/backends/postgresql_psycopg2/base.py
+++ b/django/db/backends/postgresql_psycopg2/base.py
@@ -229,6 +229,8 @@ OPERATOR_MAPPING = {
'iexact': 'ILIKE %s',
'contains': 'LIKE %s',
'icontains': 'ILIKE %s',
+ 'regex': '~ %s',
+ 'iregex': '~* %s',
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index d31d11fea6..a0b1341b53 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -56,9 +56,10 @@ class DatabaseWrapper(local):
}
kwargs.update(self.options)
self.connection = Database.connect(**kwargs)
- # Register extract and date_trunc functions.
+ # Register extract, date_trunc, and regexp functions.
self.connection.create_function("django_extract", 2, _sqlite_extract)
self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
+ self.connection.create_function("regexp", 2, _sqlite_regexp)
cursor = self.connection.cursor(factory=SQLiteCursorWrapper)
if settings.DEBUG:
return util.CursorDebugWrapper(cursor, self)
@@ -206,6 +207,13 @@ def _sqlite_date_trunc(lookup_type, dt):
elif lookup_type == 'day':
return "%i-%02i-%02i 00:00:00" % (dt.year, dt.month, dt.day)
+def _sqlite_regexp(re_pattern, re_string):
+ import re
+ try:
+ return bool(re.search(re_pattern, re_string))
+ except:
+ return False
+
# SQLite requires LIKE statements to include an ESCAPE clause if the value
# being escaped has a percent or underscore in it.
# See http://www.sqlite.org/lang_expr.html for an explanation.
@@ -214,6 +222,8 @@ OPERATOR_MAPPING = {
'iexact': "LIKE %s ESCAPE '\\'",
'contains': "LIKE %s ESCAPE '\\'",
'icontains': "LIKE %s ESCAPE '\\'",
+ 'regex': 'REGEXP %s',
+ 'iregex': "REGEXP '(?i)' || %s",
'gt': '> %s',
'gte': '>= %s',
'lt': '< %s',
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 167155fdbb..7ef532eab6 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -175,7 +175,7 @@ class Field(object):
def get_db_prep_lookup(self, lookup_type, value):
"Returns field's value prepared for database lookup."
- if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'):
+ if lookup_type in ('exact', 'regex', 'iregex', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'):
return [value]
elif lookup_type in ('range', 'in'):
return value
@@ -801,6 +801,7 @@ class IntegerField(Field):
return super(IntegerField, self).formfield(**defaults)
class IPAddressField(Field):
+ empty_strings_allowed = False
def __init__(self, *args, **kwargs):
kwargs['maxlength'] = 15
Field.__init__(self, *args, **kwargs)
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 076fa15fae..5771f3d7d9 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1,3 +1,4 @@
+from django.conf import settings
from django.db import backend, connection, transaction
from django.db.models.fields import DateField, FieldDoesNotExist
from django.db.models import signals, loading
@@ -23,6 +24,7 @@ QUERY_TERMS = (
'gt', 'gte', 'lt', 'lte', 'in',
'startswith', 'istartswith', 'endswith', 'iendswith',
'range', 'year', 'month', 'day', 'isnull', 'search',
+ 'regex', 'iregex',
)
# Size of each "chunk" for get_iterator calls.
@@ -798,6 +800,15 @@ def get_where_clause(lookup_type, table_prefix, field_name, value):
return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or ''))
elif lookup_type == 'search':
return backend.get_fulltext_search_sql(table_prefix + field_name)
+ elif lookup_type in ('regex', 'iregex'):
+ if settings.DATABASE_ENGINE == 'oracle':
+ if lookup_type == 'regex':
+ match_option = 'c'
+ else:
+ match_option = 'i'
+ return "REGEXP_LIKE(%s%s, %s, '%s')" % (table_prefix, field_name, cast_sql, match_option)
+ else:
+ raise NotImplementedError
raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type)
def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0):
diff --git a/django/http/__init__.py b/django/http/__init__.py
index b5af9b6e6a..76f9246ca6 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -214,7 +214,7 @@ class HttpResponse(object):
status_code = 200
- def __init__(self, content='', mimetype=None):
+ def __init__(self, content='', mimetype=None, status=None):
from django.conf import settings
self._charset = settings.DEFAULT_CHARSET
if not mimetype:
@@ -227,6 +227,8 @@ class HttpResponse(object):
self._is_string = True
self.headers = {'Content-Type': mimetype}
self.cookies = SimpleCookie()
+ if status:
+ self.status_code = status
def __str__(self):
"Full HTTP message, including headers"
diff --git a/django/newforms/fields.py b/django/newforms/fields.py
index a91e5af450..b6abea6400 100644
--- a/django/newforms/fields.py
+++ b/django/newforms/fields.py
@@ -482,17 +482,18 @@ class ComboField(Field):
class MultiValueField(Field):
"""
- A Field that is composed of multiple Fields.
-
- Its clean() method takes a "decompressed" list of values. Each value in
+ A Field that aggregates the logic of multiple Fields.
+
+ Its clean() method takes a "decompressed" list of values, which are then
+ cleaned into a single value according to self.fields. Each value in
this list is cleaned by the corresponding field -- the first value is
cleaned by the first field, the second value is cleaned by the second
field, etc. Once all fields are cleaned, the list of clean values is
"compressed" into a single value.
- Subclasses should implement compress(), which specifies how a list of
- valid values should be converted to a single value. Subclasses should not
- have to implement clean().
+ Subclasses should not have to implement clean(). Instead, they must
+ implement compress(), which takes a list of valid values and returns a
+ "compressed" version of those values -- a single value.
You'll probably want to use this with MultiWidget.
"""
diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py
index 50de37074a..b90e6df9cd 100644
--- a/django/newforms/widgets.py
+++ b/django/newforms/widgets.py
@@ -304,19 +304,28 @@ class MultiWidget(Widget):
"""
A widget that is composed of multiple widgets.
- Its render() method takes a "decompressed" list of values, not a single
- value. Each value in this list is rendered in the corresponding widget --
- the first value is rendered in the first widget, the second value is
- rendered in the second widget, etc.
+ Its render() method is different than other widgets', because it has to
+ figure out how to split a single value for display in multiple widgets.
+ The ``value`` argument can be one of two things:
- Subclasses should implement decompress(), which specifies how a single
- value should be converted to a list of values. Subclasses should not
- have to implement clean().
+ * A list.
+ * A normal value (e.g., a string) that has been "compressed" from
+ a list of values.
+
+ In the second case -- i.e., if the value is NOT a list -- render() will
+ first "decompress" the value into a list before rendering it. It does so by
+ calling the decompress() method, which MultiWidget subclasses must
+ implement. This method takes a single "compressed" value and returns a
+ list.
+
+ When render() does its HTML rendering, each value in the list is rendered
+ with the corresponding widget -- the first value is rendered in the first
+ widget, the second value is rendered in the second widget, etc.
Subclasses may implement format_output(), which takes the list of rendered
- widgets and returns HTML that formats them any way you'd like.
+ widgets and returns a string of HTML that formats them any way you'd like.
- You'll probably want to use this with MultiValueField.
+ You'll probably want to use this class with MultiValueField.
"""
def __init__(self, widgets, attrs=None):
self.widgets = [isinstance(w, type) and w() or w for w in widgets]
@@ -351,6 +360,13 @@ class MultiWidget(Widget):
return [widget.value_from_datadict(data, name + '_%s' % i) for i, widget in enumerate(self.widgets)]
def format_output(self, rendered_widgets):
+ """
+ Given a list of rendered widgets (as strings), returns a Unicode string
+ representing the HTML for the whole lot.
+
+ This hook allows you to format the HTML design of the widgets, if
+ needed.
+ """
return u''.join(rendered_widgets)
def decompress(self, value):
diff --git a/docs/authentication.txt b/docs/authentication.txt
index 972ca42073..efe4d47513 100644
--- a/docs/authentication.txt
+++ b/docs/authentication.txt
@@ -325,7 +325,7 @@ Manually checking a user's password
If you'd like to manually authenticate a user by comparing a
plain-text password to the hashed password in the database, use the
-convenience function `django.contrib.auth.models.check_password`. It
+convenience function ``django.contrib.auth.models.check_password``. It
takes two arguments: the plain-text password to check, and the full
value of a user's ``password`` field in the database to check against,
and returns ``True`` if they match, ``False`` otherwise.
@@ -461,7 +461,7 @@ block::
Other built-in views
--------------------
-In addition to the `login` view, the authentication system includes a
+In addition to the ``login`` view, the authentication system includes a
few other useful built-in views:
``django.contrib.auth.views.logout``
diff --git a/docs/contributing.txt b/docs/contributing.txt
index 3880a1e13e..fa16f858b6 100644
--- a/docs/contributing.txt
+++ b/docs/contributing.txt
@@ -383,6 +383,65 @@ Model style
('F', 'Female'),
)
+Documentation style
+===================
+
+We place a high importance on consistency and readability of documentation.
+(After all, Django was created in a journalism environment!)
+
+Guidelines for ReST files
+-------------------------
+
+These guidelines regulate the format of our ReST documentation:
+
+ * In section titles, capitalize only initial words and proper nouns.
+
+ * Wrap the documentation at 80 characters wide, unless a code example
+ is significantly less readable when split over two lines, or for another
+ good reason.
+
+Commonly used terms
+-------------------
+
+Here are some style guidelines on commonly used terms throughout the
+documentation:
+
+ * **Django** -- when referring to the framework, capitalize Django. It is
+ lowercase only in Python code and in the djangoproject.com logo.
+
+ * **e-mail** -- it has a hyphen.
+
+ * **MySQL**
+
+ * **PostgreSQL**
+
+ * **Python** -- when referring to the language, capitalize Python.
+
+ * **realize**, **customize**, **initialize**, etc. -- use the American
+ "ize" suffix, not "ise."
+
+ * **SQLite**
+
+ * **subclass** -- it's a single word without a hyphen, both as a verb
+ ("subclass that model") and as a noun ("create a subclass").
+
+ * **Web**, **World Wide Web**, **the Web** -- note Web is always
+ capitalized when referring to the World Wide Web.
+
+ * **Web site** -- use two words, with Web capitalized.
+
+Django-specific terminology
+---------------------------
+
+ * **model** -- it's not capitalized.
+
+ * **template** -- it's not capitalized.
+
+ * **URLconf** -- use three capitalized letters, with no space before
+ "conf."
+
+ * **view** -- it's not capitalized.
+
Committing code
===============
diff --git a/docs/db-api.txt b/docs/db-api.txt
index 38510ef530..ef3d811189 100644
--- a/docs/db-api.txt
+++ b/docs/db-api.txt
@@ -1173,6 +1173,58 @@ like ``contains`` but is significantly faster due to full-text indexing.
Note this is only available in MySQL and requires direct manipulation of the
database to add the full-text index.
+regex
+~~~~~
+
+**New in Django development version**
+
+Case-sensitive regular expression match.
+
+The regular expression syntax is that of the database backend in use. In the
+case of SQLite, which doesn't natively support regular-expression lookups, the
+syntax is that of Python's ``re`` module.
+
+Example::
+
+ Entry.objects.get(title__regex=r'^(An?|The) +')
+
+SQL equivalents::
+
+ SELECT ... WHERE title REGEXP BINARY '^(An?|The) +'; -- MySQL
+
+ SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'c'); -- Oracle
+
+ SELECT ... WHERE title ~ '^(An?|The) +'; -- PostgreSQL
+
+ SELECT ... WHERE title REGEXP '^(An?|The) +'; -- SQLite
+
+Using raw strings (e.g., ``r'foo'`` instead of ``'foo'``) for passing in the
+regular expression syntax is recommended.
+
+Regular expression matching is not supported on the ``ado_mssql`` backend.
+It will raise a ``NotImplementedError`` at runtime.
+
+iregex
+~~~~~~
+
+**New in Django development version**
+
+Case-insensitive regular expression match.
+
+Example::
+
+ Entry.objects.get(title__iregex=r'^(an?|the) +')
+
+SQL equivalents::
+
+ SELECT ... WHERE title REGEXP '^(an?|the) +'; -- MySQL
+
+ SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'i'); -- Oracle
+
+ SELECT ... WHERE title ~* '^(an?|the) +'; -- PostgreSQL
+
+ SELECT ... WHERE title REGEXP '(?i)^(an?|the) +'; -- SQLite
+
Default lookups are exact
-------------------------
@@ -1779,7 +1831,7 @@ use the default manager, or if you want to search a list of related objects,
you can provide ``get_object_or_404()`` with a manager object instead.
For example::
- # Get the author of blog instance `e` with a name of 'Fred'
+ # Get the author of blog instance e with a name of 'Fred'
a = get_object_or_404(e.authors, name='Fred')
# Use a custom manager 'recent_entries' in the search for an
diff --git a/docs/django-admin.txt b/docs/django-admin.txt
index d20db7edc9..75c2738543 100644
--- a/docs/django-admin.txt
+++ b/docs/django-admin.txt
@@ -513,7 +513,7 @@ Example usage::
Verbosity determines the amount of notification and debug information that
will be printed to the console. '0' is no output, '1' is normal output,
-and `2` is verbose output.
+and ``2`` is verbose output.
--adminmedia
------------
diff --git a/docs/email.txt b/docs/email.txt
index 66948e5294..50dafaf8df 100644
--- a/docs/email.txt
+++ b/docs/email.txt
@@ -28,9 +28,9 @@ settings, if set, are used to authenticate to the SMTP server, and the
.. note::
The character set of e-mail sent with ``django.core.mail`` will be set to
- the value of your `DEFAULT_CHARSET setting`_.
+ the value of your `DEFAULT_CHARSET`_ setting.
-.. _DEFAULT_CHARSET setting: ../settings/#default-charset
+.. _DEFAULT_CHARSET: ../settings/#default-charset
.. _EMAIL_HOST: ../settings/#email-host
.. _EMAIL_PORT: ../settings/#email-port
.. _EMAIL_HOST_USER: ../settings/#email-host-user
@@ -198,27 +198,58 @@ e-mail, you can subclass these two classes to suit your needs.
.. note::
Not all features of the ``EmailMessage`` class are available through the
``send_mail()`` and related wrapper functions. If you wish to use advanced
- features, such as BCC'ed recipients or multi-part e-mail, you'll need to
- create ``EmailMessage`` instances directly.
+ features, such as BCC'ed recipients, file attachments, or multi-part
+ e-mail, you'll need to create ``EmailMessage`` instances directly.
+
+ This is a design feature. ``send_mail()`` and related functions were
+ originally the only interface Django provided. However, the list of
+ parameters they accepted was slowly growing over time. It made sense to
+ move to a more object-oriented design for e-mail messages and retain the
+ original functions only for backwards compatibility.
In general, ``EmailMessage`` is responsible for creating the e-mail message
itself. ``SMTPConnection`` is responsible for the network connection side of
the operation. This means you can reuse the same connection (an
``SMTPConnection`` instance) for multiple messages.
-The ``EmailMessage`` class is initialized as follows::
+E-mail messages
+---------------
+
+The ``EmailMessage`` class is initialized with the following parameters (in
+the given order, if positional arguments are used). All parameters are
+optional and can be set at any time prior to calling the ``send()`` method.
+
+ * ``subject``: The subject line of the e-mail.
+
+ * ``body``: The body text. This should be a plain text message.
+
+ * ``from_email``: The sender's address. Both ``fred@example.com`` and
+ ``Fred <fred@example.com>`` forms are legal. If omitted, the
+ ``DEFAULT_FROM_EMAIL`` setting is used.
- email = EmailMessage(subject, body, from_email, to, bcc, connection)
+ * ``to``: A list or tuple of recipient addresses.
-All of these parameters are optional. If ``from_email`` is omitted, the value
-from ``settings.DEFAULT_FROM_EMAIL`` is used. Both the ``to`` and ``bcc``
-parameters are lists of addresses, as strings.
+ * ``bcc``: A list or tuple of addresses used in the "Bcc" header when
+ sending the e-mail.
+
+ * ``connection``: An ``SMTPConnection`` instance. Use this parameter if
+ you want to use the same conneciton for multiple messages. If omitted, a
+ new connection is created when ``send()`` is called.
+
+ * ``attachments``: A list of attachments to put on the message. These can
+ be either ``email.MIMEBase.MIMEBase`` instances, or ``(filename,
+ content, mimetype)`` triples.
+
+ * ``headers``: A dictionary of extra headers to put on the message. The
+ keys are the header name, values are the header values. It's up to the
+ caller to ensure header names and values are in the correct format for
+ an e-mail message.
For example::
email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
- ['to1@example.com', 'to2@example.com'],
- ['bcc@example.com'])
+ ['to1@example.com', 'to2@example.com'], ['bcc@example.com'],
+ headers = {'Reply-To': 'another@example.com'})
The class has the following methods:
@@ -227,18 +258,83 @@ The class has the following methods:
if none already exists.
* ``message()`` constructs a ``django.core.mail.SafeMIMEText`` object (a
- sub-class of Python's ``email.MIMEText.MIMEText`` class) holding the
- message to be sent. If you ever need to extend the `EmailMessage` class,
- you'll probably want to override this method to put the content you wish
+ subclass of Python's ``email.MIMEText.MIMEText`` class) or a
+ ``django.core.mail.SafeMIMEMultipart`` object holding the
+ message to be sent. If you ever need to extend the ``EmailMessage`` class,
+ you'll probably want to override this method to put the content you want
into the MIME object.
* ``recipients()`` returns a list of all the recipients of the message,
whether they're recorded in the ``to`` or ``bcc`` attributes. This is
- another method you might need to override when sub-classing, because the
+ another method you might need to override when subclassing, because the
SMTP server needs to be told the full list of recipients when the message
is sent. If you add another way to specify recipients in your class, they
need to be returned from this method as well.
+ * ``attach()`` creates a new file attachment and adds it to the message.
+ There are two ways to call ``attach()``:
+
+ * You can pass it a single argument that is an
+ ``email.MIMBase.MIMEBase`` instance. This will be inserted directly
+ into the resulting message.
+
+ * Alternatively, you can pass ``attach()`` three arguments:
+ ``filename``, ``content`` and ``mimetype``. ``filename`` is the name
+ of the file attachment as it will appear in the e-mail, ``content`` is
+ the data that will be contained inside the attachment and
+ ``mimetype`` is the optional MIME type for the attachment. If you
+ omit ``mimetype``, the MIME content type will be guessed from the
+ filename of the attachment.
+
+ For example::
+
+ message.attach('design.png', img_data, 'image/png')
+
+ * ``attach_file()`` creates a new attachment using a file from your
+ filesystem. Call it with the path of the file to attach and, optionally,
+ the MIME type to use for the attachment. If the MIME type is omitted, it
+ will be guessed from the filename. The simplest use would be::
+
+ message.attach_file('/images/weather_map.png')
+
+Sending alternative content types
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+It can be useful to include multiple versions of the content in an e-mail;
+the classic example is to send both text and HTML versions of a message. With
+Django's e-mail library, you can do this using the ``EmailMultiAlternatives``
+class. This subclass of ``EmailMessage`` has an ``attach_alternative()`` method
+for including extra versions of the message body in the e-mail. All the other
+methods (including the class initialization) are inherited directly from
+``EmailMessage``.
+
+To send a text and HTML combination, you could write::
+
+ from django.core.mail import EmailMultiAlternatives
+
+ subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
+ text_content = 'This is an important message.'
+ html_content = '<p>This is an <strong>important</strong> message.'
+ msg = EmailMultiAlternatives(subject, text_content, from_email, to)
+ msg.attach_alternative(html_content, "text/html")
+ msg.send()
+
+By default, the MIME type of the ``body`` parameter in an ``EmailMessage`` is
+``"text/plain"``. It is good practice to leave this alone, because it
+guarantees that any recipient will be able to read the e-mail, regardless of
+their mail client. However, if you are confident that your recipients can
+handle an alternative content type, you can use the ``content_subtype``
+attribute on the ``EmailMessage`` class to change the main content type. The
+major type will always be ``"text"``, but you can change it to the subtype. For
+example::
+
+ msg = EmailMessage(subject, html_content, from_email, to)
+ msg.content_subtype = "html" # Main content is now text/html
+ msg.send()
+
+SMTP network connections
+------------------------
+
The ``SMTPConnection`` class is initialized with the host, port, username and
password for the SMTP server. If you don't specify one or more of those
options, they are read from your settings file.
diff --git a/docs/faq.txt b/docs/faq.txt
index d7d8f41146..67ed8a49a5 100644
--- a/docs/faq.txt
+++ b/docs/faq.txt
@@ -104,7 +104,7 @@ Lawrence, Kansas, USA.
`Wilson Miner`_
Wilson's design-fu makes us all look like rock stars. By day, he's an
- interactive designer for `Apple`. Don't ask him what he's working on, or
+ interactive designer for `Apple`_. Don't ask him what he's working on, or
he'll have to kill you. He lives in San Francisco.
On IRC, Wilson goes by ``wilsonian``.
diff --git a/docs/generic_views.txt b/docs/generic_views.txt
index 359a82506a..2b80348903 100644
--- a/docs/generic_views.txt
+++ b/docs/generic_views.txt
@@ -754,10 +754,10 @@ If the results are paginated, the context will contain these extra variables:
* ``previous``: The previous page number, as an integer. This is 1-based.
- * `last_on_page`: The number of the
+ * ``last_on_page``: The number of the
last result on the current page. This is 1-based.
- * `first_on_page`: The number of the
+ * ``first_on_page``: The number of the
first result on the current page. This is 1-based.
* ``pages``: The total number of pages, as an integer.
diff --git a/docs/install.txt b/docs/install.txt
index 99aad4e52d..e850e48955 100644
--- a/docs/install.txt
+++ b/docs/install.txt
@@ -48,7 +48,8 @@ Get your database running
If you plan to use Django's database API functionality, you'll need to
make sure a database server is running. Django works with PostgreSQL_,
-MySQL_ and SQLite_.
+MySQL_, Oracle_ and SQLite_ (the latter doesn't require a separate server to
+be running).
Additionally, you'll need to make sure your Python database bindings are
installed.
@@ -76,6 +77,7 @@ installed.
.. _pysqlite: http://initd.org/tracker/pysqlite
.. _MySQL backend: ../databases/
.. _cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/
+.. _Oracle: http://www.oracle.com/
Remove any old versions of Django
=================================
diff --git a/docs/legacy_databases.txt b/docs/legacy_databases.txt
index ca3927e52f..b87a661f90 100644
--- a/docs/legacy_databases.txt
+++ b/docs/legacy_databases.txt
@@ -18,7 +18,7 @@ You'll need to tell Django what your database connection parameters are, and
what the name of the database is. Do that by editing these settings in your
`settings file`_:
- * `DATABASE_NAME`
+ * `DATABASE_NAME`_
* `DATABASE_ENGINE`_
* `DATABASE_USER`_
* `DATABASE_PASSWORD`_
diff --git a/docs/model-api.txt b/docs/model-api.txt
index 074e5fec82..4b0bc0d238 100644
--- a/docs/model-api.txt
+++ b/docs/model-api.txt
@@ -493,9 +493,9 @@ possible values for "no data;" Django convention is to use the empty
string, not ``NULL``.
.. note::
- Due to database limitations, when using the Oracle backend the
- ``null=True`` option will be coerced for string-based fields that can
- blank, and the value ``NULL`` will be stored to denote the empty string.
+ When using the Oracle database backend, the ``null=True`` option will
+ be coerced for string-based fields that can blank, and the value
+ ``NULL`` will be stored to denote the empty string.
``blank``
~~~~~~~~~
@@ -594,9 +594,12 @@ statement for this field.
``db_tablespace``
~~~~~~~~~~~~~~~~~
-If this field is indexed, the name of the database tablespace to use for the
-index. The default is the ``db_tablespace`` of the model, if any. If the
-backend doesn't support tablespaces, this option is ignored.
+**New in Django development version**
+
+The name of the database tablespace to use for this field's index, if
+indeed this field is indexed. The default is the ``db_tablespace`` of
+the model, if any. If the backend doesn't support tablespaces, this
+option is ignored.
``default``
~~~~~~~~~~~
@@ -1011,6 +1014,8 @@ that's OK. Django quotes column and table names behind the scenes.
``db_tablespace``
-----------------
+**New in Django development version**
+
The name of the database tablespace to use for the model. If the backend
doesn't support tablespaces, this option is ignored.
diff --git a/docs/release_notes_0.96.txt b/docs/release_notes_0.96.txt
index f62780c6b2..4227de8155 100644
--- a/docs/release_notes_0.96.txt
+++ b/docs/release_notes_0.96.txt
@@ -28,7 +28,7 @@ The following changes may require you to update your code when you switch from
Due to a bug in older versions of the ``MySQLdb`` Python module (which
Django uses to connect to MySQL databases), Django's MySQL backend now
-requires version 1.2.1p2 or higher of `MySQLdb`, and will raise
+requires version 1.2.1p2 or higher of ``MySQLdb``, and will raise
exceptions if you attempt to use an older version.
If you're currently unable to upgrade your copy of ``MySQLdb`` to meet
diff --git a/docs/serialization.txt b/docs/serialization.txt
index 01afa2708c..fa9b4edd51 100644
--- a/docs/serialization.txt
+++ b/docs/serialization.txt
@@ -48,12 +48,12 @@ Subset of fields
~~~~~~~~~~~~~~~~
If you only want a subset of fields to be serialized, you can
-specify a `fields` argument to the serializer::
+specify a ``fields`` argument to the serializer::
from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
-In this example, only the `name` and `size` attributes of each model will
+In this example, only the ``name`` and ``size`` attributes of each model will
be serialized.
.. note::
diff --git a/docs/templates_python.txt b/docs/templates_python.txt
index f3e2f2c64b..7171f32612 100644
--- a/docs/templates_python.txt
+++ b/docs/templates_python.txt
@@ -342,7 +342,7 @@ If ``TEMPLATE_CONTEXT_PROCESSORS`` contains this processor, every
* ``user`` -- An ``auth.User`` instance representing the currently
logged-in user (or an ``AnonymousUser`` instance, if the client isn't
- logged in). See the `user authentication docs`.
+ logged in). See the `user authentication docs`_.
* ``messages`` -- A list of messages (as strings) for the currently
logged-in user. Behind the scenes, this calls
diff --git a/docs/testing.txt b/docs/testing.txt
index 50c4ec3046..b326e0099d 100644
--- a/docs/testing.txt
+++ b/docs/testing.txt
@@ -253,8 +253,8 @@ can be invoked on the ``Client`` instance.
f.close()
will result in the evaluation of a POST request on ``/customers/wishes/``,
- with a POST dictionary that contains `name`, `attachment` (containing the
- file name), and `attachment_file` (containing the file data). Note that you
+ with a POST dictionary that contains ``name``, ``attachment`` (containing the
+ file name), and ``attachment_file`` (containing the file data). Note that you
need to manually close the file after it has been provided to the POST.
``login(**credentials)``
@@ -660,8 +660,8 @@ arguments:
tested. This is the same format returned by ``django.db.models.get_apps()``
Verbosity determines the amount of notification and debug information that
- will be printed to the console; `0` is no output, `1` is normal output,
- and `2` is verbose output.
+ will be printed to the console; ``0`` is no output, ``1`` is normal output,
+ and ``2`` is verbose output.
This method should return the number of tests that failed.
diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt
index eb530e92ff..56a2a3fefc 100644
--- a/docs/tutorial01.txt
+++ b/docs/tutorial01.txt
@@ -360,7 +360,7 @@ Note the following:
quotes. The author of this tutorial runs PostgreSQL, so the example
output is in PostgreSQL syntax.
- * The `sql` command doesn't actually run the SQL in your database - it just
+ * The ``sql`` command doesn't actually run the SQL in your database - it just
prints it to the screen so that you can see what SQL Django thinks is required.
If you wanted to, you could copy and paste this SQL into your database prompt.
However, as we will see shortly, Django provides an easier way of committing
diff --git a/tests/modeltests/lookup/models.py b/tests/modeltests/lookup/models.py
index 03630de2d1..207b27a7d9 100644
--- a/tests/modeltests/lookup/models.py
+++ b/tests/modeltests/lookup/models.py
@@ -5,6 +5,7 @@ This demonstrates features of the database API.
"""
from django.db import models
+from django.conf import settings
class Article(models.Model):
headline = models.CharField(maxlength=100)
@@ -251,4 +252,100 @@ Traceback (most recent call last):
...
TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id, headline, pub_date
+# Create some articles with a bit more interesting headlines for testing field lookups:
+>>> now = datetime.now()
+>>> for a in Article.objects.all():
+... a.delete()
+>>> a1 = Article(pub_date=now, headline='f')
+>>> a1.save()
+>>> a2 = Article(pub_date=now, headline='fo')
+>>> a2.save()
+>>> a3 = Article(pub_date=now, headline='foo')
+>>> a3.save()
+>>> a4 = Article(pub_date=now, headline='fooo')
+>>> a4.save()
+>>> a5 = Article(pub_date=now, headline='hey-Foo')
+>>> a5.save()
+
+# zero-or-more
+>>> Article.objects.filter(headline__regex=r'fo*')
+[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>]
+>>> Article.objects.filter(headline__iregex=r'fo*')
+[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>, <Article: hey-Foo>]
+
+# one-or-more
+>>> Article.objects.filter(headline__regex=r'fo+')
+[<Article: fo>, <Article: foo>, <Article: fooo>]
+
+# wildcard
+>>> Article.objects.filter(headline__regex=r'fooo?')
+[<Article: foo>, <Article: fooo>]
+
+# and some more:
+>>> a6 = Article(pub_date=now, headline='bar')
+>>> a6.save()
+>>> a7 = Article(pub_date=now, headline='AbBa')
+>>> a7.save()
+>>> a8 = Article(pub_date=now, headline='baz')
+>>> a8.save()
+>>> a9 = Article(pub_date=now, headline='baxZ')
+>>> a9.save()
+
+# leading anchor
+>>> Article.objects.filter(headline__regex=r'^b')
+[<Article: bar>, <Article: baxZ>, <Article: baz>]
+>>> Article.objects.filter(headline__iregex=r'^a')
+[<Article: AbBa>]
+
+# trailing anchor
+>>> Article.objects.filter(headline__regex=r'z$')
+[<Article: baz>]
+>>> Article.objects.filter(headline__iregex=r'z$')
+[<Article: baxZ>, <Article: baz>]
+
+# character sets
+>>> Article.objects.filter(headline__regex=r'ba[rz]')
+[<Article: bar>, <Article: baz>]
+>>> Article.objects.filter(headline__regex=r'ba.[RxZ]')
+[<Article: baxZ>]
+>>> Article.objects.filter(headline__iregex=r'ba[RxZ]')
+[<Article: bar>, <Article: baxZ>, <Article: baz>]
+
+# and yet more:
+>>> a10 = Article(pub_date=now, headline='foobar')
+>>> a10.save()
+>>> a11 = Article(pub_date=now, headline='foobaz')
+>>> a11.save()
+>>> a12 = Article(pub_date=now, headline='ooF')
+>>> a12.save()
+>>> a13 = Article(pub_date=now, headline='foobarbaz')
+>>> a13.save()
+>>> a14 = Article(pub_date=now, headline='zoocarfaz')
+>>> a14.save()
+>>> a15 = Article(pub_date=now, headline='barfoobaz')
+>>> a15.save()
+>>> a16 = Article(pub_date=now, headline='bazbaRFOO')
+>>> a16.save()
+
+# alternation
+>>> Article.objects.filter(headline__regex=r'oo(f|b)')
+[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
+>>> Article.objects.filter(headline__iregex=r'oo(f|b)')
+[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>, <Article: ooF>]
+>>> Article.objects.filter(headline__regex=r'^foo(f|b)')
+[<Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
+
+# greedy matching
+>>> Article.objects.filter(headline__regex=r'b.*az')
+[<Article: barfoobaz>, <Article: baz>, <Article: bazbaRFOO>, <Article: foobarbaz>, <Article: foobaz>]
+>>> Article.objects.filter(headline__iregex=r'b.*ar')
+[<Article: bar>, <Article: barfoobaz>, <Article: bazbaRFOO>, <Article: foobar>, <Article: foobarbaz>]
"""}
+
+
+if settings.DATABASE_ENGINE not in ('mysql', 'mysql_old'):
+ __test__['API_TESTS'] += r"""
+# grouping and backreferences
+>>> Article.objects.filter(headline__regex=r'b(.).*b\1')
+[<Article: barfoobaz>, <Article: bazbaRFOO>, <Article: foobarbaz>]
+"""
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index c78ccff678..3934863a03 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -225,6 +225,9 @@ class Templates(unittest.TestCase):
# in the final output.
'filter-syntax18': (r'{{ var }}', {'var': UTF8Class()}, u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'),
+ # Numbers as filter arguments should work
+ 'filter-syntax19': ('{{ var|truncatewords:1 }}', {"var": "hello world"}, "hello ..."),
+
### COMMENT SYNTAX ########################################################
'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"),