Author: Alex
Date: 2009-07-09 12:45:59 -0500 (Thu, 09 Jul 2009)
New Revision: 11209
Modified:
django/branches/soc2009/multidb/django/conf/locale/ca/LC_MESSAGES/django.mo
django/branches/soc2009/multidb/django/conf/locale/ca/LC_MESSAGES/django.po
django/branches/soc2009/multidb/django/conf/locale/es/LC_MESSAGES/django.mo
django/branches/soc2009/multidb/django/conf/locale/es/LC_MESSAGES/django.po
django/branches/soc2009/multidb/django/contrib/gis/gdal/prototypes/generation.py
django/branches/soc2009/multidb/django/contrib/gis/geos/prototypes/topology.py
django/branches/soc2009/multidb/django/core/urlresolvers.py
django/branches/soc2009/multidb/django/forms/models.py
django/branches/soc2009/multidb/django/template/defaulttags.py
django/branches/soc2009/multidb/docs/_ext/djangodocs.py
django/branches/soc2009/multidb/docs/_templates/layout.html
django/branches/soc2009/multidb/docs/faq/admin.txt
django/branches/soc2009/multidb/docs/howto/deployment/modpython.txt
django/branches/soc2009/multidb/docs/ref/contrib/admin/index.txt
django/branches/soc2009/multidb/docs/ref/databases.txt
django/branches/soc2009/multidb/docs/ref/templates/builtins.txt
django/branches/soc2009/multidb/docs/topics/i18n.txt
django/branches/soc2009/multidb/docs/topics/testing.txt
django/branches/soc2009/multidb/tests/regressiontests/admin_views/models.py
django/branches/soc2009/multidb/tests/regressiontests/admin_views/tests.py
Log:
[soc2009/multidb] Merged up to trunk r11205
Modified: django/branches/soc2009/multidb/django/conf/locale/ca/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)
Modified: django/branches/soc2009/multidb/django/conf/locale/ca/LC_MESSAGES/django.po
===================================================================
--- django/branches/soc2009/multidb/django/conf/locale/ca/LC_MESSAGES/django.po 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/conf/locale/ca/LC_MESSAGES/django.po 2009-07-09 17:45:59 UTC (rev 11209)
@@ -5,7 +5,7 @@
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-24 13:00+0100\n"
+"POT-Creation-Date: 2009-07-07 15:04+0200\n"
"PO-Revision-Date: 2009-03-24 13:28+0100\n"
"Last-Translator: Django Catalan Group <
django-cat@...>\n"
"Language-Team: Catalan <
ca@...>\n"
@@ -218,6 +218,20 @@
msgid "Traditional Chinese"
msgstr "xinès tradicional"
+#: contrib/admin/actions.py:60
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "Eliminat/s %(count)d %(items)s satisfactòriament."
+
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+msgid "Are you sure?"
+msgstr "Esteu segurs?"
+
+#: contrib/admin/actions.py:85
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Eliminar els %(verbose_name_plural)s seleccionats"
+
#: contrib/admin/filterspecs.py:44
#, python-format
msgid ""
@@ -252,15 +266,15 @@
msgid "This year"
msgstr "Aquest any"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:413
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
msgid "Yes"
msgstr "Si"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:413
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
msgid "No"
msgstr "No"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:413
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
msgid "Unknown"
msgstr "Desconegut"
@@ -296,74 +310,61 @@
msgid "log entries"
msgstr "entrades del registre"
-#: contrib/admin/options.py:131 contrib/admin/options.py:145
+#: contrib/admin/options.py:133 contrib/admin/options.py:147
msgid "None"
msgstr "cap"
-#: contrib/admin/options.py:498
+#: contrib/admin/options.py:519
#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Eliminat/s %(count)d %(items)s satisfactòriament."
-
-#: contrib/admin/options.py:505 contrib/admin/options.py:1012
-msgid "Are you sure?"
-msgstr "Esteu segurs?"
-
-#: contrib/admin/options.py:523
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Eliminar els %(verbose_name_plural)s seleccionats"
-
-#: contrib/admin/options.py:531
-#, python-format
msgid "Changed %s."
msgstr "Modificat %s."
-#: contrib/admin/options.py:531 contrib/admin/options.py:541
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:296
+#: contrib/admin/options.py:519 contrib/admin/options.py:529
+#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
+#: forms/models.py:600
msgid "and"
msgstr "i"
-#: contrib/admin/options.py:536
+#: contrib/admin/options.py:524
#, python-format
msgid "Added %(name)s \"%(object)s\"."
msgstr "Afegit %(name)s \"%(object)s\""
-#: contrib/admin/options.py:540
+#: contrib/admin/options.py:528
#, python-format
msgid "Changed %(list)s for %(name)s \"%(object)s\"."
msgstr "Modificat %(list)s per a %(name)s \"%(object)s\"."
-#: contrib/admin/options.py:545
+#: contrib/admin/options.py:533
#, python-format
msgid "Deleted %(name)s \"%(object)s\"."
msgstr "Eliminat %(name)s \"%(object)s\"."
-#: contrib/admin/options.py:549
+#: contrib/admin/options.py:537
msgid "No fields changed."
msgstr "Cap camp canviat."
-#: contrib/admin/options.py:610 contrib/auth/admin.py:67
+#: contrib/admin/options.py:598 contrib/auth/admin.py:67
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "El/la %(name)s \"%(obj)s\".ha estat afegit/da amb èxit."
-#: contrib/admin/options.py:614 contrib/admin/options.py:647
+#: contrib/admin/options.py:602 contrib/admin/options.py:635
#: contrib/auth/admin.py:75
msgid "You may edit it again below."
msgstr "Podeu editar-lo de nou a baix."
-#: contrib/admin/options.py:624 contrib/admin/options.py:657
+#: contrib/admin/options.py:612 contrib/admin/options.py:645
#, python-format
msgid "You may add another %s below."
msgstr "Podeu afegir un altre %s a baix."
-#: contrib/admin/options.py:645
+#: contrib/admin/options.py:633
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "S'ha modificat amb èxit el/la %(name)s \"%(obj)s."
-#: contrib/admin/options.py:653
+#: contrib/admin/options.py:641
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
@@ -371,43 +372,43 @@
"S'ha afegit exitosament el/la %(name)s \"%(obj)s\". Pot editar-lo de nou "
"abaix."
-#: contrib/admin/options.py:774
+#: contrib/admin/options.py:772
#, python-format
msgid "Add %s"
msgstr "Afegir %s"
-#: contrib/admin/options.py:805 contrib/admin/options.py:990
+#: contrib/admin/options.py:803 contrib/admin/options.py:1003
#, python-format
msgid "%(name)s object with primary key %(key)r does not exist."
msgstr "No existèix cap objecte %(name)s amb la clau primària %(key)r."
-#: contrib/admin/options.py:862
+#: contrib/admin/options.py:860
#, python-format
msgid "Change %s"
msgstr "Modificar %s"
-#: contrib/admin/options.py:894
+#: contrib/admin/options.py:904
msgid "Database error"
msgstr "Error de base de dades"
-#: contrib/admin/options.py:930
+#: contrib/admin/options.py:940
#, python-format
msgid "%(count)s %(name)s was changed successfully."
msgid_plural "%(count)s %(name)s were changed successfully."
msgstr[0] "%(count)s %(name)s s'ha modificat amb èxit."
msgstr[1] "%(count)s %(name)s s'han modificat amb èxit."
-#: contrib/admin/options.py:1005
+#: contrib/admin/options.py:1018
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "El/la %(name)s \"%(obj)s\" ha estat eliminat amb èxit."
-#: contrib/admin/options.py:1041
+#: contrib/admin/options.py:1054
#, python-format
msgid "Change history: %s"
msgstr "Modificar històric: %s"
-#: contrib/admin/sites.py:15 contrib/admin/views/decorators.py:14
+#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
#: contrib/auth/forms.py:80
msgid ""
"Please enter a correct username and password. Note that both fields are case-"
@@ -416,11 +417,11 @@
"Si us plau, introduïu un nom d'usuari i contrasenya vàlids. Tingueu en "
"compte que tots dos camps son sensibles a majúscules i minúscules."
-#: contrib/admin/sites.py:250 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
msgid "Please log in again, because your session has expired."
msgstr "Si us plau, identifiqueu-vos de nou doncs la vostra sessió ha expirat."
-#: contrib/admin/sites.py:257 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
@@ -429,29 +430,29 @@
"'cookies' (galetes). Si us plau, habiliteu les 'cookies', recarregueu "
"aquesta pàgina i proveu-ho de nou. "
-#: contrib/admin/sites.py:273 contrib/admin/sites.py:279
+#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
#: contrib/admin/views/decorators.py:66
msgid "Usernames cannot contain the '@' character."
msgstr "Els noms d'usuari no poden contenir el caracter '@'."
-#: contrib/admin/sites.py:276 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr ""
"La vostra adreça de correu no és el vostre nom d'usuari. Provi '%s' en tot "
"cas."
-#: contrib/admin/sites.py:336
+#: contrib/admin/sites.py:360
msgid "Site administration"
msgstr "Lloc administratiu"
-#: contrib/admin/sites.py:349 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
#: contrib/admin/templates/registration/password_reset_complete.html:14
#: contrib/admin/views/decorators.py:20
msgid "Log in"
msgstr "Iniciar sessió"
-#: contrib/admin/sites.py:396
+#: contrib/admin/sites.py:417
#, python-format
msgid "%s administration"
msgstr "Administració de %s"
@@ -466,34 +467,27 @@
msgid "One or more %(fieldname)s in %(name)s:"
msgstr "Un o més %(fieldname)s en %(name)s:"
-#: contrib/admin/util.py:222
-#, fuzzy
-msgid "verbose_name"
-msgid_plural "verbose_name_plural"
-msgstr[0] "verbose_name"
-msgstr[1] "verbose_name_plural"
-
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:71
msgid "Date:"
msgstr "Data:"
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:71
msgid "Time:"
msgstr "Hora:"
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:95
msgid "Currently:"
msgstr "Actualment:"
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:95
msgid "Change:"
msgstr "Modificar:"
-#: contrib/admin/widgets.py:123
+#: contrib/admin/widgets.py:124
msgid "Lookup"
msgstr "Cercar"
-#: contrib/admin/widgets.py:230
+#: contrib/admin/widgets.py:236
msgid "Add Another"
msgstr "Afegir un altre"
@@ -508,9 +502,9 @@
#: contrib/admin/templates/admin/500.html:4
#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:33
+#: contrib/admin/templates/admin/base.html:31
#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:20
+#: contrib/admin/templates/admin/change_list.html:25
#: contrib/admin/templates/admin/delete_confirmation.html:6
#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
#: contrib/admin/templates/admin/invalid_setup.html:4
@@ -552,7 +546,6 @@
msgstr "Executar la acció seleccionada"
#: contrib/admin/templates/admin/actions.html:4
-#: contrib/admin/templates/admin/search_form.html:8
msgid "Go"
msgstr "Anar"
@@ -562,26 +555,26 @@
msgid "%(name)s"
msgstr "%(name)s"
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:26
msgid "Welcome,"
msgstr "Benvingut/da,"
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
msgid "Documentation"
msgstr "Documentació"
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
+#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/auth/user/change_password.html:14
+#: contrib/admin/templates/admin/auth/user/change_password.html:47
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
msgid "Change password"
msgstr "Canviar contrasenya"
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
msgid "Log out"
@@ -612,24 +605,24 @@
msgstr "Veure al lloc"
#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:49
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
+#: contrib/admin/templates/admin/change_list.html:54
+#: contrib/admin/templates/admin/auth/user/change_password.html:23
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
msgstr[0] "Si us plau, corregiu l'error mostrat a baix."
msgstr[1] "Si us plau, corregiu els errors mostrats a baix."
-#: contrib/admin/templates/admin/change_list.html:41
+#: contrib/admin/templates/admin/change_list.html:46
#, python-format
msgid "Add %(name)s"
msgstr "Afegir %(name)s"
-#: contrib/admin/templates/admin/change_list.html:60
+#: contrib/admin/templates/admin/change_list.html:65
msgid "Filter"
msgstr "Filtre"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:251
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
msgid "Delete"
msgstr "Eliminar"
@@ -669,9 +662,9 @@
"your account doesn't have permission to delete the following types of "
"objects:"
msgstr ""
-"Eliminar el/la %(object_name)s provocaria l'eliminació "
-"d'objectes relacionats, però el vostre compte no te permissos per a esborrar "
-"els tipus d'objecte següents:"
+"Eliminar el/la %(object_name)s provocaria l'eliminació d'objectes "
+"relacionats, però el vostre compte no te permissos per a esborrar els tipus "
+"d'objecte següents:"
#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
#, python-format
@@ -679,8 +672,8 @@
"Are you sure you want to delete the selected %(object_name)s objects? All of "
"the following objects and it's related items will be deleted:"
msgstr ""
-"Esteu segurs de voler esborrar els/les %(object_name)s seleccionats?"
-"Tots aquests objectes i els seus elements relacionats s'esborraran:"
+"Esteu segurs de voler esborrar els/les %(object_name)s seleccionats?Tots "
+"aquests objectes i els seus elements relacionats s'esborraran:"
#: contrib/admin/templates/admin/filter.html:2
#, python-format
@@ -712,6 +705,10 @@
msgid "None available"
msgstr "Cap disponible"
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Contingut desconegut"
+
#: contrib/admin/templates/admin/invalid_setup.html:7
msgid ""
"Something's wrong with your database installation. Make sure the appropriate "
@@ -760,6 +757,15 @@
msgid "Show all"
msgstr "Mostrar tots"
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Desar"
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr "Cerca"
+
#: contrib/admin/templates/admin/search_form.html:10
#, python-format
msgid "1 result"
@@ -772,10 +778,6 @@
msgid "%(full_result_count)s total"
msgstr "%(full_result_count)s en total"
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Desar"
-
#: contrib/admin/templates/admin/submit_line.html:5
msgid "Save as new"
msgstr "Desar com a nou"
@@ -802,23 +804,23 @@
msgstr "Usuari"
#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
msgid "Password"
msgstr "Contrasenya"
#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/change_password.html:40
#: contrib/auth/forms.py:186
msgid "Password (again)"
msgstr "Contrasenya (de nou)"
#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
msgid "Enter the same password as above, for verification."
msgstr "Introduïu la mateixa contrasenya de dalt, per fer-ne la verificació."
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
+#: contrib/admin/templates/admin/auth/user/change_password.html:27
#, python-format
msgid "Enter a new password for the user <strong>%(username)s</strong>."
msgstr "Introduïu una contrasenya per l'usuari <strong>%(username)s</strong>"
@@ -1035,114 +1037,115 @@
msgid "the related `%(app_label)s.%(data_type)s` object"
msgstr "l'objecte relacionat `%(app_label)s.%(data_type)s`"
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:225
+#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:244
+#: contrib/admindocs/views.py:258 contrib/admindocs/views.py:263
msgid "model:"
msgstr "model:"
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:221 contrib/admindocs/views.py:253
#, python-format
msgid "related `%(app_label)s.%(object_name)s` objects"
msgstr "objectes relacionats `%(app_label)s.%(object_name)s`"
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:225 contrib/admindocs/views.py:258
#, python-format
msgid "all %s"
msgstr "tots %s"
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:263
#, python-format
msgid "number of %s"
msgstr "nombre de %s"
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:268
#, python-format
msgid "Fields on %s objects"
msgstr "Camps en objectes %s"
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
+#: contrib/admindocs/views.py:331 contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:344 contrib/admindocs/views.py:350
+#: contrib/admindocs/views.py:351 contrib/admindocs/views.py:353
msgid "Integer"
msgstr "Enter"
-#: contrib/admindocs/views.py:316
+#: contrib/admindocs/views.py:332
msgid "Boolean (Either True or False)"
msgstr "Booleà (Verdader o Fals)"
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:333 contrib/admindocs/views.py:352
#, python-format
msgid "String (up to %(max_length)s)"
msgstr "Cadena (de fins a %(max_length)s)"
-#: contrib/admindocs/views.py:318
+#: contrib/admindocs/views.py:334
msgid "Comma-separated integers"
msgstr "Enters separats per comes"
-#: contrib/admindocs/views.py:319
+#: contrib/admindocs/views.py:335
msgid "Date (without time)"
msgstr "Data (sense hora)"
-#: contrib/admindocs/views.py:320
+#: contrib/admindocs/views.py:336
msgid "Date (with time)"
msgstr "Data (amb hora)"
-#: contrib/admindocs/views.py:321
+#: contrib/admindocs/views.py:337
msgid "Decimal number"
msgstr "Número decimal"
-#: contrib/admindocs/views.py:322
+#: contrib/admindocs/views.py:338
msgid "E-mail address"
msgstr "Adreça de correu electrònic"
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
+#: contrib/admindocs/views.py:339 contrib/admindocs/views.py:340
+#: contrib/admindocs/views.py:343
msgid "File path"
msgstr "Ruta del fitxer"
-#: contrib/admindocs/views.py:325
+#: contrib/admindocs/views.py:341
msgid "Floating point number"
msgstr "Número amb punt de coma flotant"
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:58
+#: contrib/admindocs/views.py:345 contrib/comments/models.py:60
msgid "IP address"
msgstr "Adreça IP"
-#: contrib/admindocs/views.py:331
+#: contrib/admindocs/views.py:347
msgid "Boolean (Either True, False or None)"
msgstr "Booleà (Verdader, Fals o 'None' (cap))"
-#: contrib/admindocs/views.py:332
+#: contrib/admindocs/views.py:348
msgid "Relation to parent model"
msgstr "Relació amb el model pare"
-#: contrib/admindocs/views.py:333
+#: contrib/admindocs/views.py:349
msgid "Phone number"
msgstr "Número de telèfon"
-#: contrib/admindocs/views.py:338
+#: contrib/admindocs/views.py:354
msgid "Text"
msgstr "Text"
-#: contrib/admindocs/views.py:339
+#: contrib/admindocs/views.py:355
msgid "Time"
msgstr "Hora"
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
+#: contrib/admindocs/views.py:356 contrib/comments/forms.py:95
#: contrib/comments/templates/comments/moderation_queue.html:37
#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
msgid "URL"
msgstr "URL"
-#: contrib/admindocs/views.py:341
+#: contrib/admindocs/views.py:357
msgid "U.S. state (two uppercase letters)"
msgstr "Estat dels E.U.A. (dues lletres majúscules)"
-#: contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:358
msgid "XML text"
msgstr "Text XML"
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:384
#, python-format
msgid "%s does not appear to be a urlpattern object"
msgstr "%s no sembla ser un objecte 'urlpattern'"
@@ -1247,7 +1250,7 @@
msgstr "Canviar contrasenya: %s"
#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:127
+#: contrib/auth/models.py:128
msgid ""
"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
"digits and underscores)."
@@ -1338,31 +1341,31 @@
msgid "group"
msgstr "grup"
-#: contrib/auth/models.py:91 contrib/auth/models.py:137
+#: contrib/auth/models.py:91 contrib/auth/models.py:138
msgid "groups"
msgstr "grups"
-#: contrib/auth/models.py:127
+#: contrib/auth/models.py:128
msgid "username"
msgstr "nom d'usuari"
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:129
msgid "first name"
msgstr "nom propi"
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:130
msgid "last name"
msgstr "cognoms"
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:131
msgid "e-mail address"
msgstr "adreça de correu electrònic"
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:132
msgid "password"
msgstr "contrasenya"
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:132
msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>."
@@ -1370,19 +1373,19 @@
"Utilitzeu '[algo]$[salt]$[hexdigest]' o el <a href=\"password/\">formulari "
"de canvi de contrasenya</a>."
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:133
msgid "staff status"
msgstr "membre del personal"
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:133
msgid "Designates whether the user can log into this admin site."
msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:134
msgid "active"
msgstr "actiu"
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:134
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
@@ -1390,11 +1393,11 @@
"Designa si aquest usuari ha de ser tractat com a actiu. Deseleccioneu-ho "
"enlloc d'esborrar comptes d'usuari."
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:135
msgid "superuser status"
msgstr "estat de superusuari"
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:135
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1402,15 +1405,15 @@
"Designa que aquest usuari té tots els permissos sense assignar-los "
"explícitament."
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:136
msgid "last login"
msgstr "últim inici de sessió"
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:137
msgid "date joined"
msgstr "data de creació"
-#: contrib/auth/models.py:138
+#: contrib/auth/models.py:139
msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
@@ -1418,23 +1421,24 @@
"Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els "
"permissos dels grups dels que sigui membre."
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:140
msgid "user permissions"
msgstr "permissos de l'usuari"
-#: contrib/auth/models.py:143
+#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
msgid "user"
msgstr "usuari"
-#: contrib/auth/models.py:144
+#: contrib/auth/models.py:145
msgid "users"
msgstr "usuaris"
-#: contrib/auth/models.py:300
+#: contrib/auth/models.py:301
msgid "message"
msgstr "missatge"
-#: contrib/auth/views.py:50
+#: contrib/auth/views.py:56
msgid "Logged out"
msgstr "Sessió finalitzada"
@@ -1450,6 +1454,16 @@
msgid "Metadata"
msgstr "metadades"
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "comentaris de %(site_name)s"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Últims comentaris a %(site_name)s."
+
#: contrib/comments/forms.py:93
#: contrib/comments/templates/comments/moderation_queue.html:34
msgid "Name"
@@ -1479,46 +1493,51 @@
"Si entreu cualsevol cosa en aquest camp el vostre comentari es tractarà com "
"a spam"
-#: contrib/comments/models.py:23
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+msgid "content type"
+msgstr "tipus de contingut"
+
+#: contrib/comments/models.py:24
msgid "object ID"
msgstr "ID de l'objecte"
-#: contrib/comments/models.py:50
+#: contrib/comments/models.py:52
msgid "user's name"
msgstr "nom d'usuari"
-#: contrib/comments/models.py:51
+#: contrib/comments/models.py:53
msgid "user's email address"
msgstr "adreça de correu electrònic del usuari"
-#: contrib/comments/models.py:52
+#: contrib/comments/models.py:54
msgid "user's URL"
msgstr "URL del usuari"
-#: contrib/comments/models.py:54
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
msgid "comment"
msgstr "comentari"
-#: contrib/comments/models.py:57
+#: contrib/comments/models.py:59
msgid "date/time submitted"
msgstr "data/hora d'enviament"
-#: contrib/comments/models.py:59
+#: contrib/comments/models.py:61
msgid "is public"
msgstr "és públic"
-#: contrib/comments/models.py:60
+#: contrib/comments/models.py:62
msgid ""
"Uncheck this box to make the comment effectively disappear from the site."
msgstr ""
"Desmarqui aquesta casella per fer desaparèixar aquest comentari del lloc web "
"de forma efectiva."
-#: contrib/comments/models.py:62
+#: contrib/comments/models.py:64
msgid "is removed"
msgstr "està eliminat"
-#: contrib/comments/models.py:63
+#: contrib/comments/models.py:65
msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead."
@@ -1526,7 +1545,11 @@
"Marqueu aquesta caixa si el comentari no és apropiat. En lloc seu es "
"mostrarà \"Aquest comentari ha estat eliminat\" "
-#: contrib/comments/models.py:115
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "comentaris"
+
+#: contrib/comments/models.py:119
msgid ""
"This comment was posted by an authenticated user and thus the name is read-"
"only."
@@ -1534,7 +1557,7 @@
"Aquest comentari va ser publicat per un usuari autentificat, per això el seu "
"nom no es modificable."
-#: contrib/comments/models.py:124
+#: contrib/comments/models.py:128
msgid ""
"This comment was posted by an authenticated user and thus the email is read-"
"only."
@@ -1542,7 +1565,7 @@
"Aquest comentari va ser publicat per un usuari autentificat, per això la "
"seva adreça de correu electrònic no es pot modificar."
-#: contrib/comments/models.py:149
+#: contrib/comments/models.py:153
#, python-format
msgid ""
"Posted by %(user)s at %(date)s\n"
@@ -1557,9 +1580,26 @@
"\n"
"
http://%(domain)s%(url)s"
+# Context problem... waitting for comments from django-i18n
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "marcar"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "data"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "marca del comentari"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "marques de comentari"
+
#: contrib/comments/templates/comments/approve.html:4
msgid "Approve a comment"
-msgstr "aprovar un comentari"
+msgstr "Aprovar un comentari"
#: contrib/comments/templates/comments/approve.html:7
msgid "Really make this comment public?"
@@ -1616,13 +1656,13 @@
msgid "Thanks for flagging"
msgstr "Gràcies per marcar"
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
msgid "Post"
msgstr "Publicar"
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
msgid "Preview"
msgstr "Vista prèvia"
@@ -1668,33 +1708,29 @@
msgstr "Gràcies pel seu comentari"
#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
+#: contrib/comments/templates/comments/preview.html:13
msgid "Preview your comment"
msgstr "Previsualitzar el seu comentari"
-#: contrib/comments/templates/comments/preview.html:10
+#: contrib/comments/templates/comments/preview.html:11
msgid "Please correct the error below"
msgid_plural "Please correct the errors below"
msgstr[0] "Si us plau, corregiu l'error mostrat a baix."
msgstr[1] "Si us plau, corregiu els errors mostrats a baix."
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
msgid "Post your comment"
msgstr "Enviar el seu comentari"
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
msgid "or make changes"
msgstr "o faci canvis."
-#: contrib/contenttypes/models.py:67
+#: contrib/contenttypes/models.py:70
msgid "python model class name"
msgstr "nom de la classe del model en python"
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "tipus de contingut"
-
-#: contrib/contenttypes/models.py:72
+#: contrib/contenttypes/models.py:75
msgid "content types"
msgstr "tipus de continguts"
@@ -1765,18 +1801,26 @@
"Ho sentim, pero el seu formulari ha expirat. Per favor, continui omplint el "
"formulari en aquesta pàgina."
-#: contrib/gis/forms/fields.py:14
+#: contrib/gis/forms/fields.py:17
msgid "No geometry value provided."
msgstr "No s'ha indicat cap valor de geometria."
-#: contrib/gis/forms/fields.py:15
+#: contrib/gis/forms/fields.py:18
msgid "Invalid geometry value."
msgstr "Valor de geometria invàlid."
-#: contrib/gis/forms/fields.py:16
+#: contrib/gis/forms/fields.py:19
msgid "Invalid geometry type."
msgstr "Tipus de geometria invàlid."
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"Ha ocurregut un error al transformar la geometria al SRID de la geometria "
+"del camp de formulari."
+
#: contrib/humanize/templatetags/humanize.py:19
msgid "th"
msgstr "rt"
@@ -2112,51 +2156,51 @@
#: contrib/localflavor/cz/cz_regions.py:10
msgid "South Bohemian Region"
-msgstr "Regió Bohemia Sur"
+msgstr "Regió Bohèmia Sur"
#: contrib/localflavor/cz/cz_regions.py:11
msgid "Pilsen Region"
-msgstr ""
+msgstr "Regió Pilsen"
#: contrib/localflavor/cz/cz_regions.py:12
msgid "Carlsbad Region"
-msgstr ""
+msgstr "Regió Carlsbad"
#: contrib/localflavor/cz/cz_regions.py:13
msgid "Usti Region"
-msgstr ""
+msgstr "Regió Usti"
#: contrib/localflavor/cz/cz_regions.py:14
msgid "Liberec Region"
-msgstr ""
+msgstr "Regió Liberec"
#: contrib/localflavor/cz/cz_regions.py:15
msgid "Hradec Region"
-msgstr ""
+msgstr "Regió Hradec"
#: contrib/localflavor/cz/cz_regions.py:16
msgid "Pardubice Region"
-msgstr ""
+msgstr "Regió Pardubice"
#: contrib/localflavor/cz/cz_regions.py:17
msgid "Vysocina Region"
-msgstr ""
+msgstr "Regió Vysocina"
#: contrib/localflavor/cz/cz_regions.py:18
msgid "South Moravian Region"
-msgstr ""
+msgstr "Regió Moràvia Sur"
#: contrib/localflavor/cz/cz_regions.py:19
msgid "Olomouc Region"
-msgstr ""
+msgstr "Regió Olomouc"
#: contrib/localflavor/cz/cz_regions.py:20
msgid "Zlin Region"
-msgstr ""
+msgstr "Regió Zlin"
#: contrib/localflavor/cz/cz_regions.py:21
msgid "Moravian-Silesian Region"
-msgstr ""
+msgstr "Regió Moràvia-Silesiana"
#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
msgid "Enter a postal code in the format XXXXX or XXX XX."
@@ -2164,11 +2208,13 @@
#: contrib/localflavor/cz/forms.py:47
msgid "Enter a birth number in the format XXXXXX/XXXX or XXXXXXXXXX."
-msgstr "Introduïu un número de naixement en el format XXXXXX/XXXX o XXXXXXXXXX."
+msgstr ""
+"Introduïu un número de naixement en el format XXXXXX/XXXX o XXXXXXXXXX."
#: contrib/localflavor/cz/forms.py:48
msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "El paràmetre opcional 'Gènere' és invàlid, els valors vàlids son 'f' i 'm'."
+msgstr ""
+"El paràmetre opcional 'Gènere' és invàlid, els valors vàlids son 'f' i 'm'."
#: contrib/localflavor/cz/forms.py:49
msgid "Enter a valid birth number."
@@ -3004,16 +3050,16 @@
msgid "Wrong checksum for the Tax Number (NIP)."
msgstr "Validació invàlida del número tributari (NIP)."
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
msgstr ""
-"El número nacional de registre de negocis (REGON) consisteix en 7 o 9 dígits."
+"El número nacional de registre de negocis (REGON) consisteix en 9 o 14 dígits."
-#: contrib/localflavor/pl/forms.py:112
+#: contrib/localflavor/pl/forms.py:110
msgid "Wrong checksum for the National Business Register Number (REGON)."
msgstr "Validació invàlida del número nacional de registre de negocis."
-#: contrib/localflavor/pl/forms.py:155
+#: contrib/localflavor/pl/forms.py:148
msgid "Enter a postal code in the format XX-XXX."
msgstr "Introduïu un codi postal en el format XX-XXX."
@@ -3851,60 +3897,60 @@
msgid "sites"
msgstr "llocs"
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:700
+#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
msgid "This value must be an integer."
msgstr "Aquest valor ha de ser un enter."
-#: db/models/fields/__init__.py:387
+#: db/models/fields/__init__.py:388
msgid "This value must be either True or False."
msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)"
-#: db/models/fields/__init__.py:420
+#: db/models/fields/__init__.py:427
msgid "This field cannot be null."
msgstr "Aquest camp no pot ser nul."
-#: db/models/fields/__init__.py:436
+#: db/models/fields/__init__.py:443
msgid "Enter only digits separated by commas."
msgstr "Introduïu només dígits separats per comes."
-#: db/models/fields/__init__.py:467
+#: db/models/fields/__init__.py:474
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Introduïu una data vàlida en el forma AAAA-MM-DD."
-#: db/models/fields/__init__.py:476
+#: db/models/fields/__init__.py:483
#, python-format
msgid "Invalid date: %s"
msgstr "Data invàlida: %s"
-#: db/models/fields/__init__.py:540 db/models/fields/__init__.py:558
+#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
msgstr ""
"Introduïu un data/hora vàlida en format YYYY-MM-DD HH:MM[:ss[.uuuuuu]]."
-#: db/models/fields/__init__.py:594
+#: db/models/fields/__init__.py:601
msgid "This value must be a decimal number."
msgstr "Aquest valor ha de ser un número decimal."
-#: db/models/fields/__init__.py:676
+#: db/models/fields/__init__.py:686
msgid "This value must be a float."
msgstr "Aquest valor ha de ser un número amb punt de coma flotant."
-#: db/models/fields/__init__.py:736
+#: db/models/fields/__init__.py:746
msgid "This value must be either None, True or False."
msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)"
-#: db/models/fields/__init__.py:839 db/models/fields/__init__.py:853
+#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
msgstr "Introduïu una hora vàlida en el format HH:MM[:ss[.uuuuuu]]."
-#: db/models/fields/related.py:779
+#: db/models/fields/related.py:816
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"Premeu la tecla \"Control\" -o \"Command\" en un Mac- per seleccionar més "
"d'un valor."
-#: db/models/fields/related.py:857
+#: db/models/fields/related.py:894
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -3971,11 +4017,11 @@
msgid "Ensure that there are no more than %s digits before the decimal point."
msgstr "Assegureu-vos de que no hi ha més de %s dígits decimals."
-#: forms/fields.py:288 forms/fields.py:850
+#: forms/fields.py:288 forms/fields.py:863
msgid "Enter a valid date."
msgstr "Introduïu una data vàlida."
-#: forms/fields.py:322 forms/fields.py:851
+#: forms/fields.py:322 forms/fields.py:864
msgid "Enter a valid time."
msgstr "Introduïu una hora vàlida."
@@ -3996,114 +4042,155 @@
msgid "The submitted file is empty."
msgstr "El fitxer enviat està buit."
-#: forms/fields.py:478
+#: forms/fields.py:450
+#, python-format
msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+"Assegureu-vos de que el valor té com a màxim %(max)d caràcters "
+"(en té %(length)d)."
+
+#: forms/fields.py:483
+msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
"Envieu una imatge vàlida. El fitxer que heu enviat no era una imatge o "
"estava corrupte."
-#: forms/fields.py:539
+#: forms/fields.py:544
msgid "Enter a valid URL."
msgstr "Introduïu una URL vàlida."
-#: forms/fields.py:540
+#: forms/fields.py:545
msgid "This URL appears to be a broken link."
msgstr "Aquesta URL sembla ser un enllaç trencat."
-#: forms/fields.py:619 forms/fields.py:697
+#: forms/fields.py:625 forms/fields.py:703
#, python-format
msgid "Select a valid choice. %(value)s is not one of the available choices."
msgstr "Esculliu una opció vàlida. %(value)s no és una de les opcions vàlides."
-#: forms/fields.py:698 forms/fields.py:759 forms/models.py:729
+#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
msgid "Enter a list of values."
msgstr "Introduïu una llista de valors."
-#: forms/fields.py:879
+#: forms/fields.py:892
msgid "Enter a valid IPv4 address."
msgstr "Introduïu una adreça IPv4 vàlida."
-#: forms/fields.py:889
+#: forms/fields.py:902
msgid ""
"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
msgstr ""
"Introduïu un 'slug' vàlid, consistent en lletres, números, guions o guions "
"baixos."
-#: forms/formsets.py:247 forms/formsets.py:249
+#: forms/formsets.py:271 forms/formsets.py:273
msgid "Order"
msgstr "Ordre"
-#: forms/models.py:289 forms/models.py:298
+#: forms/models.py:367
#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "El camp %(field_name)s ha de ser únic per a %(lookup)s %(date_field)s."
+
+#: forms/models.py:381 forms/models.py:389
+#, python-format
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr "Ja existeix %(model_name)s amb aquest %(field_label)s."
-#: forms/models.py:602
+#: forms/models.py:594
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Si us plau, corregiu la dada duplicada per a %(field)s."
+
+#: forms/models.py:598
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr "Si us plau, corregiu la dada duplicada per a %(field)s, la qual ha de ser única."
+
+#: forms/models.py:604
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Si us plau, corregiu la dada duplicada per a %(field_name)s, "
+"la qual ha de ser única per a la cerca %(lookup)s en %(date_field)s."
+
+#: forms/models.py:612
+msgid "Please correct the duplicate values below."
+msgstr "Si us plau, corregiu els valors duplicats a baix."
+
+#: forms/models.py:867
msgid "The inline foreign key did not match the parent instance primary key."
msgstr ""
"La clau forànea en línea no coincideix amb la clau primària de la instància "
"del pare"
-#: forms/models.py:659
+#: forms/models.py:930
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr ""
"Escolli una opció vàlida; Aquesta opció no és una de les opcions disponibles."
-#: forms/models.py:730
+#: forms/models.py:1004
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "Escolliu una opció vàlida; %s' no és una de les opcions vàlides."
-#: template/defaultfilters.py:751
+#: forms/models.py:1006
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "\"%s\" no és un valor vàlid per a una clau primària."
+
+#: template/defaultfilters.py:767
msgid "yes,no,maybe"
msgstr "si,no,potser"
-#: template/defaultfilters.py:782
+#: template/defaultfilters.py:798
#, python-format
msgid "%(size)d byte"
msgid_plural "%(size)d bytes"
msgstr[0] "%(size)d byte"
msgstr[1] "%(size)d bytes"
-#: template/defaultfilters.py:784
+#: template/defaultfilters.py:800
#, python-format
msgid "%.1f KB"
msgstr "%.1f KB"
-#: template/defaultfilters.py:786
+#: template/defaultfilters.py:802
#, python-format
msgid "%.1f MB"
msgstr "%.1f MB"
-#: template/defaultfilters.py:787
+#: template/defaultfilters.py:803
#, python-format
msgid "%.1f GB"
msgstr "%.1f GB"
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
msgid "p.m."
msgstr "p.m."
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
msgid "a.m."
msgstr "a.m."
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
msgid "PM"
msgstr "PM"
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
msgid "AM"
msgstr "AM"
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
msgid "midnight"
msgstr "mitja nit"
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
msgid "noon"
msgstr "mig dia"
@@ -4327,16 +4414,16 @@
msgstr[0] "minut"
msgstr[1] "minuts"
-#: utils/timesince.py:43
+#: utils/timesince.py:45
msgid "minutes"
msgstr "minuts"
-#: utils/timesince.py:48
+#: utils/timesince.py:50
#, python-format
msgid "%(number)d %(type)s"
msgstr "%(number)d %(type)s"
-#: utils/timesince.py:54
+#: utils/timesince.py:56
#, python-format
msgid ", %(number)d %(type)s"
msgstr ", %(number)d %(type)s"
@@ -4371,3 +4458,9 @@
#, python-format
msgid "The %(verbose_name)s was deleted."
msgstr "El %(verbose_name)s s'ha eliminat."
+
+#, fuzzy
+#~ msgid "verbose_name"
+#~ msgid_plural "verbose_name_plural"
+#~ msgstr[0] "verbose_name"
+#~ msgstr[1] "verbose_name_plural"
Modified: django/branches/soc2009/multidb/django/conf/locale/es/LC_MESSAGES/django.mo
===================================================================
(Binary files differ)
Modified: django/branches/soc2009/multidb/django/conf/locale/es/LC_MESSAGES/django.po
===================================================================
--- django/branches/soc2009/multidb/django/conf/locale/es/LC_MESSAGES/django.po 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/conf/locale/es/LC_MESSAGES/django.po 2009-07-09 17:45:59 UTC (rev 11209)
@@ -5,8 +5,8 @@
msgstr ""
"Project-Id-Version: Django\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-03-24 13:00+0100\n"
-"PO-Revision-Date: 2009-03-24 13:26+0100\n"
+"POT-Creation-Date: 2009-07-07 15:15+0200\n"
+"PO-Revision-Date: 2009-07-07 15:22+0200\n"
"Last-Translator: Django Spanish Team <
django-cat@...>Language-"
"Team: Django Spanish Team <
django-cat@...>MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -217,6 +217,20 @@
msgid "Traditional Chinese"
msgstr "chino tradicional"
+#: contrib/admin/actions.py:60
+#, python-format
+msgid "Successfully deleted %(count)d %(items)s."
+msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente."
+
+#: contrib/admin/actions.py:67 contrib/admin/options.py:1025
+msgid "Are you sure?"
+msgstr "¿Está seguro?"
+
+#: contrib/admin/actions.py:85
+#, python-format
+msgid "Delete selected %(verbose_name_plural)s"
+msgstr "Eliminar %(verbose_name_plural)s seleccionado/s"
+
#: contrib/admin/filterspecs.py:44
#, python-format
msgid ""
@@ -251,15 +265,15 @@
msgid "This year"
msgstr "Este año"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:413
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
msgid "Yes"
msgstr "Sí"
-#: contrib/admin/filterspecs.py:147 forms/widgets.py:413
+#: contrib/admin/filterspecs.py:147 forms/widgets.py:434
msgid "No"
msgstr "No"
-#: contrib/admin/filterspecs.py:154 forms/widgets.py:413
+#: contrib/admin/filterspecs.py:154 forms/widgets.py:434
msgid "Unknown"
msgstr "Desconocido"
@@ -295,117 +309,104 @@
msgid "log entries"
msgstr "entradas de registro"
-#: contrib/admin/options.py:131 contrib/admin/options.py:145
+#: contrib/admin/options.py:133 contrib/admin/options.py:147
msgid "None"
msgstr "Ninguno"
-#: contrib/admin/options.py:498
+#: contrib/admin/options.py:519
#, python-format
-msgid "Successfully deleted %(count)d %(items)s."
-msgstr "Eliminado/s %(count)d %(items)s satisfactoriamente."
-
-#: contrib/admin/options.py:505 contrib/admin/options.py:1012
-msgid "Are you sure?"
-msgstr "¿Está seguro?"
-
-#: contrib/admin/options.py:523
-#, python-format
-msgid "Delete selected %(verbose_name_plural)s"
-msgstr "Eliminar %(verbose_name_plural)s seleccionado/s"
-
-#: contrib/admin/options.py:531
-#, python-format
msgid "Changed %s."
msgstr "Modificado/a %s."
-#: contrib/admin/options.py:531 contrib/admin/options.py:541
-#: contrib/comments/templates/comments/preview.html:15 forms/models.py:296
+#: contrib/admin/options.py:519 contrib/admin/options.py:529
+#: contrib/comments/templates/comments/preview.html:16 forms/models.py:388
+#: forms/models.py:600
msgid "and"
msgstr "y"
-#: contrib/admin/options.py:536
+#: contrib/admin/options.py:524
#, python-format
msgid "Added %(name)s \"%(object)s\"."
msgstr "Añadido/a \"%(object)s\" %(name)s."
-#: contrib/admin/options.py:540
+#: contrib/admin/options.py:528
#, python-format
msgid "Changed %(list)s for %(name)s \"%(object)s\"."
msgstr "Modificados %(list)s para \"%(object)s\" %(name)s."
-#: contrib/admin/options.py:545
+#: contrib/admin/options.py:533
#, python-format
msgid "Deleted %(name)s \"%(object)s\"."
msgstr "Eliminado/a \"%(object)s\" %(name)s."
-#: contrib/admin/options.py:549
+#: contrib/admin/options.py:537
msgid "No fields changed."
msgstr "No ha cambiado ningún campo."
-#: contrib/admin/options.py:610 contrib/auth/admin.py:67
+#: contrib/admin/options.py:598 contrib/auth/admin.py:67
#, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "Se añadió con éxito el %(name)s \"%(obj)s\"."
-#: contrib/admin/options.py:614 contrib/admin/options.py:647
+#: contrib/admin/options.py:602 contrib/admin/options.py:635
#: contrib/auth/admin.py:75
msgid "You may edit it again below."
msgstr "Puede editarlo de nuevo abajo."
-#: contrib/admin/options.py:624 contrib/admin/options.py:657
+#: contrib/admin/options.py:612 contrib/admin/options.py:645
#, python-format
msgid "You may add another %s below."
msgstr "Puede añadir otro %s abajo."
-#: contrib/admin/options.py:645
+#: contrib/admin/options.py:633
#, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "Se modificó con éxito el %(name)s \"%(obj)s\"."
-#: contrib/admin/options.py:653
+#: contrib/admin/options.py:641
#, python-format
msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr ""
"Se añadió con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo."
-#: contrib/admin/options.py:774
+#: contrib/admin/options.py:772
#, python-format
msgid "Add %s"
msgstr "Añadir %s"
-#: contrib/admin/options.py:805 contrib/admin/options.py:990
+#: contrib/admin/options.py:803 contrib/admin/options.py:1003
#, python-format
msgid "%(name)s object with primary key %(key)r does not exist."
msgstr "No existe ningún objeto %(name)s con la clave primaria %(key)r."
-#: contrib/admin/options.py:862
+#: contrib/admin/options.py:860
#, python-format
msgid "Change %s"
msgstr "Modificar %s"
-#: contrib/admin/options.py:894
+#: contrib/admin/options.py:904
msgid "Database error"
msgstr "Error en la base de datos"
-#: contrib/admin/options.py:930
+#: contrib/admin/options.py:940
#, python-format
msgid "%(count)s %(name)s was changed successfully."
msgid_plural "%(count)s %(name)s were changed successfully."
msgstr[0] "%(count)s %(name)s fué modificado con éxito."
msgstr[1] "%(count)s %(name)s fueron modificados con éxito."
-#: contrib/admin/options.py:1005
+#: contrib/admin/options.py:1018
#, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "Se eliminó con éxito el %(name)s \"%(obj)s\"."
-#: contrib/admin/options.py:1041
+#: contrib/admin/options.py:1054
#, python-format
msgid "Change history: %s"
msgstr "Histórico de modificaciones: %s"
-#: contrib/admin/sites.py:15 contrib/admin/views/decorators.py:14
+#: contrib/admin/sites.py:20 contrib/admin/views/decorators.py:14
#: contrib/auth/forms.py:80
msgid ""
"Please enter a correct username and password. Note that both fields are case-"
@@ -414,11 +415,11 @@
"Por favor, introduzca un nombre de usuario y contraseña correctos. Note que "
"ambos campos son sensibles a mayúsculas/minúsculas."
-#: contrib/admin/sites.py:250 contrib/admin/views/decorators.py:40
+#: contrib/admin/sites.py:278 contrib/admin/views/decorators.py:40
msgid "Please log in again, because your session has expired."
msgstr "Por favor, inicie sesión de nuevo, ya que su sesión ha caducado."
-#: contrib/admin/sites.py:257 contrib/admin/views/decorators.py:47
+#: contrib/admin/sites.py:285 contrib/admin/views/decorators.py:47
msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again."
@@ -426,29 +427,29 @@
"Parece que su navegador no está configurado para aceptar cookies. "
"Actívelas , recargue esta página, e inténtelo de nuevo."
-#: contrib/admin/sites.py:273 contrib/admin/sites.py:279
+#: contrib/admin/sites.py:301 contrib/admin/sites.py:307
#: contrib/admin/views/decorators.py:66
msgid "Usernames cannot contain the '@' character."
msgstr "Los nombres de usuario no pueden contener el carácter '@'."
-#: contrib/admin/sites.py:276 contrib/admin/views/decorators.py:62
+#: contrib/admin/sites.py:304 contrib/admin/views/decorators.py:62
#, python-format
msgid "Your e-mail address is not your username. Try '%s' instead."
msgstr ""
"Su dirección de correo no es su nombre de usuario. Pruebe con '%s' en su "
"lugar."
-#: contrib/admin/sites.py:336
+#: contrib/admin/sites.py:360
msgid "Site administration"
msgstr "Sitio administrativo"
-#: contrib/admin/sites.py:349 contrib/admin/templates/admin/login.html:26
+#: contrib/admin/sites.py:373 contrib/admin/templates/admin/login.html:26
#: contrib/admin/templates/registration/password_reset_complete.html:14
#: contrib/admin/views/decorators.py:20
msgid "Log in"
msgstr "Iniciar sesión"
-#: contrib/admin/sites.py:396
+#: contrib/admin/sites.py:417
#, python-format
msgid "%s administration"
msgstr "Administración de %s"
@@ -463,33 +464,27 @@
msgid "One or more %(fieldname)s in %(name)s:"
msgstr "Uno o más %(fieldname)s en %(name)s:"
-#: contrib/admin/util.py:222
-msgid "verbose_name"
-msgid_plural "verbose_name_plural"
-msgstr[0] "verbose_name"
-msgstr[1] "verbose_name_plural"
-
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:71
msgid "Date:"
msgstr "Fecha:"
-#: contrib/admin/widgets.py:70
+#: contrib/admin/widgets.py:71
msgid "Time:"
msgstr "Hora:"
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:95
msgid "Currently:"
msgstr "Actualmente:"
-#: contrib/admin/widgets.py:94
+#: contrib/admin/widgets.py:95
msgid "Change:"
msgstr "Modificar:"
-#: contrib/admin/widgets.py:123
+#: contrib/admin/widgets.py:124
msgid "Lookup"
msgstr "Buscar"
-#: contrib/admin/widgets.py:230
+#: contrib/admin/widgets.py:236
msgid "Add Another"
msgstr "Añadir otro"
@@ -504,9 +499,9 @@
#: contrib/admin/templates/admin/500.html:4
#: contrib/admin/templates/admin/app_index.html:8
-#: contrib/admin/templates/admin/base.html:33
+#: contrib/admin/templates/admin/base.html:31
#: contrib/admin/templates/admin/change_form.html:17
-#: contrib/admin/templates/admin/change_list.html:20
+#: contrib/admin/templates/admin/change_list.html:25
#: contrib/admin/templates/admin/delete_confirmation.html:6
#: contrib/admin/templates/admin/delete_selected_confirmation.html:6
#: contrib/admin/templates/admin/invalid_setup.html:4
@@ -549,7 +544,6 @@
msgstr "Ejecutar la acción seleccionada"
#: contrib/admin/templates/admin/actions.html:4
-#: contrib/admin/templates/admin/search_form.html:8
msgid "Go"
msgstr "Ir"
@@ -559,26 +553,26 @@
msgid "%(name)s"
msgstr "%(name)s"
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:26
msgid "Welcome,"
msgstr "Bienvenido/a,"
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
#: contrib/admindocs/templates/admin_doc/bookmarklets.html:3
msgid "Documentation"
msgstr "Documentación"
-#: contrib/admin/templates/admin/base.html:28
-#: contrib/admin/templates/admin/auth/user/change_password.html:13
-#: contrib/admin/templates/admin/auth/user/change_password.html:46
+#: contrib/admin/templates/admin/base.html:26
+#: contrib/admin/templates/admin/auth/user/change_password.html:14
+#: contrib/admin/templates/admin/auth/user/change_password.html:47
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
msgid "Change password"
msgstr "Cambiar contraseña"
-#: contrib/admin/templates/admin/base.html:28
+#: contrib/admin/templates/admin/base.html:26
#: contrib/admin/templates/registration/password_change_done.html:3
#: contrib/admin/templates/registration/password_change_form.html:3
msgid "Log out"
@@ -609,24 +603,24 @@
msgstr "Ver en el sitio"
#: contrib/admin/templates/admin/change_form.html:38
-#: contrib/admin/templates/admin/change_list.html:49
-#: contrib/admin/templates/admin/auth/user/change_password.html:22
+#: contrib/admin/templates/admin/change_list.html:54
+#: contrib/admin/templates/admin/auth/user/change_password.html:23
msgid "Please correct the error below."
msgid_plural "Please correct the errors below."
msgstr[0] "Por favor, corrija el siguiente error."
msgstr[1] "Por favor, corrija los siguientes errores."
-#: contrib/admin/templates/admin/change_list.html:41
+#: contrib/admin/templates/admin/change_list.html:46
#, python-format
msgid "Add %(name)s"
msgstr "Añadir %(name)s"
-#: contrib/admin/templates/admin/change_list.html:60
+#: contrib/admin/templates/admin/change_list.html:65
msgid "Filter"
msgstr "Filtro"
#: contrib/admin/templates/admin/delete_confirmation.html:10
-#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:251
+#: contrib/admin/templates/admin/submit_line.html:4 forms/formsets.py:275
msgid "Delete"
msgstr "Eliminar"
@@ -666,9 +660,9 @@
"your account doesn't have permission to delete the following types of "
"objects:"
msgstr ""
-"Eliminar el %(object_name)s provocaría la eliminación "
-"de objetos relacionados, pero su cuenta no tiene permiso para borrar los "
-"siguientes tipos de objetos:"
+"Eliminar el %(object_name)s provocaría la eliminación de objetos "
+"relacionados, pero su cuenta no tiene permiso para borrar los siguientes "
+"tipos de objetos:"
#: contrib/admin/templates/admin/delete_selected_confirmation.html:22
#, python-format
@@ -676,8 +670,8 @@
"Are you sure you want to delete the selected %(object_name)s objects? All of "
"the following objects and it's related items will be deleted:"
msgstr ""
-"¿Está seguro de que quiere borrar los %(object_name)s? "
-"Los siguientes objetos y sus elementos relacionados serán eliminados:"
+"¿Está seguro de que quiere borrar los %(object_name)s? Los siguientes "
+"objetos y sus elementos relacionados serán eliminados:"
#: contrib/admin/templates/admin/filter.html:2
#, python-format
@@ -709,6 +703,10 @@
msgid "None available"
msgstr "Ninguno disponible"
+#: contrib/admin/templates/admin/index.html:72
+msgid "Unknown content"
+msgstr "Contenido desconocido"
+
#: contrib/admin/templates/admin/invalid_setup.html:7
msgid ""
"Something's wrong with your database installation. Make sure the appropriate "
@@ -757,6 +755,15 @@
msgid "Show all"
msgstr "Mostrar todo"
+#: contrib/admin/templates/admin/pagination.html:11
+#: contrib/admin/templates/admin/submit_line.html:3
+msgid "Save"
+msgstr "Grabar"
+
+#: contrib/admin/templates/admin/search_form.html:8
+msgid "Search"
+msgstr "Buscar"
+
#: contrib/admin/templates/admin/search_form.html:10
#, python-format
msgid "1 result"
@@ -769,10 +776,6 @@
msgid "%(full_result_count)s total"
msgstr "%(full_result_count)s total"
-#: contrib/admin/templates/admin/submit_line.html:3
-msgid "Save"
-msgstr "Grabar"
-
#: contrib/admin/templates/admin/submit_line.html:5
msgid "Save as new"
msgstr "Grabar como nuevo"
@@ -799,23 +802,23 @@
msgstr "Nombre de usuario"
#: contrib/admin/templates/admin/auth/user/add_form.html:20
-#: contrib/admin/templates/admin/auth/user/change_password.html:33
+#: contrib/admin/templates/admin/auth/user/change_password.html:34
#: contrib/auth/forms.py:17 contrib/auth/forms.py:60 contrib/auth/forms.py:185
msgid "Password"
msgstr "Contraseña"
#: contrib/admin/templates/admin/auth/user/add_form.html:26
-#: contrib/admin/templates/admin/auth/user/change_password.html:39
+#: contrib/admin/templates/admin/auth/user/change_password.html:40
#: contrib/auth/forms.py:186
msgid "Password (again)"
msgstr "Contraseña (de nuevo)"
#: contrib/admin/templates/admin/auth/user/add_form.html:27
-#: contrib/admin/templates/admin/auth/user/change_password.html:40
+#: contrib/admin/templates/admin/auth/user/change_password.html:41
msgid "Enter the same password as above, for verification."
msgstr "Introduzca la misma contraseña que arriba, para verificación."
-#: contrib/admin/templates/admin/auth/user/change_password.html:26
+#: contrib/admin/templates/admin/auth/user/change_password.html:27
#, python-format
msgid "Enter a new password for the user <strong>%(username)s</strong>."
msgstr ""
@@ -1037,114 +1040,115 @@
msgid "the related `%(app_label)s.%(data_type)s` object"
msgstr "el objeto relacionado `%(app_label)s.%(data_type)s`"
-#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:228
-#: contrib/admindocs/views.py:242 contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:206 contrib/admindocs/views.py:225
+#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:244
+#: contrib/admindocs/views.py:258 contrib/admindocs/views.py:263
msgid "model:"
msgstr "modelo:"
-#: contrib/admindocs/views.py:237
+#: contrib/admindocs/views.py:221 contrib/admindocs/views.py:253
#, python-format
msgid "related `%(app_label)s.%(object_name)s` objects"
msgstr "los objetos relacionados `%(app_label)s.%(object_name)s`"
-#: contrib/admindocs/views.py:242
+#: contrib/admindocs/views.py:225 contrib/admindocs/views.py:258
#, python-format
msgid "all %s"
msgstr "todo %s"
-#: contrib/admindocs/views.py:247
+#: contrib/admindocs/views.py:230 contrib/admindocs/views.py:263
#, python-format
msgid "number of %s"
msgstr "número de %s"
-#: contrib/admindocs/views.py:252
+#: contrib/admindocs/views.py:268
#, python-format
msgid "Fields on %s objects"
msgstr "Campos en %s objetos"
-#: contrib/admindocs/views.py:315 contrib/admindocs/views.py:326
-#: contrib/admindocs/views.py:328 contrib/admindocs/views.py:334
-#: contrib/admindocs/views.py:335 contrib/admindocs/views.py:337
+#: contrib/admindocs/views.py:331 contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:344 contrib/admindocs/views.py:350
+#: contrib/admindocs/views.py:351 contrib/admindocs/views.py:353
msgid "Integer"
msgstr "Entero"
-#: contrib/admindocs/views.py:316
+#: contrib/admindocs/views.py:332
msgid "Boolean (Either True or False)"
msgstr "Booleano (Verdadero o Falso)"
-#: contrib/admindocs/views.py:317 contrib/admindocs/views.py:336
+#: contrib/admindocs/views.py:333 contrib/admindocs/views.py:352
#, python-format
msgid "String (up to %(max_length)s)"
msgstr "Cadena (máximo %(max_length)s)"
-#: contrib/admindocs/views.py:318
+#: contrib/admindocs/views.py:334
msgid "Comma-separated integers"
msgstr "Enteros separados por comas"
-#: contrib/admindocs/views.py:319
+#: contrib/admindocs/views.py:335
msgid "Date (without time)"
msgstr "Fecha (sin hora)"
-#: contrib/admindocs/views.py:320
+#: contrib/admindocs/views.py:336
msgid "Date (with time)"
msgstr "Fecha (con hora)"
-#: contrib/admindocs/views.py:321
+#: contrib/admindocs/views.py:337
msgid "Decimal number"
msgstr "Número decimal"
-#: contrib/admindocs/views.py:322
+#: contrib/admindocs/views.py:338
msgid "E-mail address"
msgstr "Dirección de correo electrónico"
-#: contrib/admindocs/views.py:323 contrib/admindocs/views.py:324
-#: contrib/admindocs/views.py:327
+#: contrib/admindocs/views.py:339 contrib/admindocs/views.py:340
+#: contrib/admindocs/views.py:343
msgid "File path"
msgstr "Ruta de fichero"
-#: contrib/admindocs/views.py:325
+#: contrib/admindocs/views.py:341
msgid "Floating point number"
msgstr "Número en coma flotante"
-#: contrib/admindocs/views.py:329 contrib/comments/models.py:58
+#: contrib/admindocs/views.py:345 contrib/comments/models.py:60
msgid "IP address"
msgstr "Dirección IP"
-#: contrib/admindocs/views.py:331
+#: contrib/admindocs/views.py:347
msgid "Boolean (Either True, False or None)"
msgstr "Booleano (Verdadero, Falso o Nulo)"
-#: contrib/admindocs/views.py:332
+#: contrib/admindocs/views.py:348
msgid "Relation to parent model"
msgstr "Relación con el modelo padre"
-#: contrib/admindocs/views.py:333
+#: contrib/admindocs/views.py:349
msgid "Phone number"
msgstr "Número de teléfono"
-#: contrib/admindocs/views.py:338
+#: contrib/admindocs/views.py:354
msgid "Text"
msgstr "Texto"
-#: contrib/admindocs/views.py:339
+#: contrib/admindocs/views.py:355
msgid "Time"
msgstr "Hora"
-#: contrib/admindocs/views.py:340 contrib/comments/forms.py:95
+#: contrib/admindocs/views.py:356 contrib/comments/forms.py:95
#: contrib/comments/templates/comments/moderation_queue.html:37
#: contrib/flatpages/admin.py:8 contrib/flatpages/models.py:7
msgid "URL"
msgstr "URL"
-#: contrib/admindocs/views.py:341
+#: contrib/admindocs/views.py:357
msgid "U.S. state (two uppercase letters)"
msgstr "Estado de los EEUU (dos letras mayúsculas)"
-#: contrib/admindocs/views.py:342
+#: contrib/admindocs/views.py:358
msgid "XML text"
msgstr "Texto XML"
-#: contrib/admindocs/views.py:368
+#: contrib/admindocs/views.py:384
#, python-format
msgid "%s does not appear to be a urlpattern object"
msgstr "%s no parece ser un objeto urlpattern"
@@ -1248,7 +1252,7 @@
msgstr "Cambiar contraseña: %s"
#: contrib/auth/forms.py:15 contrib/auth/forms.py:48
-#: contrib/auth/models.py:127
+#: contrib/auth/models.py:128
msgid ""
"Required. 30 characters or fewer. Alphanumeric characters only (letters, "
"digits and underscores)."
@@ -1340,31 +1344,31 @@
msgid "group"
msgstr "grupo"
-#: contrib/auth/models.py:91 contrib/auth/models.py:137
+#: contrib/auth/models.py:91 contrib/auth/models.py:138
msgid "groups"
msgstr "grupos"
-#: contrib/auth/models.py:127
+#: contrib/auth/models.py:128
msgid "username"
msgstr "nombre de usuario"
-#: contrib/auth/models.py:128
+#: contrib/auth/models.py:129
msgid "first name"
msgstr "nombre propio"
-#: contrib/auth/models.py:129
+#: contrib/auth/models.py:130
msgid "last name"
msgstr "apellidos"
-#: contrib/auth/models.py:130
+#: contrib/auth/models.py:131
msgid "e-mail address"
msgstr "dirección de correo electrónico"
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:132
msgid "password"
msgstr "contraseña"
-#: contrib/auth/models.py:131
+#: contrib/auth/models.py:132
msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>."
@@ -1372,19 +1376,19 @@
"Use'[algo]$[sal]$[hash hexadecimal]' o use <a href=\"password/\">el "
"formulario para cambiar la contraseña</a>."
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:133
msgid "staff status"
msgstr "es staff"
-#: contrib/auth/models.py:132
+#: contrib/auth/models.py:133
msgid "Designates whether the user can log into this admin site."
msgstr "Indica si el usuario puede entrar en este sitio de administración."
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:134
msgid "active"
msgstr "activo"
-#: contrib/auth/models.py:133
+#: contrib/auth/models.py:134
msgid ""
"Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts."
@@ -1392,11 +1396,11 @@
"Indica si el usuario puede ser tratado como activo. Desmarque esta opción en "
"lugar de borrar la cuenta."
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:135
msgid "superuser status"
msgstr "es superusuario"
-#: contrib/auth/models.py:134
+#: contrib/auth/models.py:135
msgid ""
"Designates that this user has all permissions without explicitly assigning "
"them."
@@ -1404,15 +1408,15 @@
"Indica que este usuario tiene todos los permisos sin asignárselos "
"explícitamente."
-#: contrib/auth/models.py:135
+#: contrib/auth/models.py:136
msgid "last login"
msgstr "último inicio de sesión"
-#: contrib/auth/models.py:136
+#: contrib/auth/models.py:137
msgid "date joined"
msgstr "fecha de alta"
-#: contrib/auth/models.py:138
+#: contrib/auth/models.py:139
msgid ""
"In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in."
@@ -1420,23 +1424,24 @@
"Además de los permisos asignados manualmente, este usuario también tendrá "
"todos los permisos de los grupos en los que esté."
-#: contrib/auth/models.py:139
+#: contrib/auth/models.py:140
msgid "user permissions"
msgstr "permisos de usuario"
-#: contrib/auth/models.py:143
+#: contrib/auth/models.py:144 contrib/comments/models.py:50
+#: contrib/comments/models.py:168
msgid "user"
msgstr "usuario"
-#: contrib/auth/models.py:144
+#: contrib/auth/models.py:145
msgid "users"
msgstr "usuarios"
-#: contrib/auth/models.py:300
+#: contrib/auth/models.py:301
msgid "message"
msgstr "mensaje"
-#: contrib/auth/views.py:50
+#: contrib/auth/views.py:56
msgid "Logged out"
msgstr "Sesión terminada"
@@ -1452,10 +1457,20 @@
msgid "Metadata"
msgstr "metadatos"
+#: contrib/comments/feeds.py:13
+#, python-format
+msgid "%(site_name)s comments"
+msgstr "comentarios de %(site_name)s"
+
+#: contrib/comments/feeds.py:23
+#, python-format
+msgid "Latest comments on %(site_name)s"
+msgstr "Últimos comentarios en %(site_name)s"
+
#: contrib/comments/forms.py:93
#: contrib/comments/templates/comments/moderation_queue.html:34
msgid "Name"
-msgstr "nombre"
+msgstr "Nombre"
#: contrib/comments/forms.py:94
msgid "Email address"
@@ -1464,7 +1479,7 @@
#: contrib/comments/forms.py:96
#: contrib/comments/templates/comments/moderation_queue.html:35
msgid "Comment"
-msgstr "comentario"
+msgstr "Comentario"
#: contrib/comments/forms.py:173
#, python-format
@@ -1478,46 +1493,51 @@
"If you enter anything in this field your comment will be treated as spam"
msgstr "Si introduce algo en este campo su comentario será tratado como spam"
-#: contrib/comments/models.py:23
+#: contrib/comments/models.py:22 contrib/contenttypes/models.py:74
+msgid "content type"
+msgstr "tipo de contenido"
+
+#: contrib/comments/models.py:24
msgid "object ID"
msgstr "ID de objeto"
-#: contrib/comments/models.py:50
+#: contrib/comments/models.py:52
msgid "user's name"
msgstr "nombre del usuario"
-#: contrib/comments/models.py:51
+#: contrib/comments/models.py:53
msgid "user's email address"
msgstr "dirección de correo electrónico del usuario"
-#: contrib/comments/models.py:52
+#: contrib/comments/models.py:54
msgid "user's URL"
msgstr "URL del usuario"
-#: contrib/comments/models.py:54
+#: contrib/comments/models.py:56 contrib/comments/models.py:76
+#: contrib/comments/models.py:169
msgid "comment"
msgstr "comentario"
-#: contrib/comments/models.py:57
+#: contrib/comments/models.py:59
msgid "date/time submitted"
msgstr "fecha/hora de envío"
-#: contrib/comments/models.py:59
+#: contrib/comments/models.py:61
msgid "is public"
msgstr "es público"
-#: contrib/comments/models.py:60
+#: contrib/comments/models.py:62
msgid ""
"Uncheck this box to make the comment effectively disappear from the site."
msgstr ""
"Desmarque esta casilla para hacer desaparecer el comentario del sitio web de "
"forma efectiva."
-#: contrib/comments/models.py:62
+#: contrib/comments/models.py:64
msgid "is removed"
msgstr "está eliminado"
-#: contrib/comments/models.py:63
+#: contrib/comments/models.py:65
msgid ""
"Check this box if the comment is inappropriate. A \"This comment has been "
"removed\" message will be displayed instead."
@@ -1525,7 +1545,11 @@
"Marque esta opción si el comentario es inapropiado. En su lugar se mostrará "
"el mensaje \"Este comentario ha sido eliminado\"."
-#: contrib/comments/models.py:115
+#: contrib/comments/models.py:77
+msgid "comments"
+msgstr "comentarios"
+
+#: contrib/comments/models.py:119
msgid ""
"This comment was posted by an authenticated user and thus the name is read-"
"only."
@@ -1533,7 +1557,7 @@
"Este comentario ha sido enviado por un usuario autentificado: de modo que su "
"nombre no es modificable."
-#: contrib/comments/models.py:124
+#: contrib/comments/models.py:128
msgid ""
"This comment was posted by an authenticated user and thus the email is read-"
"only."
@@ -1541,7 +1565,7 @@
"Este comentario ha sido colocado por un usuario autentificado: de modo que "
"su dirección de correo electrónico no es modificable."
-#: contrib/comments/models.py:149
+#: contrib/comments/models.py:153
#, python-format
msgid ""
"Posted by %(user)s at %(date)s\n"
@@ -1556,6 +1580,22 @@
"\n"
"
http://%(domain)s%(url)s"
+#: contrib/comments/models.py:170
+msgid "flag"
+msgstr "marcar"
+
+#: contrib/comments/models.py:171
+msgid "date"
+msgstr "fecha"
+
+#: contrib/comments/models.py:181
+msgid "comment flag"
+msgstr "marca de comentario"
+
+#: contrib/comments/models.py:182
+msgid "comment flags"
+msgstr "marcas de comentario"
+
#: contrib/comments/templates/comments/approve.html:4
msgid "Approve a comment"
msgstr "Aprovar un comentario"
@@ -1615,13 +1655,13 @@
msgid "Thanks for flagging"
msgstr "Graciar por marcar"
-#: contrib/comments/templates/comments/form.html:16
-#: contrib/comments/templates/comments/preview.html:31
+#: contrib/comments/templates/comments/form.html:17
+#: contrib/comments/templates/comments/preview.html:32
msgid "Post"
msgstr "Enviar"
-#: contrib/comments/templates/comments/form.html:17
-#: contrib/comments/templates/comments/preview.html:32
+#: contrib/comments/templates/comments/form.html:18
+#: contrib/comments/templates/comments/preview.html:33
msgid "Preview"
msgstr "Previsualizar"
@@ -1667,33 +1707,29 @@
msgstr "Gracias por su comentario"
#: contrib/comments/templates/comments/preview.html:4
-#: contrib/comments/templates/comments/preview.html:12
+#: contrib/comments/templates/comments/preview.html:13
msgid "Preview your comment"
msgstr "Previsualizar su comentario"
-#: contrib/comments/templates/comments/preview.html:10
+#: contrib/comments/templates/comments/preview.html:11
msgid "Please correct the error below"
msgid_plural "Please correct the errors below"
msgstr[0] "Por favor, corrija el siguiente error."
msgstr[1] "Por favor, corrija los siguientes errores."
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
msgid "Post your comment"
msgstr "Envie su comentario"
-#: contrib/comments/templates/comments/preview.html:15
+#: contrib/comments/templates/comments/preview.html:16
msgid "or make changes"
msgstr "o haga cambios"
-#: contrib/contenttypes/models.py:67
+#: contrib/contenttypes/models.py:70
msgid "python model class name"
msgstr "nombre de la clase modelo de python"
-#: contrib/contenttypes/models.py:71
-msgid "content type"
-msgstr "tipo de contenido"
-
-#: contrib/contenttypes/models.py:72
+#: contrib/contenttypes/models.py:75
msgid "content types"
msgstr "tipos de contenido"
@@ -1762,18 +1798,26 @@
"Lo sentimos, pero su formulario ha expirado. Por favor, continue rellenando "
"el formulario en esta página."
-#: contrib/gis/forms/fields.py:14
+#: contrib/gis/forms/fields.py:17
msgid "No geometry value provided."
msgstr "No se indico ningún valor de geometría."
-#: contrib/gis/forms/fields.py:15
+#: contrib/gis/forms/fields.py:18
msgid "Invalid geometry value."
msgstr "Valor de geometría inválido."
-#: contrib/gis/forms/fields.py:16
+#: contrib/gis/forms/fields.py:19
msgid "Invalid geometry type."
msgstr "Tipo de geometría inválido."
+#: contrib/gis/forms/fields.py:20
+msgid ""
+"An error occurred when transforming the geometry to the SRID of the geometry "
+"form field."
+msgstr ""
+"Ocurrió un error al transformar la geometria al SRID de la geometria "
+"del campo de formulario."
+
#: contrib/humanize/templatetags/humanize.py:19
msgid "th"
msgstr "º"
@@ -1891,11 +1935,11 @@
#: contrib/localflavor/at/at_states.py:7
msgid "Lower Austria"
-msgstr ""
+msgstr "Australia Baja"
#: contrib/localflavor/at/at_states.py:8
msgid "Upper Austria"
-msgstr ""
+msgstr "Australia Alta"
#: contrib/localflavor/at/at_states.py:9
msgid "Salzburg"
@@ -2112,47 +2156,47 @@
#: contrib/localflavor/cz/cz_regions.py:11
msgid "Pilsen Region"
-msgstr ""
+msgstr "Región Pilsen"
#: contrib/localflavor/cz/cz_regions.py:12
msgid "Carlsbad Region"
-msgstr ""
+msgstr "Región Carlsbad"
#: contrib/localflavor/cz/cz_regions.py:13
msgid "Usti Region"
-msgstr ""
+msgstr "Región Usti"
#: contrib/localflavor/cz/cz_regions.py:14
msgid "Liberec Region"
-msgstr ""
+msgstr "Región Liberec"
#: contrib/localflavor/cz/cz_regions.py:15
msgid "Hradec Region"
-msgstr ""
+msgstr "Región Hradec"
#: contrib/localflavor/cz/cz_regions.py:16
msgid "Pardubice Region"
-msgstr ""
+msgstr "Región Pardubice"
#: contrib/localflavor/cz/cz_regions.py:17
msgid "Vysocina Region"
-msgstr ""
+msgstr "Región Vysocina"
#: contrib/localflavor/cz/cz_regions.py:18
msgid "South Moravian Region"
-msgstr ""
+msgstr "Región Moravia Sur"
#: contrib/localflavor/cz/cz_regions.py:19
msgid "Olomouc Region"
-msgstr ""
+msgstr "Región Olomouc"
#: contrib/localflavor/cz/cz_regions.py:20
msgid "Zlin Region"
-msgstr ""
+msgstr "Región Zlin"
#: contrib/localflavor/cz/cz_regions.py:21
msgid "Moravian-Silesian Region"
-msgstr ""
+msgstr "Región Moravia-Silesiana"
#: contrib/localflavor/cz/forms.py:27 contrib/localflavor/sk/forms.py:30
msgid "Enter a postal code in the format XXXXX or XXX XX."
@@ -2165,7 +2209,8 @@
#: contrib/localflavor/cz/forms.py:48
msgid "Invalid optional parameter Gender, valid values are 'f' and 'm'"
-msgstr "El parámetro opcional 'Género' es inválido, los valores válidos son 'f' y 'm'"
+msgstr ""
+"El parámetro opcional 'Género' es inválido, los valores válidos son 'f' y 'm'"
#: contrib/localflavor/cz/forms.py:49
msgid "Enter a valid birth number."
@@ -3004,16 +3049,16 @@
msgid "Wrong checksum for the Tax Number (NIP)."
msgstr "El Número de Identificación Tributaria (NIP) es incorrecto."
-#: contrib/localflavor/pl/forms.py:111
-msgid "National Business Register Number (REGON) consists of 7 or 9 digits."
+#: contrib/localflavor/pl/forms.py:109
+msgid "National Business Register Number (REGON) consists of 9 or 14 digits."
msgstr ""
-"El Número Nacional de Registro de Negocios (REGON) consiste en 7 o 9 dígitos."
+"El Número Nacional de Registro de Negocios (REGON) consiste en 9 o 14 dígitos."
-#: contrib/localflavor/pl/forms.py:112
+#: contrib/localflavor/pl/forms.py:110
msgid "Wrong checksum for the National Business Register Number (REGON)."
msgstr "El Número Nacional de Registro de Negocios (REGON) es incorrecto."
-#: contrib/localflavor/pl/forms.py:155
+#: contrib/localflavor/pl/forms.py:148
msgid "Enter a postal code in the format XX-XXX."
msgstr "Introduzca un código postal en el formato XX-XXX."
@@ -3850,60 +3895,60 @@
msgid "sites"
msgstr "sitios"
-#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:700
+#: db/models/fields/__init__.py:356 db/models/fields/__init__.py:710
msgid "This value must be an integer."
msgstr "Este valor debe ser un entero."
-#: db/models/fields/__init__.py:387
+#: db/models/fields/__init__.py:388
msgid "This value must be either True or False."
msgstr "Este valor debe ser Verdadero o Falso."
-#: db/models/fields/__init__.py:420
+#: db/models/fields/__init__.py:427
msgid "This field cannot be null."
msgstr "Este campo no puede estar vacío."
-#: db/models/fields/__init__.py:436
+#: db/models/fields/__init__.py:443
msgid "Enter only digits separated by commas."
msgstr "Introduzca sólo dígitos separados por comas."
-#: db/models/fields/__init__.py:467
+#: db/models/fields/__init__.py:474
msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Introduzca una fecha válida en formato AAAA-MM-DD."
-#: db/models/fields/__init__.py:476
+#: db/models/fields/__init__.py:483
#, python-format
msgid "Invalid date: %s"
msgstr "Fecha no válida: %s"
-#: db/models/fields/__init__.py:540 db/models/fields/__init__.py:558
+#: db/models/fields/__init__.py:547 db/models/fields/__init__.py:565
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM[:ss[.uuuuuu]] format."
msgstr ""
"Introduzca una fecha/hora válida en formato AAAA-MM-DD HH:MM[:ss[.uuuuuu]]."
-#: db/models/fields/__init__.py:594
+#: db/models/fields/__init__.py:601
msgid "This value must be a decimal number."
msgstr "Este valor debe ser un entero."
-#: db/models/fields/__init__.py:676
+#: db/models/fields/__init__.py:686
msgid "This value must be a float."
msgstr "Este valor debe ser un número con coma flotante."
-#: db/models/fields/__init__.py:736
+#: db/models/fields/__init__.py:746
msgid "This value must be either None, True or False."
msgstr "Este valor debe ser Verdadero, Falso o Ninguno."
-#: db/models/fields/__init__.py:839 db/models/fields/__init__.py:853
+#: db/models/fields/__init__.py:849 db/models/fields/__init__.py:863
msgid "Enter a valid time in HH:MM[:ss[.uuuuuu]] format."
msgstr "Introduzca una hora válida en formato HH:MM[:ss[.uuuuuu]]."
-#: db/models/fields/related.py:779
+#: db/models/fields/related.py:816
msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr ""
"Mantenga presionado \"Control\", o \"Command\" en un Mac, para seleccionar "
"más de una opción."
-#: db/models/fields/related.py:857
+#: db/models/fields/related.py:894
#, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
@@ -3970,11 +4015,11 @@
msgid "Ensure that there are no more than %s digits before the decimal point."
msgstr "Asegúrese de que no hay más de %s dígitos antes de la coma decimal."
-#: forms/fields.py:288 forms/fields.py:850
+#: forms/fields.py:288 forms/fields.py:863
msgid "Enter a valid date."
msgstr "Introduzca una fecha válida."
-#: forms/fields.py:322 forms/fields.py:851
+#: forms/fields.py:322 forms/fields.py:864
msgid "Enter a valid time."
msgstr "Introduzca una hora válida."
@@ -3996,114 +4041,156 @@
msgid "The submitted file is empty."
msgstr "El fichero enviado está vacío."
-#: forms/fields.py:478
+#: forms/fields.py:450
+#, python-format
msgid ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr ""
+"Asegúrese de que su texto tiene no más de %(max)d caracteres (actualmente "
+"tiene %(length)d)."
+
+#: forms/fields.py:483
+msgid ""
"Upload a valid image. The file you uploaded was either not an image or a "
"corrupted image."
msgstr ""
"Envíe una imagen válida. El fichero que ha enviado no era una imagen o se "
"trataba de una imagen corrupta."
-#: forms/fields.py:539
+#: forms/fields.py:544
msgid "Enter a valid URL."
msgstr "Introduzca una URL válida."
-#: forms/fields.py:540
+#: forms/fields.py:545
msgid "This URL appears to be a broken link."
msgstr "La URL parece ser un enlace roto."
-#: forms/fields.py:619 forms/fields.py:697
+#: forms/fields.py:625 forms/fields.py:703
#, python-format
msgid "Select a valid choice. %(value)s is not one of the available choices."
msgstr ""
"Escoja una opción válida. %(value)s no es una de las opciones disponibles."
-#: forms/fields.py:698 forms/fields.py:759 forms/models.py:729
+#: forms/fields.py:704 forms/fields.py:765 forms/models.py:1003
msgid "Enter a list of values."
msgstr "Introduzca una lista de valores."
-#: forms/fields.py:879
+#: forms/fields.py:892
msgid "Enter a valid IPv4 address."
msgstr "Introduzca una dirección IPv4 válida."
-#: forms/fields.py:889
+#: forms/fields.py:902
msgid ""
"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
msgstr ""
"Introduzca un 'slug' válido, consistente en letras, números, guiones bajos o "
"medios."
-#: forms/formsets.py:247 forms/formsets.py:249
+#: forms/formsets.py:271 forms/formsets.py:273
msgid "Order"
msgstr "Orden"
-#: forms/models.py:289 forms/models.py:298
+#: forms/models.py:367
#, python-format
+msgid "%(field_name)s must be unique for %(date_field)s %(lookup)s."
+msgstr "El campo %(field_name)s debe ser único para %(lookup)s %(date_field)s"
+
+#: forms/models.py:381 forms/models.py:389
+#, python-format
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr "Ya existe %(model_name)s con este %(field_label)s."
-#: forms/models.py:602
+#: forms/models.py:594
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr "Por favor, corrija el dato duplicado para %(field)s."
+
+#: forms/models.py:598
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+"Por favor corriga el dato duplicado para %(field)s, el cual debe ser único."
+
+#: forms/models.py:604
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+"Por favor corriga los datos duplicados para %(field_name)s el cual debe ser "
+"único para %(lookup)s en %(date_field)s."
+
+#: forms/models.py:612
+msgid "Please correct the duplicate values below."
+msgstr "Por favor, corrija los valores duplicados abajo."
+
+#: forms/models.py:867
msgid "The inline foreign key did not match the parent instance primary key."
msgstr ""
"La clave foránea en linea no coincide con la clave primaria de la instancia "
"padre."
-#: forms/models.py:659
+#: forms/models.py:930
msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "Escoja una opción válida. Esa opción no está entre las disponibles."
-#: forms/models.py:730
+#: forms/models.py:1004
#, python-format
msgid "Select a valid choice. %s is not one of the available choices."
msgstr "Escoja una opción válida; '%s' no es una de las opciones disponibles."
-#: template/defaultfilters.py:751
+#: forms/models.py:1006
+#, python-format
+msgid "\"%s\" is not a valid value for a primary key."
+msgstr "\"%s\" no es un valor válido para una clave primaria."
+
+#: template/defaultfilters.py:767
msgid "yes,no,maybe"
msgstr "sí,no,tal vez"
-#: template/defaultfilters.py:782
+#: template/defaultfilters.py:798
#, python-format
msgid "%(size)d byte"
msgid_plural "%(size)d bytes"
msgstr[0] "%(size)d byte"
msgstr[1] "%(size)d bytes"
-#: template/defaultfilters.py:784
+#: template/defaultfilters.py:800
#, python-format
msgid "%.1f KB"
msgstr "%.1f KB"
-#: template/defaultfilters.py:786
+#: template/defaultfilters.py:802
#, python-format
msgid "%.1f MB"
msgstr "%.1f MB"
-#: template/defaultfilters.py:787
+#: template/defaultfilters.py:803
#, python-format
msgid "%.1f GB"
msgstr "%.1f GB"
-#: utils/dateformat.py:41
+#: utils/dateformat.py:42
msgid "p.m."
msgstr "p.m."
-#: utils/dateformat.py:42
+#: utils/dateformat.py:43
msgid "a.m."
msgstr "a.m."
-#: utils/dateformat.py:47
+#: utils/dateformat.py:48
msgid "PM"
msgstr "PM"
-#: utils/dateformat.py:48
+#: utils/dateformat.py:49
msgid "AM"
msgstr "AM"
-#: utils/dateformat.py:97
+#: utils/dateformat.py:98
msgid "midnight"
msgstr "media noche"
-#: utils/dateformat.py:99
+#: utils/dateformat.py:100
msgid "noon"
msgstr "medio día"
@@ -4327,16 +4414,16 @@
msgstr[0] "minuto"
msgstr[1] "minutos"
-#: utils/timesince.py:43
+#: utils/timesince.py:45
msgid "minutes"
msgstr "minutos"
-#: utils/timesince.py:48
+#: utils/timesince.py:50
#, python-format
msgid "%(number)d %(type)s"
msgstr "%(number)d %(type)s"
-#: utils/timesince.py:54
+#: utils/timesince.py:56
#, python-format
msgid ", %(number)d %(type)s"
msgstr ", %(number)d %(type)s"
@@ -4372,6 +4459,11 @@
msgid "The %(verbose_name)s was deleted."
msgstr "El/La %(verbose_name)s ha sido borrado."
+#~ msgid "verbose_name"
+#~ msgid_plural "verbose_name_plural"
+#~ msgstr[0] "verbose_name"
+#~ msgstr[1] "verbose_name_plural"
+
#~ msgid "DATE_WITH_TIME_FULL"
#~ msgstr "j M Y P"
@@ -4411,9 +4503,6 @@
#~ msgid "is valid rating"
#~ msgstr "puntuación válida"
-#~ msgid "comments"
-#~ msgstr "comentarios"
-
#~ msgid "Content object"
#~ msgstr "Objeto contenido"
@@ -4610,9 +4699,6 @@
#~ msgid "Please enter both fields or leave them both empty."
#~ msgstr "Por favor, rellene ambos campos o deje ambos vacíos."
-#~ msgid "This field must be given if %(field)s is %(value)s"
-#~ msgstr "Se debe proporcionar este campo si %(field)s es %(value)s"
-
#~ msgid "This field must be given if %(field)s is not %(value)s"
#~ msgstr "Se debe proporcionar este campo si %(field)s no es %(value)s"
Modified: django/branches/soc2009/multidb/django/contrib/gis/gdal/prototypes/generation.py
===================================================================
--- django/branches/soc2009/multidb/django/contrib/gis/gdal/prototypes/generation.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/contrib/gis/gdal/prototypes/generation.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -8,6 +8,9 @@
check_arg_errcode, check_errcode, check_geom, check_geom_offset, \
check_pointer, check_srs, check_str_arg, check_string, check_const_string
+class gdal_char_p(c_char_p):
+ pass
+
def double_output(func, argtypes, errcheck=False, strarg=False):
"Generates a ctypes function that returns a double value."
func.argtypes = argtypes
@@ -77,9 +80,9 @@
"""
func.argtypes = argtypes
if str_result:
- # String is the result, don't explicitly define
- # the argument type so we can get the pointer.
- pass
+ # Use subclass of c_char_p so the error checking routine
+ # can free the memory at the pointer's address.
+ func.restype = gdal_char_p
else:
# Error code is returned
func.restype = c_int
Modified: django/branches/soc2009/multidb/django/contrib/gis/geos/prototypes/topology.py
===================================================================
--- django/branches/soc2009/multidb/django/contrib/gis/geos/prototypes/topology.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/contrib/gis/geos/prototypes/topology.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -10,6 +10,7 @@
from ctypes import c_char_p, c_double, c_int
from django.contrib.gis.geos.libgeos import lgeos, GEOM_PTR, GEOS_PREPARE
from django.contrib.gis.geos.prototypes.errcheck import check_geom, check_string
+from django.contrib.gis.geos.prototypes.geom import geos_char_p
def topology(func, *args):
"For GEOS unary topology functions."
@@ -38,6 +39,7 @@
# GEOSRelate returns a string, not a geometry.
geos_relate = lgeos.GEOSRelate
geos_relate.argtypes = [GEOM_PTR, GEOM_PTR]
+geos_relate.restype = geos_char_p
geos_relate.errcheck = check_string
# Routines only in GEOS 3.1+
Modified: django/branches/soc2009/multidb/django/core/urlresolvers.py
===================================================================
--- django/branches/soc2009/multidb/django/core/urlresolvers.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/core/urlresolvers.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -185,7 +185,11 @@
try:
sub_match = pattern.resolve(new_path)
except Resolver404, e:
- tried.extend([(pattern.regex.pattern + ' ' + t) for t in e.args[0]['tried']])
+ sub_tried = e.args[0].get('tried')
+ if sub_tried is not None:
+ tried.extend([(pattern.regex.pattern + ' ' + t) for t in sub_tried])
+ else:
+ tried.append(pattern.regex.pattern)
else:
if sub_match:
sub_match_dict = dict([(smart_str(k), v) for k, v in match.groupdict().items()])
@@ -195,7 +199,7 @@
return sub_match[0], sub_match[1], sub_match_dict
tried.append(pattern.regex.pattern)
raise Resolver404, {'tried': tried, 'path': new_path}
- raise Resolver404, {'tried': [], 'path' : path}
+ raise Resolver404, {'path' : path}
def _get_urlconf_module(self):
try:
@@ -286,4 +290,3 @@
instance is normally going to be a lot cleaner).
"""
return _prefixes.get(currentThread(), u'/')
-
Modified: django/branches/soc2009/multidb/django/forms/models.py
===================================================================
--- django/branches/soc2009/multidb/django/forms/models.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/forms/models.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -464,8 +464,21 @@
return len(self.get_queryset())
return super(BaseModelFormSet, self).initial_form_count()
+ def _existing_object(self, pk):
+ if not hasattr(self, '_object_dict'):
+ self._object_dict = dict([(o.pk, o) for o in self.get_queryset()])
+ return self._object_dict.get(pk)
+
def _construct_form(self, i, **kwargs):
- if i < self.initial_form_count():
+ if self.is_bound and i < self.initial_form_count():
+ pk_key = "%s-%s" % (self.add_prefix(i), self.model._meta.pk.name)
+ pk = self.data[pk_key]
+ pk_field = self.model._meta.pk
+ pk = pk_field.get_db_prep_lookup('exact', pk)
+ if isinstance(pk, list):
+ pk = pk[0]
+ kwargs['instance'] = self._existing_object(pk)
+ if i < self.initial_form_count() and not kwargs.get('instance'):
kwargs['instance'] = self.get_queryset()[i]
return super(BaseModelFormSet, self)._construct_form(i, **kwargs)
@@ -604,10 +617,6 @@
if not self.get_queryset():
return []
- # Put the objects from self.get_queryset into a dict so they are easy to lookup by pk
- existing_objects = {}
- for obj in self.get_queryset():
- existing_objects[obj.pk] = obj
saved_instances = []
for form in self.initial_forms:
pk_name = self._pk_field.name
@@ -618,7 +627,7 @@
pk_value = form.fields[pk_name].clean(raw_pk_value)
pk_value = getattr(pk_value, 'pk', pk_value)
- obj = existing_objects[pk_value]
+ obj = self._existing_object(pk_value)
if self.can_delete:
raw_delete_value = form._raw_value(DELETION_FIELD_NAME)
should_delete = form.fields[DELETION_FIELD_NAME].clean(raw_delete_value)
@@ -663,10 +672,13 @@
return ((not pk.editable) or (pk.auto_created or isinstance(pk, AutoField))
or (pk.rel and pk.rel.parent_link and pk_is_not_editable(pk.rel.to._meta.pk)))
if pk_is_not_editable(pk) or pk.name not in form.fields:
- try:
- pk_value = self.get_queryset()[index].pk
- except IndexError:
- pk_value = None
+ if form.is_bound:
+ pk_value = form.instance.pk
+ else:
+ try:
+ pk_value = self.get_queryset()[index].pk
+ except IndexError:
+ pk_value = None
if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
qs = pk.rel.to._default_manager.get_query_set()
else:
Modified: django/branches/soc2009/multidb/django/template/defaulttags.py
===================================================================
--- django/branches/soc2009/multidb/django/template/defaulttags.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/django/template/defaulttags.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -564,7 +564,7 @@
#@register.tag
def firstof(parser, token):
"""
- Outputs the first variable passed that is not False.
+ Outputs the first variable passed that is not False, without escaping.
Outputs nothing if all the passed variables are False.
@@ -575,11 +575,11 @@
This is equivalent to::
{% if var1 %}
- {{ var1 }}
+ {{ var1|safe }}
{% else %}{% if var2 %}
- {{ var2 }}
+ {{ var2|safe }}
{% else %}{% if var3 %}
- {{ var3 }}
+ {{ var3|safe }}
{% endif %}{% endif %}{% endif %}
but obviously much cleaner!
@@ -589,6 +589,12 @@
{% firstof var1 var2 var3 "fallback value" %}
+ If you want to escape the output, use a filter tag::
+
+ {% filter force_escape %}
+ {% firstof var1 var2 var3 "fallback value" %}
+ {% endfilter %}
+
"""
bits = token.split_contents()[1:]
if len(bits) < 1:
Modified: django/branches/soc2009/multidb/docs/_ext/djangodocs.py
===================================================================
--- django/branches/soc2009/multidb/docs/_ext/djangodocs.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/_ext/djangodocs.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -6,10 +6,16 @@
import docutils.transforms
import sphinx
import sphinx.addnodes
-import sphinx.builder
+try:
+ from sphinx import builders
+except ImportError:
+ import sphinx.builder as builders
import sphinx.directives
import sphinx.environment
-import sphinx.htmlwriter
+try:
+ import sphinx.writers.html as sphinx_htmlwriter
+except ImportError:
+ import sphinx.htmlwriter as sphinx_htmlwriter
import sphinx.roles
from docutils import nodes
@@ -44,7 +50,7 @@
directivename = "django-admin-option",
rolename = "djadminopt",
indextemplate = "pair: %s; django-admin command-line option",
- parse_node = lambda env, sig, signode: sphinx.directives.parse_option_desc(signode, sig),
+ parse_node = parse_django_adminopt_node,
)
app.add_config_value('django_next_version', '0.0', True)
app.add_directive('versionadded', parse_version_directive, 1, (1, 1, 1))
@@ -102,7 +108,7 @@
if len(node.children) == 1 and isinstance(node.children[0], self.suppress_blockquote_child_nodes):
node.replace_self(node.children[0])
-class DjangoHTMLTranslator(sphinx.htmlwriter.SmartyPantsHTMLTranslator):
+class DjangoHTMLTranslator(sphinx_htmlwriter.SmartyPantsHTMLTranslator):
"""
Django-specific reST to HTML tweaks.
"""
@@ -125,10 +131,10 @@
#
def visit_literal_block(self, node):
self.no_smarty += 1
- sphinx.htmlwriter.SmartyPantsHTMLTranslator.visit_literal_block(self, node)
-
+ sphinx_htmlwriter.SmartyPantsHTMLTranslator.visit_literal_block(self, node)
+
def depart_literal_block(self, node):
- sphinx.htmlwriter.SmartyPantsHTMLTranslator.depart_literal_block(self, node)
+ sphinx_htmlwriter.SmartyPantsHTMLTranslator.depart_literal_block(self, node)
self.no_smarty -= 1
#
@@ -162,7 +168,7 @@
# Give each section a unique ID -- nice for custom CSS hooks
# This is different on docutils 0.5 vs. 0.4...
- if hasattr(sphinx.htmlwriter.SmartyPantsHTMLTranslator, 'start_tag_with_title') and sphinx.__version__ == '0.4.2':
+ if hasattr(sphinx_htmlwriter.SmartyPantsHTMLTranslator, 'start_tag_with_title') and sphinx.__version__ == '0.4.2':
def start_tag_with_title(self, node, tagname, **atts):
node = {
'classes': node.get('classes', []),
@@ -176,7 +182,7 @@
node['ids'] = ['s-' + i for i in old_ids]
if sphinx.__version__ != '0.4.2':
node['ids'].extend(old_ids)
- sphinx.htmlwriter.SmartyPantsHTMLTranslator.visit_section(self, node)
+ sphinx_htmlwriter.SmartyPantsHTMLTranslator.visit_section(self, node)
node['ids'] = old_ids
def parse_django_admin_node(env, sig, signode):
@@ -186,6 +192,25 @@
signode += sphinx.addnodes.desc_name(title, title)
return sig
+def parse_django_adminopt_node(env, sig, signode):
+ """A copy of sphinx.directives.CmdoptionDesc.parse_signature()"""
+ from sphinx import addnodes
+ from sphinx.directives.desc import option_desc_re
+ count = 0
+ firstname = ''
+ for m in option_desc_re.finditer(sig):
+ optname, args = m.groups()
+ if count:
+ signode += addnodes.desc_addname(', ', ', ')
+ signode += addnodes.desc_name(optname, optname)
+ signode += addnodes.desc_addname(args, args)
+ if not count:
+ firstname = optname
+ count += 1
+ if not firstname:
+ raise ValueError
+ return firstname
+
def monkeypatch_pickle_builder():
import shutil
from os import path
@@ -214,12 +239,12 @@
# copy the environment file from the doctree dir to the output dir
# as needed by the web app
- shutil.copyfile(path.join(self.doctreedir, sphinx.builder.ENV_PICKLE_FILENAME),
- path.join(self.outdir, sphinx.builder.ENV_PICKLE_FILENAME))
+ shutil.copyfile(path.join(self.doctreedir, builders.ENV_PICKLE_FILENAME),
+ path.join(self.outdir, builders.ENV_PICKLE_FILENAME))
# touch 'last build' file, used by the web application to determine
# when to reload its environment and clear the cache
- open(path.join(self.outdir, sphinx.builder.LAST_BUILD_FILENAME), 'w').close()
+ open(path.join(self.outdir, builders.LAST_BUILD_FILENAME), 'w').close()
- sphinx.builder.PickleHTMLBuilder.handle_finish = handle_finish
-
+ builders.PickleHTMLBuilder.handle_finish = handle_finish
+
Modified: django/branches/soc2009/multidb/docs/_templates/layout.html
===================================================================
--- django/branches/soc2009/multidb/docs/_templates/layout.html 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/_templates/layout.html 2009-07-09 17:45:59 UTC (rev 11209)
@@ -1,6 +1,6 @@
{% extends "!layout.html" %}
-{%- macro secondnav %}
+{%- macro secondnav() %}
{%- if prev %}
« <a href="{{ prev.link|e }}" title="{{ prev.title|e }}">previous</a>
{{ reldelim2 }}
Modified: django/branches/soc2009/multidb/docs/faq/admin.txt
===================================================================
--- django/branches/soc2009/multidb/docs/faq/admin.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/faq/admin.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -37,20 +37,19 @@
How do I automatically set a field's value to the user who last edited the object in the admin?
-----------------------------------------------------------------------------------------------
-At this point, Django doesn't have an official way to do this. But it's an oft-requested
-feature, so we're discussing how it can be implemented. The problem is we don't want to couple
-the model layer with the admin layer with the request layer (to get the current user). It's a
-tricky problem.
+The :class:`ModelAdmin` class provides customization hooks that allow you to transform
+an object as it saved, using details from the request. By extracting the current user
+from the request, and customizing the :meth:`ModelAdmin.save_model` hook, you can update
+an object to reflect the user that edited it. See :ref:`the documentation on ModelAdmin
+methods <model-admin-methods>` for an example.
-One person hacked up a `solution that doesn't require patching Django`_, but note that it's an
-unofficial solution, and there's no guarantee it won't break at some point.
-
-.. _solution that doesn't require patching Django:
http://lukeplant.me.uk/blog.php?id=1107301634-
How do I limit admin access so that objects can only be edited by the users who created them?
---------------------------------------------------------------------------------------------
-See the answer to the previous question.
+The :class:`ModelAdmin` class also provides customization hooks that allow you to control the
+visibility and editability of objects in the admin. Using the same trick of extracting the
+user from the request, the :meth:`ModelAdmin.queryset` and :meth:`ModelAdmin.has_change_permission`
+can be used to control the visibility and editability of objects in the admin.
My admin-site CSS and images showed up fine using the development server, but they're not displaying when using mod_python.
---------------------------------------------------------------------------------------------------------------------------
Modified: django/branches/soc2009/multidb/docs/howto/deployment/modpython.txt
===================================================================
--- django/branches/soc2009/multidb/docs/howto/deployment/modpython.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/howto/deployment/modpython.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -6,8 +6,8 @@
.. highlight:: apache
-The `mod_python`_ module for Apache_ can be used to deploy Django to a
-production server, although it has been mostly superseded by the simpler
+The `mod_python`_ module for Apache_ can be used to deploy Django to a
+production server, although it has been mostly superseded by the simpler
:ref:`mod_wsgi deployment option <howto-deployment-modwsgi>`.
mod_python is similar to (and inspired by) `mod_perl`_ : It embeds Python within
@@ -378,3 +378,24 @@
.. _Expat Causing Apache Crash:
http://www.dscpl.com.au/articles/modpython-006.html .. _mod_python FAQ entry:
http://modpython.org/FAQ/faqw.py?req=show&file=faq02.013.htp .. _Getting mod_python Working:
http://www.dscpl.com.au/articles/modpython-001.html+
+If you get a UnicodeEncodeError
+===============================
+
+If you're taking advantage of the internationalization features of Django (see
+:ref:`topics-i18n`) and you intend to allow users to upload files, you must
+ensure that the environment used to start Apache is configured to accept
+non-ASCII file names. If your environment is not correctly configured, you
+will trigger ``UnicodeEncodeError`` exceptions when calling functions like
+``os.path()`` on filenames that contain non-ASCII characters.
+
+To avoid these problems, the environment used to start Apache should contain
+settings analogous to the following::
+
+ export LANG='en_US.UTF-8'
+ export LC_ALL='en_US.UTF-8'
+
+Consult the documentation for your operating system for the appropriate syntax
+and location to put these configuration items; ``/etc/apache2/envvars`` is a
+common location on Unix platforms. Once you have added these statements
+to your environment, restart Apache.
Modified: django/branches/soc2009/multidb/docs/ref/contrib/admin/index.txt
===================================================================
--- django/branches/soc2009/multidb/docs/ref/contrib/admin/index.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/ref/contrib/admin/index.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -704,6 +704,8 @@
If you don't specify this attribute, a default template shipped with Django
that provides the standard appearance is used.
+.. _model-admin-methods:
+
``ModelAdmin`` methods
----------------------
@@ -792,7 +794,7 @@
class MyModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "car":
- kwargs["queryset"] = Car.object.filter(owner=request.user)
+ kwargs["queryset"] = Car.objects.filter(owner=request.user)
return db_field.formfield(**kwargs)
return super(MyModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Modified: django/branches/soc2009/multidb/docs/ref/databases.txt
===================================================================
--- django/branches/soc2009/multidb/docs/ref/databases.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/ref/databases.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -220,7 +220,7 @@
Should you decide to use ``utf8_bin`` collation for some of your tables with
MySQLdb 1.2.1p2, you should still use ``utf8_collation_ci_swedish`` (the
default) collation for the :class:`django.contrib.sessions.models.Session`
-table (usually called ``django_session`` and the table
+table (usually called ``django_session``) and the
:class:`django.contrib.admin.models.LogEntry` table (usually called
``django_admin_log``). Those are the two standard tables that use
:class:`~django.db.model.TextField` internally.
Modified: django/branches/soc2009/multidb/docs/ref/templates/builtins.txt
===================================================================
--- django/branches/soc2009/multidb/docs/ref/templates/builtins.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/ref/templates/builtins.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -101,6 +101,14 @@
Values enclosed in single (``'``) or double quotes (``"``) are treated as
string literals, while values without quotes are treated as template variables.
+Note that the variables included in the cycle will not be escaped. This is
+because template tags do not escape their content. If you want to escape the
+variables in the cycle, you must do so explicitly::
+
+ {% filter force_escape %}
+ {% cycle var1 var2 var3 %}
+ {% endfilter %}
+
For backwards compatibility, the ``{% cycle %}`` tag supports the much inferior
old syntax from previous Django versions. You shouldn't use this in any new
projects, but for the sake of the people who are still using it, here's what it
@@ -160,9 +168,10 @@
firstof
~~~~~~~
-Outputs the first variable passed that is not False. Outputs nothing if all the
-passed variables are False.
+Outputs the first variable passed that is not False, without escaping.
+Outputs nothing if all the passed variables are False.
+
Sample usage::
{% firstof var1 var2 var3 %}
@@ -170,11 +179,11 @@
This is equivalent to::
{% if var1 %}
- {{ var1 }}
+ {{ var1|safe }}
{% else %}{% if var2 %}
- {{ var2 }}
+ {{ var2|safe }}
{% else %}{% if var3 %}
- {{ var3 }}
+ {{ var3|safe }}
{% endif %}{% endif %}{% endif %}
You can also use a literal string as a fallback value in case all
@@ -182,6 +191,14 @@
{% firstof var1 var2 var3 "fallback value" %}
+Note that the variables included in the firstof tag will not be escaped. This
+is because template tags do not escape their content. If you want to escape
+the variables in the firstof tag, you must do so explicitly::
+
+ {% filter force_escape %}
+ {% firstof var1 var2 var3 "fallback value" %}
+ {% endfilter %}
+
.. templatetag:: for
for
Modified: django/branches/soc2009/multidb/docs/topics/i18n.txt
===================================================================
--- django/branches/soc2009/multidb/docs/topics/i18n.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/topics/i18n.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -223,8 +223,20 @@
~~~~~~~~~~~~~
Use the function ``django.utils.translation.ungettext()`` to specify pluralized
-messages. Example::
+messages.
+``ungettext`` takes three arguments: the singular translation string, the plural
+translation string and the number of objects.
+
+This function is useful when your need you Django application to be localizable
+to languages where the number and complexity of `plural forms
+<
http://www.gnu.org/software/gettext/manual/gettext.html#Plural-forms>`_ is
+greater than the two forms used in English ('object' for the singular and
+'objects' for all the cases where ``count`` is different from zero, irrespective
+of its value.)
+
+For example::
+
from django.utils.translation import ungettext
def hello_world(request, count):
page = ungettext('there is %(count)d object', 'there are %(count)d objects', count) % {
@@ -232,10 +244,62 @@
}
return HttpResponse(page)
-``ungettext`` takes three arguments: the singular translation string, the plural
-translation string and the number of objects (which is passed to the
-translation languages as the ``count`` variable).
+In this example the number of objects is passed to the translation languages as
+the ``count`` variable.
+Lets see a slightly more complex usage example::
+
+ from django.utils.translation import ungettext
+
+ count = Report.objects.count()
+ if count == 1:
+ name = Report._meta.verbose_name
+ else:
+ name = Report._meta.verbose_name_plural
+
+ text = ungettext(
+ 'There is %(count)d %(name)s available.',
+ 'There are %(count)d %(name)s available.',
+ count
+ ) % {
+ 'count': count,
+ 'name': name
+ }
+
+Here we reuse localizable, hopefully already translated literals (contained in
+the ``verbose_name`` and ``verbose_name_plural`` model ``Meta`` options) for
+other parts of the sentence so all of it is consistently based on the
+cardinality of the elements at play.
+
+.. _pluralization-var-notes:
+
+.. note::
+
+ When using this technique, make sure you use a single name for every
+ extrapolated variable included in the literal. In the example above note how
+ we used the ``name`` Python variable in both translation strings. This
+ example would fail::
+
+ from django.utils.translation import ungettext
+ from myapp.models import Report
+
+ count = Report.objects.count()
+ d = {
+ 'count': count,
+ 'name': Report._meta.verbose_name
+ 'plural_name': Report._meta.verbose_name_plural
+ }
+ text = ungettext(
+ 'There is %(count)d %(name)s available.',
+ 'There are %(count)d %(plural_name)s available.',
+ count
+ ) % d
+
+ You would get a ``a format specification for argument 'name', as in
+ 'msgstr[0]', doesn't exist in 'msgid'`` error when running
+ ``django-admin.py compilemessages`` or a ``KeyError`` Python exception at
+ runtime.
+
In template code
----------------
@@ -257,6 +321,8 @@
<title>{% trans "myvar" noop %}</title>
+Internally, inline translations use an ``ugettext`` call.
+
It's not possible to mix a template variable inside a string within ``{% trans
%}``. If your translations require strings with variables (placeholders), use
``{% blocktrans %}``::
@@ -288,8 +354,11 @@
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}
-Internally, all block and inline translations use the appropriate
-``ugettext`` / ``ungettext`` call.
+When you use the pluralization feature and bind additional values to local
+variables apart from the counter value that selects the translated literal to be
+used, have in mind that the ``blocktrans`` construct is internally converted
+to an ``ungettext`` call. This means the same :ref:`notes regarding ungettext
+variables <pluralization-var-notes>` apply.
Each ``RequestContext`` has access to three translation-specific variables:
Modified: django/branches/soc2009/multidb/docs/topics/testing.txt
===================================================================
--- django/branches/soc2009/multidb/docs/topics/testing.txt 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/docs/topics/testing.txt 2009-07-09 17:45:59 UTC (rev 11209)
@@ -479,7 +479,7 @@
Once you have a ``Client`` instance, you can call any of the following
methods:
- .. method:: Client.get(path, data={}, follow=False)
+ .. method:: Client.get(path, data={}, follow=False, **extra)
Makes a GET request on the provided ``path`` and returns a ``Response``
@@ -495,6 +495,17 @@
/customers/details/?name=fred&age=7
+ The ``extra`` keyword arguments parameter can be used to specify
+ headers to be sent in the request. For example::
+
+ >>> c = Client()
+ >>> c.get('/customers/details/', {'name': 'fred', 'age': 7},
+ ... HTTP_X_REQUESTED_WITH='XMLHttpRequest')
+
+ ...will send the HTTP header ``HTTP_X_REQUESTED_WITH`` to the
+ details view, which is a good way to test code paths that use the
+ :meth:`django.http.HttpRequest.is_ajax()` method.
+
.. versionadded:: 1.1
If you already have the GET arguments in URL-encoded form, you can
@@ -518,7 +529,7 @@
>>> response.redirect_chain
[(u'
http://testserver/next/', 302), (u'
http://testserver/final/', 302)]
- .. method:: Client.post(path, data={}, content_type=MULTIPART_CONTENT, follow=False)
+ .. method:: Client.post(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)
Makes a POST request on the provided ``path`` and returns a
``Response`` object, which is documented below.
@@ -569,6 +580,8 @@
Note that you should manually close the file after it has been provided
to ``post()``.
+ The ``extra`` argument acts the same as for :meth:`Client.get`.
+
.. versionchanged:: 1.1
If the URL you request with a POST contains encoded parameters, these
@@ -585,7 +598,7 @@
and a ``redirect_chain`` attribute will be set in the response object
containing tuples of the intermediate urls and status codes.
- .. method:: Client.head(path, data={}, follow=False)
+ .. method:: Client.head(path, data={}, follow=False, **extra)
.. versionadded:: 1.1
@@ -597,7 +610,7 @@
and a ``redirect_chain`` attribute will be set in the response object
containing tuples of the intermediate urls and status codes.
- .. method:: Client.options(path, data={}, follow=False)
+ .. method:: Client.options(path, data={}, follow=False, **extra)
.. versionadded:: 1.1
@@ -608,8 +621,10 @@
and a ``redirect_chain`` attribute will be set in the response object
containing tuples of the intermediate urls and status codes.
- .. method:: Client.put(path, data={}, content_type=MULTIPART_CONTENT, follow=False)
+ The ``extra`` argument acts the same as for :meth:`Client.get`.
+ .. method:: Client.put(path, data={}, content_type=MULTIPART_CONTENT, follow=False, **extra)
+
.. versionadded:: 1.1
Makes an PUT request on the provided ``path`` and returns a
@@ -620,7 +635,7 @@
and a ``redirect_chain`` attribute will be set in the response object
containing tuples of the intermediate urls and status codes.
- .. method:: Client.delete(path, follow=False)
+ .. method:: Client.delete(path, follow=False, **extra)
.. versionadded:: 1.1
@@ -631,6 +646,8 @@
and a ``redirect_chain`` attribute will be set in the response object
containing tuples of the intermediate urls and status codes.
+ The ``extra`` argument acts the same as for :meth:`Client.get`.
+
.. method:: Client.login(**credentials)
.. versionadded:: 1.0
Modified: django/branches/soc2009/multidb/tests/regressiontests/admin_views/models.py
===================================================================
--- django/branches/soc2009/multidb/tests/regressiontests/admin_views/models.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/tests/regressiontests/admin_views/models.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -326,7 +326,6 @@
class PictureAdmin(admin.ModelAdmin):
pass
-
class Language(models.Model):
iso = models.CharField(max_length=5, primary_key=True)
name = models.CharField(max_length=50)
@@ -401,8 +400,25 @@
class FancyDoodadInline(admin.StackedInline):
model = FancyDoodad
+class Category(models.Model):
+ collector = models.ForeignKey(Collector)
+ order = models.PositiveIntegerField()
+
+ class Meta:
+ ordering = ('order',)
+
+ def __unicode__(self):
+ return u'%s:o%s' % (self.id, self.order)
+
+class CategoryAdmin(admin.ModelAdmin):
+ list_display = ('id', 'collector', 'order')
+ list_editable = ('order',)
+
+class CategoryInline(admin.StackedInline):
+ model = Category
+
class CollectorAdmin(admin.ModelAdmin):
- inlines = [WidgetInline, DooHickeyInline, GrommetInline, WhatsitInline, FancyDoodadInline]
+ inlines = [WidgetInline, DooHickeyInline, GrommetInline, WhatsitInline, FancyDoodadInline, CategoryInline]
admin.site.register(Article, ArticleAdmin)
admin.site.register(CustomArticle, CustomArticleAdmin)
@@ -426,6 +442,7 @@
admin.site.register(Recommendation, RecommendationAdmin)
admin.site.register(Recommender)
admin.site.register(Collector, CollectorAdmin)
+admin.site.register(Category, CategoryAdmin)
# We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2.
# That way we cover all four cases:
Modified: django/branches/soc2009/multidb/tests/regressiontests/admin_views/tests.py
===================================================================
--- django/branches/soc2009/multidb/tests/regressiontests/admin_views/tests.py 2009-07-09 10:57:18 UTC (rev 11208)
+++ django/branches/soc2009/multidb/tests/regressiontests/admin_views/tests.py 2009-07-09 17:45:59 UTC (rev 11209)
@@ -16,7 +16,8 @@
from models import Article, BarAccount, CustomArticle, EmptyModel, \
ExternalSubscriber, FooAccount, Gallery, ModelWithStringPrimaryKey, \
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast, \
- Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit
+ Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit, \
+ Category
try:
set
@@ -921,6 +922,45 @@
self.failUnlessEqual(Person.objects.get(name="John Mauchly").alive, False)
+ def test_list_editable_ordering(self):
+ collector = Collector.objects.create(id=1, name="Frederick Clegg")
+
+ Category.objects.create(id=1, order=1, collector=collector)
+ Category.objects.create(id=2, order=2, collector=collector)
+ Category.objects.create(id=3, order=0, collector=collector)
+ Category.objects.create(id=4, order=0, collector=collector)
+
+ # NB: The order values must be changed so that the items are reordered.
+ data = {
+ "form-TOTAL_FORMS": "4",
+ "form-INITIAL_FORMS": "4",
+
+ "form-0-order": "14",
+ "form-0-id": "1",
+ "form-0-collector": "1",
+
+ "form-1-order": "13",
+ "form-1-id": "2",
+ "form-1-collector": "1",
+
+ "form-2-order": "1",
+ "form-2-id": "3",
+ "form-2-collector": "1",
+
+ "form-3-order": "0",
+ "form-3-id": "4",
+ "form-3-collector": "1",
+ }
+ response = self.client.post('/test_admin/admin/admin_views/category/', data)
+ # Successful post will redirect
+ self.failUnlessEqual(response.status_code, 302)
+
+ # Check that the order values have been applied to the right objects
+ self.failUnlessEqual(Category.objects.get(id=1).order, 14)
+ self.failUnlessEqual(Category.objects.get(id=2).order, 13)
+ self.failUnlessEqual(Category.objects.get(id=3).order, 1)
+ self.failUnlessEqual(Category.objects.get(id=4).order, 0)
+
class AdminSearchTest(TestCase):
fixtures = ['admin-views-users','multiple-child-classes']
@@ -1254,11 +1294,24 @@
"fancydoodad_set-2-owner": "1",
"fancydoodad_set-2-name": "",
"fancydoodad_set-2-expensive": "on",
+
+ "category_set-TOTAL_FORMS": "3",
+ "category_set-INITIAL_FORMS": "0",
+ "category_set-0-order": "",
+ "category_set-0-id": "",
+ "category_set-0-collector": "1",
+ "category_set-1-order": "",
+ "category_set-1-id": "",
+ "category_set-1-collector": "1",
+ "category_set-2-order": "",
+ "category_set-2-id": "",
+ "category_set-2-collector": "1",
}
result = self.client.login(username='super', password='secret')
self.failUnlessEqual(result, True)
- Collector(pk=1,name='John Fowles').save()
+ self.collector = Collector(pk=1,name='John Fowles')
+ self.collector.save()
def tearDown(self):
self.client.logout()
@@ -1419,3 +1472,58 @@
self.failUnlessEqual(response.status_code, 302)
self.failUnlessEqual(FancyDoodad.objects.count(), 1)
self.failUnlessEqual(FancyDoodad.objects.all()[0].name, "Fancy Doodad 1 Updated")
+
+ def test_ordered_inline(self):
+ """Check that an inline with an editable ordering fields is
+ updated correctly. Regression for #10922"""
+ # Create some objects with an initial ordering
+ Category.objects.create(id=1, order=1, collector=self.collector)
+ Category.objects.create(id=2, order=2, collector=self.collector)
+ Category.objects.create(id=3, order=0, collector=self.collector)
+ Category.objects.create(id=4, order=0, collector=self.collector)
+
+ # NB: The order values must be changed so that the items are reordered.
+ self.post_data.update({
+ "name": "Frederick Clegg",
+
+ "category_set-TOTAL_FORMS": "7",
+ "category_set-INITIAL_FORMS": "4",
+
+ "category_set-0-order": "14",
+ "category_set-0-id": "1",
+ "category_set-0-collector": "1",
+
+ "category_set-1-order": "13",
+ "category_set-1-id": "2",
+ "category_set-1-collector": "1",
+
+ "category_set-2-order": "1",
+ "category_set-2-id": "3",
+ "category_set-2-collector": "1",
+
+ "category_set-3-order": "0",
+ "category_set-3-id": "4",
+ "category_set-3-collector": "1",
+
+ "category_set-4-order": "",
+ "category_set-4-id": "",
+ "category_set-4-collector": "1",
+
+ "category_set-5-order": "",
+ "category_set-5-id": "",
+ "category_set-5-collector": "1",
+
+ "category_set-6-order": "",
+ "category_set-6-id": "",
+ "category_set-6-collector": "1",
+ })
+ response = self.client.post('/test_admin/admin/admin_views/collector/1/', self.post_data)
+ # Successful post will redirect
+ self.failUnlessEqual(response.status_code, 302)
+
+ # Check that the order values have been applied to the right objects
+ self.failUnlessEqual(self.collector.category_set.count(), 4)
+ self.failUnlessEqual(Category.objects.get(id=1).order, 14)
+ self.failUnlessEqual(Category.objects.get(id=2).order, 13)
+ self.failUnlessEqual(Category.objects.get(id=3).order, 1)
+ self.failUnlessEqual(Category.objects.get(id=4).order, 0)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Django updates" group.
To post to this group, send email to
django-updates@...
To unsubscribe from this group, send email to
django-updates+unsubscribe@...
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en-~----------~----~----~----~------~----~------~--~---