1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

unicode: Merged changes from trunk up to [5579].

git-svn-id: http://code.djangoproject.com/svn/django/branches/unicode@5580 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2007-07-01 05:55:01 +00:00
parent b89d409bf7
commit a61d4ebd5f
50 changed files with 1905 additions and 533 deletions

View File

@ -123,6 +123,7 @@ answer newbie questions, and generally made Django that much better:
Ian Holsman <http://feh.holsman.net/> Ian Holsman <http://feh.holsman.net/>
Kieran Holland <http://www.kieranholland.com> Kieran Holland <http://www.kieranholland.com>
Sung-Jin Hong <serialx.net@gmail.com> Sung-Jin Hong <serialx.net@gmail.com>
Richard House <Richard.House@i-logue.com>
Robert Rock Howard <http://djangomojo.com/> Robert Rock Howard <http://djangomojo.com/>
Jason Huggins <http://www.jrandolph.com/blog/> Jason Huggins <http://www.jrandolph.com/blog/>
Hyun Mi Ae Hyun Mi Ae
@ -231,6 +232,7 @@ answer newbie questions, and generally made Django that much better:
Frank Tegtmeyer <fte@fte.to> Frank Tegtmeyer <fte@fte.to>
thebjorn <bp@datakortet.no> thebjorn <bp@datakortet.no>
Zach Thompson <zthompson47@gmail.com> Zach Thompson <zthompson47@gmail.com>
tibimicu@gmax.net
Tom Tobin Tom Tobin
Joe Topjian <http://joe.terrarum.net/geek/code/python/django/> Joe Topjian <http://joe.terrarum.net/geek/code/python/django/>
torne-django@wolfpuppy.org.uk torne-django@wolfpuppy.org.uk

Binary file not shown.

View File

@ -0,0 +1,118 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-06-28 17:36+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""

View File

@ -1,20 +1,18 @@
# translation of django.po to # translation of django.po to
# This file is distributed under the same license as the PACKAGE package. # This file is distributed under the same license as the Django package.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: django\n" "Project-Id-Version: django\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-05-25 13:04+0200\n" "POT-Creation-Date: 2007-06-25 17:31+0200\n"
"PO-Revision-Date: 2007-05-25 13:04+0200\n" "PO-Revision-Date: 2007-06-25 17:47+0200\n"
"Last-Translator: Marc Fargas <marc@fargas.com>\n" "Last-Translator: Marc Fargas <telenieko@telenieko.com>\n"
"Language-Team: <es@li.org>\n" "Language-Team: <es@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"X-Generator: VIM 7.0\n" "Plural-Forms: nplurals=2; plural=(n != 1);"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: template/defaultfilters.py:491 #: template/defaultfilters.py:491
msgid "yes,no,maybe" msgid "yes,no,maybe"
@ -42,38 +40,38 @@ msgstr "%.1f MB"
msgid "%.1f GB" msgid "%.1f GB"
msgstr "%.1f GB" msgstr "%.1f GB"
#: newforms/models.py:173 newforms/fields.py:432 #: newforms/models.py:172 newforms/fields.py:432
msgid "Select a valid choice. That choice is not one of the available choices." msgid "Select a valid choice. That choice is not one of the available choices."
msgstr "" msgstr ""
"Esculli una opció vàlida; Aquesta opció no és una de les opcions disponibles." "Esculli una opció vàlida; Aquesta opció no és una de les opcions disponibles."
#: newforms/models.py:186 newforms/fields.py:87 newforms/fields.py:444 #: newforms/models.py:185 newforms/fields.py:87 newforms/fields.py:444
#: newforms/fields.py:520 newforms/fields.py:531 oldforms/__init__.py:357 #: newforms/fields.py:522 newforms/fields.py:533 oldforms/__init__.py:357
#: db/models/fields/__init__.py:121 db/models/fields/__init__.py:278 #: db/models/fields/__init__.py:126 db/models/fields/__init__.py:283
#: db/models/fields/__init__.py:675 db/models/fields/__init__.py:686 #: db/models/fields/__init__.py:680 db/models/fields/__init__.py:691
msgid "This field is required." msgid "This field is required."
msgstr "Aquest camp és obligatori." msgstr "Aquest camp és obligatori."
#: newforms/models.py:190 newforms/fields.py:448 newforms/fields.py:524 #: newforms/models.py:189 newforms/fields.py:448 newforms/fields.py:526
msgid "Enter a list of values." msgid "Enter a list of values."
msgstr "Introdueixi una llista de valors." msgstr "Introdueixi una llista de valors."
#: newforms/models.py:196 newforms/fields.py:457 #: newforms/models.py:195 newforms/fields.py:457
#, python-format #, python-format
msgid "Select a valid choice. %s is not one of the available choices." msgid "Select a valid choice. %s is not one of the available choices."
msgstr "Esculli una opció vàlida; %s' no és una de les opcions vàlides." msgstr "Esculli una opció vàlida; %s' no és una de les opcions vàlides."
#: newforms/widgets.py:182 contrib/admin/filterspecs.py:150 #: newforms/widgets.py:181 contrib/admin/filterspecs.py:150
#: oldforms/__init__.py:577 #: oldforms/__init__.py:577
msgid "Unknown" msgid "Unknown"
msgstr "Desconegut" msgstr "Desconegut"
#: newforms/widgets.py:182 contrib/admin/filterspecs.py:143 #: newforms/widgets.py:181 contrib/admin/filterspecs.py:143
#: oldforms/__init__.py:577 #: oldforms/__init__.py:577
msgid "Yes" msgid "Yes"
msgstr "Si" msgstr "Si"
#: newforms/widgets.py:182 contrib/admin/filterspecs.py:143 #: newforms/widgets.py:181 contrib/admin/filterspecs.py:143
#: oldforms/__init__.py:577 #: oldforms/__init__.py:577
msgid "No" msgid "No"
msgstr "No" msgstr "No"
@ -121,11 +119,11 @@ msgstr "Asseguris de que no hi ha més de %s decimals."
msgid "Ensure that there are no more than %s digits before the decimal point." msgid "Ensure that there are no more than %s digits before the decimal point."
msgstr "Asseguris de que no hia ha més de %s dígits decimals." msgstr "Asseguris de que no hia ha més de %s dígits decimals."
#: newforms/fields.py:233 #: newforms/fields.py:233 newforms/fields.py:566
msgid "Enter a valid date." msgid "Enter a valid date."
msgstr "Introdueixi una data vàlida." msgstr "Introdueixi una data vàlida."
#: newforms/fields.py:260 #: newforms/fields.py:260 newforms/fields.py:568
msgid "Enter a valid time." msgid "Enter a valid time."
msgstr "Introdueixi una hora vàlida." msgstr "Introdueixi una hora vàlida."
@ -198,118 +196,122 @@ msgid "Argentinean Spanish"
msgstr "Castellà Argentí" msgstr "Castellà Argentí"
#: conf/global_settings.py:51 #: conf/global_settings.py:51
msgid "Persian"
msgstr "Persa"
#: conf/global_settings.py:52
msgid "Finnish" msgid "Finnish"
msgstr "Finlandès" msgstr "Finlandès"
#: conf/global_settings.py:52 #: conf/global_settings.py:53
msgid "French" msgid "French"
msgstr "Francès" msgstr "Francès"
#: conf/global_settings.py:53 #: conf/global_settings.py:54
msgid "Galician" msgid "Galician"
msgstr "Galleg" msgstr "Galleg"
#: conf/global_settings.py:54 #: conf/global_settings.py:55
msgid "Hungarian" msgid "Hungarian"
msgstr "Húngar" msgstr "Húngar"
#: conf/global_settings.py:55 #: conf/global_settings.py:56
msgid "Hebrew" msgid "Hebrew"
msgstr "Hebreu" msgstr "Hebreu"
#: conf/global_settings.py:56 #: conf/global_settings.py:57
msgid "Icelandic" msgid "Icelandic"
msgstr "Islandès" msgstr "Islandès"
#: conf/global_settings.py:57 #: conf/global_settings.py:58
msgid "Italian" msgid "Italian"
msgstr "Italià" msgstr "Italià"
#: conf/global_settings.py:58 #: conf/global_settings.py:59
msgid "Japanese" msgid "Japanese"
msgstr "Japonès" msgstr "Japonès"
#: conf/global_settings.py:59 #: conf/global_settings.py:60
msgid "Korean" msgid "Korean"
msgstr "Coreà" msgstr "Coreà"
#: conf/global_settings.py:60 #: conf/global_settings.py:61
msgid "Kannada" msgid "Kannada"
msgstr "" msgstr ""
#: conf/global_settings.py:61
msgid "Latvian"
msgstr ""
#: conf/global_settings.py:62 #: conf/global_settings.py:62
msgid "Latvian"
msgstr "Letó"
#: conf/global_settings.py:63
msgid "Macedonian" msgid "Macedonian"
msgstr "Macedoni" msgstr "Macedoni"
#: conf/global_settings.py:63 #: conf/global_settings.py:64
msgid "Dutch" msgid "Dutch"
msgstr "Holandès" msgstr "Holandès"
#: conf/global_settings.py:64 #: conf/global_settings.py:65
msgid "Norwegian" msgid "Norwegian"
msgstr "Norueg" msgstr "Norueg"
#: conf/global_settings.py:65 #: conf/global_settings.py:66
msgid "Polish" msgid "Polish"
msgstr "Polac" msgstr "Polac"
#: conf/global_settings.py:66 #: conf/global_settings.py:67
msgid "Portugese" msgid "Portugese"
msgstr "Portuguès" msgstr "Portuguès"
#: conf/global_settings.py:67 #: conf/global_settings.py:68
msgid "Brazilian" msgid "Brazilian"
msgstr "Brasileny" msgstr "Brasileny"
#: conf/global_settings.py:68 #: conf/global_settings.py:69
msgid "Romanian" msgid "Romanian"
msgstr "Rumanès" msgstr "Rumanès"
#: conf/global_settings.py:69 #: conf/global_settings.py:70
msgid "Russian" msgid "Russian"
msgstr "Rús" msgstr "Rús"
#: conf/global_settings.py:70 #: conf/global_settings.py:71
msgid "Slovak" msgid "Slovak"
msgstr "Eslovac" msgstr "Eslovac"
#: conf/global_settings.py:71 #: conf/global_settings.py:72
msgid "Slovenian" msgid "Slovenian"
msgstr "Esloveni" msgstr "Esloveni"
#: conf/global_settings.py:72 #: conf/global_settings.py:73
msgid "Serbian" msgid "Serbian"
msgstr "Serbi" msgstr "Serbi"
#: conf/global_settings.py:73 #: conf/global_settings.py:74
msgid "Swedish" msgid "Swedish"
msgstr "Suec" msgstr "Suec"
#: conf/global_settings.py:74
msgid "Tamil"
msgstr ""
#: conf/global_settings.py:75 #: conf/global_settings.py:75
msgid "Telugu" msgid "Tamil"
msgstr "" msgstr "Tàmil"
#: conf/global_settings.py:76 #: conf/global_settings.py:76
msgid "Telugu"
msgstr "Telugu"
#: conf/global_settings.py:77
msgid "Turkish" msgid "Turkish"
msgstr "Turc" msgstr "Turc"
#: conf/global_settings.py:77 #: conf/global_settings.py:78
msgid "Ukrainian" msgid "Ukrainian"
msgstr "Ucranià" msgstr "Ucranià"
#: conf/global_settings.py:78 #: conf/global_settings.py:79
msgid "Simplified Chinese" msgid "Simplified Chinese"
msgstr "Xinés simplificat" msgstr "Xinés simplificat"
#: conf/global_settings.py:79 #: conf/global_settings.py:80
msgid "Traditional Chinese" msgid "Traditional Chinese"
msgstr "Xinés tradicional" msgstr "Xinés tradicional"
@ -576,17 +578,15 @@ msgid ""
"comment:\n" "comment:\n"
"\n" "\n"
"%(text)s" "%(text)s"
msgid_plural ""
"This comment was posted by a user who has posted fewer than %(count)s " "This comment was posted by a user who has posted fewer than %(count)s "
"comments:\n" "comments:\n"
"\n" "\n"
"%(text)s" "%(text)s"
msgstr[0] "" msgstr ""
"Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s " "Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s "
"comentari:\n" "comentari:\n"
"\n" "\n"
"%(text)s" "%(text)s"
msgstr[1] ""
"Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s " "Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s "
"comentaris:\n" "comentaris:\n"
"\n" "\n"
@ -1218,13 +1218,13 @@ msgstr "Editar aquest objecte (nova finestra)"
msgid "As above, but opens the admin page in a new window." msgid "As above, but opens the admin page in a new window."
msgstr "Com abans, però obre la pàgina d'administració en una nova finestra." msgstr "Com abans, però obre la pàgina d'administració en una nova finestra."
#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 #: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:262
#, python-format #, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully." msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "El/la %(name)s \"%(obj)s\".ha estat agregat/da amb èxit." msgstr "El/la %(name)s \"%(obj)s\".ha estat agregat/da amb èxit."
#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 #: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:266
#: contrib/admin/views/main.py:347 #: contrib/admin/views/main.py:352
msgid "You may edit it again below." msgid "You may edit it again below."
msgstr "Pot editar-lo de nou abaix." msgstr "Pot editar-lo de nou abaix."
@ -1241,96 +1241,96 @@ msgstr "Canvi de clau exitós"
msgid "Change password: %s" msgid "Change password: %s"
msgstr "Canviar clau: %s" msgstr "Canviar clau: %s"
#: contrib/admin/views/main.py:223 #: contrib/admin/views/main.py:228
msgid "Site administration" msgid "Site administration"
msgstr "Lloc administratiu" msgstr "Lloc administratiu"
#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #: contrib/admin/views/main.py:276 contrib/admin/views/main.py:361
#, python-format #, python-format
msgid "You may add another %s below." msgid "You may add another %s below."
msgstr "Pot agregar un altre %s abaix." msgstr "Pot agregar un altre %s abaix."
#: contrib/admin/views/main.py:289 #: contrib/admin/views/main.py:294
#, python-format #, python-format
msgid "Add %s" msgid "Add %s"
msgstr "Agregar %s" msgstr "Agregar %s"
#: contrib/admin/views/main.py:335 #: contrib/admin/views/main.py:340
#, python-format #, python-format
msgid "Added %s." msgid "Added %s."
msgstr "Agregat %s." msgstr "Agregat %s."
#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 #: contrib/admin/views/main.py:340 contrib/admin/views/main.py:342
#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 #: contrib/admin/views/main.py:344 db/models/manipulators.py:308
msgid "and" msgid "and"
msgstr "i" msgstr "i"
#: contrib/admin/views/main.py:337 #: contrib/admin/views/main.py:342
#, python-format #, python-format
msgid "Changed %s." msgid "Changed %s."
msgstr "Modificat %s." msgstr "Modificat %s."
#: contrib/admin/views/main.py:339 #: contrib/admin/views/main.py:344
#, python-format #, python-format
msgid "Deleted %s." msgid "Deleted %s."
msgstr "Eliminat %s." msgstr "Eliminat %s."
#: contrib/admin/views/main.py:342 #: contrib/admin/views/main.py:347
msgid "No fields changed." msgid "No fields changed."
msgstr "Cap camp canviat." msgstr "Cap camp canviat."
#: contrib/admin/views/main.py:345 #: contrib/admin/views/main.py:350
#, python-format #, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully." msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "S'ha modificat amb èxist el/la %(name)s \"%(obj)s." msgstr "S'ha modificat amb èxist el/la %(name)s \"%(obj)s."
#: contrib/admin/views/main.py:353 #: contrib/admin/views/main.py:358
#, python-format #, python-format
msgid "" msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr "" msgstr ""
"S'ha agregat amb èxit el/la %(name)s \"%(obj)s\". Pot editar-lo de nou abaix." "S'ha agregat amb èxit el/la %(name)s \"%(obj)s\". Pot editar-lo de nou abaix."
#: contrib/admin/views/main.py:391 #: contrib/admin/views/main.py:396
#, python-format #, python-format
msgid "Change %s" msgid "Change %s"
msgstr "Modificar %s" msgstr "Modificar %s"
#: contrib/admin/views/main.py:476 #: contrib/admin/views/main.py:481
#, python-format #, python-format
msgid "One or more %(fieldname)s in %(name)s: %(obj)s" msgid "One or more %(fieldname)s in %(name)s: %(obj)s"
msgstr "Un o més %(fieldname)s en %(name)s: %(obj)s" msgstr "Un o més %(fieldname)s en %(name)s: %(obj)s"
#: contrib/admin/views/main.py:481 #: contrib/admin/views/main.py:486
#, python-format #, python-format
msgid "One or more %(fieldname)s in %(name)s:" msgid "One or more %(fieldname)s in %(name)s:"
msgstr "Un o més %(fieldname)s en %(name)s:" msgstr "Un o més %(fieldname)s en %(name)s:"
#: contrib/admin/views/main.py:514 #: contrib/admin/views/main.py:518
#, python-format #, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "El/la %(name)s \"%(obj)s\".ha estat eliminat amb èxit." msgstr "El/la %(name)s \"%(obj)s\".ha estat eliminat amb èxit."
#: contrib/admin/views/main.py:517 #: contrib/admin/views/main.py:521
msgid "Are you sure?" msgid "Are you sure?"
msgstr "Està segur?" msgstr "Està segur?"
#: contrib/admin/views/main.py:539 #: contrib/admin/views/main.py:543
#, python-format #, python-format
msgid "Change history: %s" msgid "Change history: %s"
msgstr "Modificar històric: %s" msgstr "Modificar històric: %s"
#: contrib/admin/views/main.py:573 #: contrib/admin/views/main.py:577
#, python-format #, python-format
msgid "Select %s" msgid "Select %s"
msgstr "Seleccioni %s" msgstr "Seleccioni %s"
#: contrib/admin/views/main.py:573 #: contrib/admin/views/main.py:577
#, python-format #, python-format
msgid "Select %s to change" msgid "Select %s to change"
msgstr "Seleccioni %s per modificar" msgstr "Seleccioni %s per modificar"
#: contrib/admin/views/main.py:768 #: contrib/admin/views/main.py:772
msgid "Database error" msgid "Database error"
msgstr "Error de/en la base de dades" msgstr "Error de/en la base de dades"
@ -1697,35 +1697,35 @@ msgstr "llocs"
msgid "Logged out" msgid "Logged out"
msgstr "Sessió finalitzada" msgstr "Sessió finalitzada"
#: contrib/auth/models.py:44 contrib/auth/models.py:64 #: contrib/auth/models.py:49 contrib/auth/models.py:69
msgid "name" msgid "name"
msgstr "nom" msgstr "nom"
#: contrib/auth/models.py:46 #: contrib/auth/models.py:51
msgid "codename" msgid "codename"
msgstr "nom en clau" msgstr "nom en clau"
#: contrib/auth/models.py:49 #: contrib/auth/models.py:54
msgid "permission" msgid "permission"
msgstr "permís" msgstr "permís"
#: contrib/auth/models.py:50 contrib/auth/models.py:65 #: contrib/auth/models.py:55 contrib/auth/models.py:70
msgid "permissions" msgid "permissions"
msgstr "permissos" msgstr "permissos"
#: contrib/auth/models.py:68 #: contrib/auth/models.py:73
msgid "group" msgid "group"
msgstr "grup" msgstr "grup"
#: contrib/auth/models.py:69 contrib/auth/models.py:109 #: contrib/auth/models.py:74 contrib/auth/models.py:114
msgid "groups" msgid "groups"
msgstr "grups" msgstr "grups"
#: contrib/auth/models.py:99 #: contrib/auth/models.py:104
msgid "username" msgid "username"
msgstr "nom d'usuari" msgstr "nom d'usuari"
#: contrib/auth/models.py:99 #: contrib/auth/models.py:104
msgid "" msgid ""
"Required. 30 characters or fewer. Alphanumeric characters only (letters, " "Required. 30 characters or fewer. Alphanumeric characters only (letters, "
"digits and underscores)." "digits and underscores)."
@ -1733,23 +1733,23 @@ msgstr ""
"Requerit. 30 o menys caracters. Només caracters alfanumèrics (lletres, " "Requerit. 30 o menys caracters. Només caracters alfanumèrics (lletres, "
"dígits i guions baixos)." "dígits i guions baixos)."
#: contrib/auth/models.py:100 #: contrib/auth/models.py:105
msgid "first name" msgid "first name"
msgstr "nom propi" msgstr "nom propi"
#: contrib/auth/models.py:101 #: contrib/auth/models.py:106
msgid "last name" msgid "last name"
msgstr "cognoms" msgstr "cognoms"
#: contrib/auth/models.py:102 #: contrib/auth/models.py:107
msgid "e-mail address" msgid "e-mail address"
msgstr "adreça de correu electrònic" msgstr "adreça de correu electrònic"
#: contrib/auth/models.py:103 #: contrib/auth/models.py:108
msgid "password" msgid "password"
msgstr "contrasenya" msgstr "contrasenya"
#: contrib/auth/models.py:103 #: contrib/auth/models.py:108
msgid "" msgid ""
"Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change " "Use '[algo]$[salt]$[hexdigest]' or use the <a href=\"password/\">change "
"password form</a>." "password form</a>."
@ -1757,19 +1757,19 @@ msgstr ""
"Utilitzi '[algo]$[salt]$[hexdigest]' o el <a href=\"password/\">formulari de " "Utilitzi '[algo]$[salt]$[hexdigest]' o el <a href=\"password/\">formulari de "
"canvi de contrasenya</a>." "canvi de contrasenya</a>."
#: contrib/auth/models.py:104 #: contrib/auth/models.py:109
msgid "staff status" msgid "staff status"
msgstr "és membre del personal" msgstr "és membre del personal"
#: contrib/auth/models.py:104 #: contrib/auth/models.py:109
msgid "Designates whether the user can log into this admin site." msgid "Designates whether the user can log into this admin site."
msgstr "Indica si l'usuari pot entrar en el lloc administratiu." msgstr "Indica si l'usuari pot entrar en el lloc administratiu."
#: contrib/auth/models.py:105 #: contrib/auth/models.py:110
msgid "active" msgid "active"
msgstr "actiu" msgstr "actiu"
#: contrib/auth/models.py:105 #: contrib/auth/models.py:110
msgid "" msgid ""
"Designates whether this user can log into the Django admin. Unselect this " "Designates whether this user can log into the Django admin. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@ -1777,11 +1777,11 @@ msgstr ""
"Designa si aquest usuari pot iniciar sessió a la interfície administrativa " "Designa si aquest usuari pot iniciar sessió a la interfície administrativa "
"Djano. Deselecciona-ho enlloc de esborrar comptes d'usuari." "Djano. Deselecciona-ho enlloc de esborrar comptes d'usuari."
#: contrib/auth/models.py:106 #: contrib/auth/models.py:111
msgid "superuser status" msgid "superuser status"
msgstr "estat de superusuari" msgstr "estat de superusuari"
#: contrib/auth/models.py:106 #: contrib/auth/models.py:111
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@ -1789,15 +1789,15 @@ msgstr ""
"Designa que aquest usuari té tots els permisos sense assignar-los " "Designa que aquest usuari té tots els permisos sense assignar-los "
"explícitament." "explícitament."
#: contrib/auth/models.py:107 #: contrib/auth/models.py:112
msgid "last login" msgid "last login"
msgstr "últim inici de sessió" msgstr "últim inici de sessió"
#: contrib/auth/models.py:108 #: contrib/auth/models.py:113
msgid "date joined" msgid "date joined"
msgstr "data de creació" msgstr "data de creació"
#: contrib/auth/models.py:110 #: contrib/auth/models.py:115
msgid "" msgid ""
"In addition to the permissions manually assigned, this user will also get " "In addition to the permissions manually assigned, this user will also get "
"all permissions granted to each group he/she is in." "all permissions granted to each group he/she is in."
@ -1805,39 +1805,39 @@ msgstr ""
"Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els " "Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els "
"permissos dels grups dels que sigui membre." "permissos dels grups dels que sigui membre."
#: contrib/auth/models.py:111 #: contrib/auth/models.py:116
msgid "user permissions" msgid "user permissions"
msgstr "permissos de l'usuari" msgstr "permissos de l'usuari"
#: contrib/auth/models.py:115 #: contrib/auth/models.py:120
msgid "user" msgid "user"
msgstr "usuari" msgstr "usuari"
#: contrib/auth/models.py:116 #: contrib/auth/models.py:121
msgid "users" msgid "users"
msgstr "usuaris" msgstr "usuaris"
#: contrib/auth/models.py:122 #: contrib/auth/models.py:127
msgid "Personal info" msgid "Personal info"
msgstr "Informaciò personal" msgstr "Informaciò personal"
#: contrib/auth/models.py:123 #: contrib/auth/models.py:128
msgid "Permissions" msgid "Permissions"
msgstr "permissos" msgstr "permissos"
#: contrib/auth/models.py:124 #: contrib/auth/models.py:129
msgid "Important dates" msgid "Important dates"
msgstr "Dates importants" msgstr "Dates importants"
#: contrib/auth/models.py:125 #: contrib/auth/models.py:130
msgid "Groups" msgid "Groups"
msgstr "Grups" msgstr "Grups"
#: contrib/auth/models.py:269 #: contrib/auth/models.py:273
msgid "message" msgid "message"
msgstr "missatge" msgstr "missatge"
#: contrib/auth/models.py:282 #: contrib/auth/models.py:286
msgid "AnonymousUser" msgid "AnonymousUser"
msgstr "AnonymousUser" msgstr "AnonymousUser"
@ -1861,7 +1861,7 @@ msgstr ""
msgid "This account is inactive." msgid "This account is inactive."
msgstr "Aquest compte està inactiu" msgstr "Aquest compte està inactiu"
#: contrib/auth/forms.py:85 #: contrib/auth/forms.py:84
msgid "" msgid ""
"That e-mail address doesn't have an associated user account. Are you sure " "That e-mail address doesn't have an associated user account. Are you sure "
"you've registered?" "you've registered?"
@ -2423,7 +2423,7 @@ msgstr "L'any ha de ser posterior al 1900"
msgid "Invalid date: %s" msgid "Invalid date: %s"
msgstr "Data invàlida: %s" msgstr "Data invàlida: %s"
#: core/validators.py:149 db/models/fields/__init__.py:463 #: core/validators.py:149 db/models/fields/__init__.py:468
msgid "Enter a valid date in YYYY-MM-DD format." msgid "Enter a valid date in YYYY-MM-DD format."
msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD." msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD."
@ -2431,7 +2431,7 @@ msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD."
msgid "Enter a valid time in HH:MM format." msgid "Enter a valid time in HH:MM format."
msgstr "Introdueixi una hora vàlida en el format HH:MM." msgstr "Introdueixi una hora vàlida en el format HH:MM."
#: core/validators.py:158 db/models/fields/__init__.py:532 #: core/validators.py:158 db/models/fields/__init__.py:537
msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
msgstr "Introdueixi un data/hora vàlida en format YYYY-MM-DD HH:MM." msgstr "Introdueixi un data/hora vàlida en format YYYY-MM-DD HH:MM."
@ -2558,35 +2558,29 @@ msgstr "Si us plau, introdueixi un número decimal vàlid."
#: core/validators.py:423 #: core/validators.py:423
#, python-format #, python-format
msgid "Please enter a valid decimal number with at most %s total digit." msgid "Please enter a valid decimal number with at most %s total digit."
msgid_plural ""
"Please enter a valid decimal number with at most %s total digits." "Please enter a valid decimal number with at most %s total digits."
msgstr[0] "" msgstr ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s digit." "Si us plau, introdueixi un número decimal vàlid amb no més de %s digit."
msgstr[1] ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s digits." "Si us plau, introdueixi un número decimal vàlid amb no més de %s digits."
#: core/validators.py:426 #: core/validators.py:426
#, python-format #, python-format
msgid "" msgid ""
"Please enter a valid decimal number with a whole part of at most %s digit." "Please enter a valid decimal number with a whole part of at most %s digit."
msgid_plural ""
"Please enter a valid decimal number with a whole part of at most %s digits." "Please enter a valid decimal number with a whole part of at most %s digits."
msgstr[0] "" msgstr ""
"Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a " "Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a "
"màxim %s dígit." "màxim %s dígit."
msgstr[1] ""
"Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a " "Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a "
"màxim %s dígits." "màxim %s dígits."
#: core/validators.py:429 #: core/validators.py:429
#, python-format #, python-format
msgid "Please enter a valid decimal number with at most %s decimal place." msgid "Please enter a valid decimal number with at most %s decimal place."
msgid_plural ""
"Please enter a valid decimal number with at most %s decimal places." "Please enter a valid decimal number with at most %s decimal places."
msgstr[0] "" msgstr ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s dígit en la " "Si us plau, introdueixi un número decimal vàlid amb no més de %s dígit en la "
"part decimal." "part decimal."
msgstr[1] ""
"Si us plau, introdueixi un número decimal vàlid amb no més de %s dígits en " "Si us plau, introdueixi un número decimal vàlid amb no més de %s dígits en "
"la part decimal." "la part decimal."
@ -2983,52 +2977,51 @@ msgstr "Ja existeix un %(object)s del tipus %(type)s amb aquest %(field)s."
msgid "%(optname)s with this %(fieldname)s already exists." msgid "%(optname)s with this %(fieldname)s already exists."
msgstr "Ja existeix %(optname)s amb auqest %(fieldname)s." msgstr "Ja existeix %(optname)s amb auqest %(fieldname)s."
#: db/models/fields/__init__.py:373 #: db/models/fields/__init__.py:378
msgid "This value must be an integer." msgid "This value must be an integer."
msgstr "Aquest valor ha de ser un enter." msgstr "Aquest valor ha de ser un enter."
#: db/models/fields/__init__.py:408 #: db/models/fields/__init__.py:413
msgid "This value must be either True or False." msgid "This value must be either True or False."
msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)" msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)"
#: db/models/fields/__init__.py:429 #: db/models/fields/__init__.py:434
msgid "This field cannot be null." msgid "This field cannot be null."
msgstr "Aquest camp no pot ser null (estar buit)." msgstr "Aquest camp no pot ser null (estar buit)."
#: db/models/fields/__init__.py:592 #: db/models/fields/__init__.py:597
msgid "This value must be a decimal number." msgid "This value must be a decimal number."
msgstr "Aquest valor ha de ser un número decimal." msgstr "Aquest valor ha de ser un número decimal."
#: db/models/fields/__init__.py:695 #: db/models/fields/__init__.py:700
msgid "Enter a valid filename." msgid "Enter a valid filename."
msgstr "Introdueixi un nom de fitxer vàlid." msgstr "Introdueixi un nom de fitxer vàlid."
#: db/models/fields/__init__.py:818 #: db/models/fields/__init__.py:824
msgid "This value must be either None, True or False." msgid "This value must be either None, True or False."
msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)" msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)"
#: db/models/fields/related.py:53 #: db/models/fields/related.py:54
#, python-format #, python-format
msgid "Please enter a valid %s." msgid "Please enter a valid %s."
msgstr "Si us plau, introdueixi un %s vàlid." msgstr "Si us plau, introdueixi un %s vàlid."
#: db/models/fields/related.py:642 #: db/models/fields/related.py:640
msgid "Separate multiple IDs with commas." msgid "Separate multiple IDs with commas."
msgstr "Separi múltiples IDs amb comes." msgstr "Separi múltiples IDs amb comes."
#: db/models/fields/related.py:644 #: db/models/fields/related.py:642
msgid "" msgid ""
"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." "Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
msgstr "Premi \"Control\" o \"Command\" en un Mac per escollir més d'un." msgstr "Premi \"Control\" o \"Command\" en un Mac per escollir més d'un."
#: db/models/fields/related.py:691 #: db/models/fields/related.py:689
#, python-format #, python-format
msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid."
msgid_plural ""
"Please enter valid %(self)s IDs. The values %(value)r are invalid." "Please enter valid %(self)s IDs. The values %(value)r are invalid."
msgstr[0] "" msgstr ""
"Si us plau, introdueixi IDs de %(self)s vàlids. El valor %(value)r és " "Si us plau, introdueixi IDs de %(self)s vàlids. El valor %(value)r és "
"invàlid." "invàlid."
msgstr[1] ""
"Si us plau, introdueixi IDs de %(self)s vàlids. Els valors %(value)r són " "Si us plau, introdueixi IDs de %(self)s vàlids. Els valors %(value)r són "
"invàlids." "invàlids."

View File

@ -1,15 +1,14 @@
# translation of djangojs.po to # translation of djangojs.po to
# Spanish translation for the django-admin JS files. # Catalan translation for the django-admin JS files.
# Copyright (C) # This file is distributed under the same license as the Django package.
# This file is distributed under the same license as the PACKAGE package.
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: djangojs\n" "Project-Id-Version: djangojs\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-05-20 18:25+0200\n" "POT-Creation-Date: 2007-05-20 18:25+0200\n"
"PO-Revision-Date: 2007-05-20 18:24+0200\n" "PO-Revision-Date: 2007-06-25 17:47+0200\n"
"Last-Translator: Marc Fargas <marc@fargas.com>\n" "Last-Translator: Marc Fargas <telenieko@telenieko.com>\n"
"Language-Team: <es@li.org>\n" "Language-Team: <es@li.org>\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"

Binary file not shown.

View File

@ -0,0 +1,118 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-06-28 17:36+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -23,13 +23,13 @@ msgstr "id obiect"
#: contrib/comments/models.py:68 #: contrib/comments/models.py:68
msgid "headline" msgid "headline"
msgstr "" msgstr "titlu"
#: contrib/comments/models.py:69 contrib/comments/models.py:90 #: contrib/comments/models.py:69 contrib/comments/models.py:90
#: contrib/comments/models.py:167 #: contrib/comments/models.py:167
#, fuzzy #, fuzzy
msgid "comment" msgid "comment"
msgstr "conţinut" msgstr "comentariu"
#: contrib/comments/models.py:70 #: contrib/comments/models.py:70
msgid "rating #1" msgid "rating #1"
@ -69,20 +69,19 @@ msgstr ""
#: contrib/comments/models.py:83 contrib/comments/models.py:169 #: contrib/comments/models.py:83 contrib/comments/models.py:169
msgid "date/time submitted" msgid "date/time submitted"
msgstr "" msgstr "data/ora crearii"
#: contrib/comments/models.py:84 contrib/comments/models.py:170 #: contrib/comments/models.py:84 contrib/comments/models.py:170
msgid "is public" msgid "is public"
msgstr "" msgstr "public"
#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289
#, fuzzy
msgid "IP address" msgid "IP address"
msgstr "adresa email" msgstr "adresa ip"
#: contrib/comments/models.py:86 #: contrib/comments/models.py:86
msgid "is removed" msgid "is removed"
msgstr "" msgstr "sters"
#: contrib/comments/models.py:86 #: contrib/comments/models.py:86
msgid "" msgid ""
@ -122,7 +121,7 @@ msgstr "adresa email"
#: contrib/comments/models.py:173 #: contrib/comments/models.py:173
msgid "approved by staff" msgid "approved by staff"
msgstr "" msgstr "aprobat de echipa"
#: contrib/comments/models.py:176 #: contrib/comments/models.py:176
#, fuzzy #, fuzzy
@ -282,9 +281,8 @@ msgid "Password:"
msgstr "Parola:" msgstr "Parola:"
#: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:6
#, fuzzy
msgid "Forgotten your password?" msgid "Forgotten your password?"
msgstr "Schimbă-mi parola" msgstr "Ai uitat parola?"
#: contrib/comments/templates/comments/form.html:8 #: contrib/comments/templates/comments/form.html:8
#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/object_history.html:3
@ -338,9 +336,8 @@ msgid "Preview comment"
msgstr "permite comentarii" msgstr "permite comentarii"
#: contrib/comments/templates/comments/freeform.html:4 #: contrib/comments/templates/comments/freeform.html:4
#, fuzzy
msgid "Your name:" msgid "Your name:"
msgstr "nume utilizator" msgstr "numele dumneavoastra"
#: contrib/admin/filterspecs.py:40 #: contrib/admin/filterspecs.py:40
#, python-format #, python-format
@ -352,41 +349,39 @@ msgstr ""
#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88
#: contrib/admin/filterspecs.py:143 #: contrib/admin/filterspecs.py:143
msgid "All" msgid "All"
msgstr "" msgstr "tot"
#: contrib/admin/filterspecs.py:109 #: contrib/admin/filterspecs.py:109
msgid "Any date" msgid "Any date"
msgstr "" msgstr "orice data"
#: contrib/admin/filterspecs.py:110 #: contrib/admin/filterspecs.py:110
#, fuzzy
msgid "Today" msgid "Today"
msgstr "Luni" msgstr "Astazi"
#: contrib/admin/filterspecs.py:113 #: contrib/admin/filterspecs.py:113
msgid "Past 7 days" msgid "Past 7 days"
msgstr "" msgstr "Ultimele 7 zile"
#: contrib/admin/filterspecs.py:115 #: contrib/admin/filterspecs.py:115
msgid "This month" msgid "This month"
msgstr "" msgstr "Luna aceasta"
#: contrib/admin/filterspecs.py:117 #: contrib/admin/filterspecs.py:117
msgid "This year" msgid "This year"
msgstr "" msgstr "Anul acesta"
#: contrib/admin/filterspecs.py:143 #: contrib/admin/filterspecs.py:143
msgid "Yes" msgid "Yes"
msgstr "" msgstr "Da"
#: contrib/admin/filterspecs.py:143 #: contrib/admin/filterspecs.py:143
#, fuzzy
msgid "No" msgid "No"
msgstr "Noi." msgstr "Nu"
#: contrib/admin/filterspecs.py:150 #: contrib/admin/filterspecs.py:150
msgid "Unknown" msgid "Unknown"
msgstr "" msgstr "Necunoscut"
#: contrib/admin/models.py:16 #: contrib/admin/models.py:16
msgid "action time" msgid "action time"
@ -418,7 +413,7 @@ msgstr "intrări log"
#: contrib/admin/templatetags/admin_list.py:228 #: contrib/admin/templatetags/admin_list.py:228
msgid "All dates" msgid "All dates"
msgstr "" msgstr "Toate datele"
#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 #: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36
#: contrib/auth/forms.py:41 #: contrib/auth/forms.py:41
@ -426,6 +421,8 @@ msgid ""
"Please enter a correct username and password. Note that both fields are case-" "Please enter a correct username and password. Note that both fields are case-"
"sensitive." "sensitive."
msgstr "" msgstr ""
"Va rugam sa introduceti username-ul si parola corecta. Aveti grija deoarece"
"casutele sunt case sensitive."
#: contrib/admin/views/decorators.py:23 #: contrib/admin/views/decorators.py:23
#: contrib/admin/templates/admin/login.html:25 #: contrib/admin/templates/admin/login.html:25
@ -437,16 +434,21 @@ msgid ""
"Please log in again, because your session has expired. Don't worry: Your " "Please log in again, because your session has expired. Don't worry: Your "
"submission has been saved." "submission has been saved."
msgstr "" msgstr ""
"Va rugam sa va inregistrati din nou, deoarece sesiunea a expirat. Nu va "
"faceti griji datele au fost salvate."
#: contrib/admin/views/decorators.py:68 #: contrib/admin/views/decorators.py:68
msgid "" msgid ""
"Looks like your browser isn't configured to accept cookies. Please enable " "Looks like your browser isn't configured to accept cookies. Please enable "
"cookies, reload this page, and try again." "cookies, reload this page, and try again."
msgstr "" msgstr ""
"Se pare ca browserul dumneavostra nu este configurat sa accepte cookies. Va "
"rugam sa va setati browserul sa accepte cookies, dati un reload la pagina si "
"incercati din nou."
#: contrib/admin/views/decorators.py:82 #: contrib/admin/views/decorators.py:82
msgid "Usernames cannot contain the '@' character." msgid "Usernames cannot contain the '@' character."
msgstr "" msgstr "Username-ul nu are voie sa contina caracterul '@'."
#: contrib/admin/views/decorators.py:84 #: contrib/admin/views/decorators.py:84
#, python-format #, python-format
@ -461,61 +463,62 @@ msgstr "Administrare Django"
#: contrib/admin/views/main.py:260 #: contrib/admin/views/main.py:260
#, python-format #, python-format
msgid "The %(name)s \"%(obj)s\" was added successfully." msgid "The %(name)s \"%(obj)s\" was added successfully."
msgstr "" msgstr "%(name)s \"%(obj)s\" a fost inserat cu succes."
#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348
msgid "You may edit it again below." msgid "You may edit it again below."
msgstr "" msgstr "Va puteti edita datele din nou mai jos."
#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357
#, python-format #, python-format
msgid "You may add another %s below." msgid "You may add another %s below."
msgstr "" msgstr "Mai puteti adauga un alt %s mai jos."
#: contrib/admin/views/main.py:290 #: contrib/admin/views/main.py:290
#, fuzzy, python-format #, python-format
msgid "Add %s" msgid "Add %s"
msgstr "Adaugă" msgstr "Adaugă %s"
#: contrib/admin/views/main.py:336 #: contrib/admin/views/main.py:336
#, python-format #, python-format
msgid "Added %s." msgid "Added %s."
msgstr "" msgstr "Adaugat %s."
#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338
#: contrib/admin/views/main.py:340 #: contrib/admin/views/main.py:340
msgid "and" msgid "and"
msgstr "" msgstr "si"
#: contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:338
#, fuzzy, python-format #, python-format
msgid "Changed %s." msgid "Changed %s."
msgstr "Schimbă" msgstr "Schimbă %s."
#: contrib/admin/views/main.py:340 #: contrib/admin/views/main.py:340
#, python-format #, python-format
msgid "Deleted %s." msgid "Deleted %s."
msgstr "" msgstr "Am sters %s."
#: contrib/admin/views/main.py:343 #: contrib/admin/views/main.py:343
msgid "No fields changed." msgid "No fields changed."
msgstr "" msgstr "Nu s-a facut nicio schimbare."
#: contrib/admin/views/main.py:346 #: contrib/admin/views/main.py:346
#, python-format #, python-format
msgid "The %(name)s \"%(obj)s\" was changed successfully." msgid "The %(name)s \"%(obj)s\" was changed successfully."
msgstr "" msgstr "%(name)s \"%(obj)s\" au fost modificate cu succes."
#: contrib/admin/views/main.py:354 #: contrib/admin/views/main.py:354
#, python-format #, python-format
msgid "" msgid ""
"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below."
msgstr "" msgstr ""
"%(name)s \"%(obj)s\" au fost adaugate cu succes. Le puteti edita mai jos."
#: contrib/admin/views/main.py:392 #: contrib/admin/views/main.py:392
#, fuzzy, python-format #, python-format
msgid "Change %s" msgid "Change %s"
msgstr "Schimbă" msgstr "Schimbă %s"
#: contrib/admin/views/main.py:470 #: contrib/admin/views/main.py:470
#, python-format #, python-format
@ -530,16 +533,16 @@ msgstr ""
#: contrib/admin/views/main.py:508 #: contrib/admin/views/main.py:508
#, python-format #, python-format
msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgid "The %(name)s \"%(obj)s\" was deleted successfully."
msgstr "" msgstr "%(name)s \"%(obj)s\" au fost sterse cu succes."
#: contrib/admin/views/main.py:511 #: contrib/admin/views/main.py:511
msgid "Are you sure?" msgid "Are you sure?"
msgstr "" msgstr "Sunteti sigur?"
#: contrib/admin/views/main.py:533 #: contrib/admin/views/main.py:533
#, fuzzy, python-format #, python-format
msgid "Change history: %s" msgid "Change history: %s"
msgstr "Schimbă parola" msgstr "Schimbari facute: %s"
#: contrib/admin/views/main.py:565 #: contrib/admin/views/main.py:565
#, python-format #, python-format
@ -549,13 +552,13 @@ msgstr ""
#: contrib/admin/views/main.py:565 #: contrib/admin/views/main.py:565
#, python-format #, python-format
msgid "Select %s to change" msgid "Select %s to change"
msgstr "" msgstr "Selecteaza %s pentru schimbare"
#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286
#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294
#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 #: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297
msgid "Integer" msgid "Integer"
msgstr "" msgstr "Intreg"
#: contrib/admin/views/doc.py:278 #: contrib/admin/views/doc.py:278
msgid "Boolean (Either True or False)" msgid "Boolean (Either True or False)"
@ -564,26 +567,23 @@ msgstr ""
#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296
#, python-format #, python-format
msgid "String (up to %(maxlength)s)" msgid "String (up to %(maxlength)s)"
msgstr "" msgstr "String (pana la %(maxlength)s caractere)"
#: contrib/admin/views/doc.py:280 #: contrib/admin/views/doc.py:280
msgid "Comma-separated integers" msgid "Comma-separated integers"
msgstr "" msgstr ""
#: contrib/admin/views/doc.py:281 #: contrib/admin/views/doc.py:281
#, fuzzy
msgid "Date (without time)" msgid "Date (without time)"
msgstr "timp acţiune" msgstr "Data (fara ora)"
#: contrib/admin/views/doc.py:282 #: contrib/admin/views/doc.py:282
#, fuzzy
msgid "Date (with time)" msgid "Date (with time)"
msgstr "Dată/oră" msgstr "Data (cu ora)"
#: contrib/admin/views/doc.py:283 #: contrib/admin/views/doc.py:283
#, fuzzy
msgid "E-mail address" msgid "E-mail address"
msgstr "Adresa email:" msgstr "Adresa email"
#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287
msgid "File path" msgid "File path"
@ -603,9 +603,8 @@ msgid "Relation to parent model"
msgstr "" msgstr ""
#: contrib/admin/views/doc.py:293 #: contrib/admin/views/doc.py:293
#, fuzzy
msgid "Phone number" msgid "Phone number"
msgstr "Introduceţi un număr întreg." msgstr "Numar de telefon"
#: contrib/admin/views/doc.py:298 #: contrib/admin/views/doc.py:298
msgid "Text" msgid "Text"
@ -613,7 +612,7 @@ msgstr ""
#: contrib/admin/views/doc.py:299 #: contrib/admin/views/doc.py:299
msgid "Time" msgid "Time"
msgstr "" msgstr "Timp"
#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 #: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7
msgid "URL" msgid "URL"
@ -636,7 +635,7 @@ msgstr ""
#: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/registration/password_change_form.html:3
#: contrib/admin/templates/admin_doc/bookmarklets.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:3
msgid "Documentation" msgid "Documentation"
msgstr "" msgstr "Documentatie"
#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/object_history.html:3
#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/change_list.html:5
@ -770,9 +769,9 @@ msgid "None available"
msgstr "Indisponibil" msgstr "Indisponibil"
#: contrib/admin/templates/admin/change_list.html:11 #: contrib/admin/templates/admin/change_list.html:11
#, fuzzy, python-format #, python-format
msgid "Add %(name)s" msgid "Add %(name)s"
msgstr "Adaugă" msgstr "Adaugă %(name)s"
#: contrib/admin/templates/admin/login.html:22 #: contrib/admin/templates/admin/login.html:22
msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?" msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
@ -785,7 +784,7 @@ msgstr "Bine ai venit,"
#: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/delete_confirmation.html:9
#: contrib/admin/templates/admin/submit_line.html:3 #: contrib/admin/templates/admin/submit_line.html:3
msgid "Delete" msgid "Delete"
msgstr "" msgstr "Sterge"
#: contrib/admin/templates/admin/delete_confirmation.html:14 #: contrib/admin/templates/admin/delete_confirmation.html:14
#, python-format #, python-format
@ -814,7 +813,7 @@ msgstr "Da, sînt sigur"
#: contrib/admin/templates/admin/filter.html:2 #: contrib/admin/templates/admin/filter.html:2
#, python-format #, python-format
msgid " By %(title)s " msgid " By %(title)s "
msgstr "" msgstr " Dupa %(title)s "
#: contrib/admin/templates/admin/search_form.html:8 #: contrib/admin/templates/admin/search_form.html:8
msgid "Go" msgid "Go"
@ -827,33 +826,32 @@ msgstr ""
#: contrib/admin/templates/admin/change_form.html:30 #: contrib/admin/templates/admin/change_form.html:30
msgid "Please correct the error below." msgid "Please correct the error below."
msgid_plural "Please correct the errors below." msgid_plural "Please correct the errors below."
msgstr[0] "" msgstr[0] "Va rugam sa corectati eroarea de mai jos"
msgstr[1] "" msgstr[1] "Va rugam sa corectati erorile de mai jos"
#: contrib/admin/templates/admin/change_form.html:48 #: contrib/admin/templates/admin/change_form.html:48
msgid "Ordering" msgid "Ordering"
msgstr "" msgstr "Ordonate dupa"
#: contrib/admin/templates/admin/change_form.html:51 #: contrib/admin/templates/admin/change_form.html:51
msgid "Order:" msgid "Order:"
msgstr "" msgstr "Ordonare:"
#: contrib/admin/templates/admin/submit_line.html:4 #: contrib/admin/templates/admin/submit_line.html:4
msgid "Save as new" msgid "Save as new"
msgstr "" msgstr "Salvati ca nou"
#: contrib/admin/templates/admin/submit_line.html:5 #: contrib/admin/templates/admin/submit_line.html:5
msgid "Save and add another" msgid "Save and add another"
msgstr "" msgstr "Salvati si adaugati altul"
#: contrib/admin/templates/admin/submit_line.html:6 #: contrib/admin/templates/admin/submit_line.html:6
msgid "Save and continue editing" msgid "Save and continue editing"
msgstr "" msgstr "Salvati si continuati"
#: contrib/admin/templates/admin/submit_line.html:7 #: contrib/admin/templates/admin/submit_line.html:7
#, fuzzy
msgid "Save" msgid "Save"
msgstr "activ" msgstr "Salveaza"
#: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_done.html:4
#: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:4
@ -1133,24 +1131,20 @@ msgid "codename"
msgstr "nume cod" msgstr "nume cod"
#: contrib/auth/models.py:17 #: contrib/auth/models.py:17
#, fuzzy
msgid "permission" msgid "permission"
msgstr "Permisiune" msgstr "permisiune"
#: contrib/auth/models.py:18 contrib/auth/models.py:27 #: contrib/auth/models.py:18 contrib/auth/models.py:27
#, fuzzy
msgid "permissions" msgid "permissions"
msgstr "Permisiuni" msgstr "permisiuni"
#: contrib/auth/models.py:29 #: contrib/auth/models.py:29
#, fuzzy
msgid "group" msgid "group"
msgstr "Grup" msgstr "grup"
#: contrib/auth/models.py:30 contrib/auth/models.py:65 #: contrib/auth/models.py:30 contrib/auth/models.py:65
#, fuzzy
msgid "groups" msgid "groups"
msgstr "Grupuri" msgstr "grupuri"
#: contrib/auth/models.py:55 #: contrib/auth/models.py:55
msgid "username" msgid "username"
@ -1209,19 +1203,16 @@ msgstr ""
"permisiunile alocate fiecărui grup din care el/ea face parte." "permisiunile alocate fiecărui grup din care el/ea face parte."
#: contrib/auth/models.py:67 #: contrib/auth/models.py:67
#, fuzzy
msgid "user permissions" msgid "user permissions"
msgstr "Permisiuni" msgstr "permisiuni utilizator"
#: contrib/auth/models.py:70 #: contrib/auth/models.py:70
#, fuzzy
msgid "user" msgid "user"
msgstr "Utilizator" msgstr "utilizator"
#: contrib/auth/models.py:71 #: contrib/auth/models.py:71
#, fuzzy
msgid "users" msgid "users"
msgstr "Utilizatori" msgstr "utilizatori"
#: contrib/auth/models.py:76 #: contrib/auth/models.py:76
msgid "Personal info" msgid "Personal info"
@ -1240,15 +1231,16 @@ msgid "Groups"
msgstr "Grupuri" msgstr "Grupuri"
#: contrib/auth/models.py:219 #: contrib/auth/models.py:219
#, fuzzy
msgid "message" msgid "message"
msgstr "Mesaj" msgstr "mesaj"
#: contrib/auth/forms.py:30 #: contrib/auth/forms.py:30
msgid "" msgid ""
"Your Web browser doesn't appear to have cookies enabled. Cookies are " "Your Web browser doesn't appear to have cookies enabled. Cookies are "
"required for logging in." "required for logging in."
msgstr "" msgstr ""
"Se pare ca browserul dumneavoastra nu suporta cookies. Aveti nevoie de un "
"browser care suporta cookies ca sa va logati."
#: contrib/contenttypes/models.py:25 #: contrib/contenttypes/models.py:25
#, fuzzy #, fuzzy
@ -1277,7 +1269,7 @@ msgstr "data expirare"
#: contrib/sessions/models.py:41 #: contrib/sessions/models.py:41
msgid "session" msgid "session"
msgstr "seiune" msgstr "sesiune"
#: contrib/sessions/models.py:42 #: contrib/sessions/models.py:42
msgid "sessions" msgid "sessions"
@ -1389,7 +1381,7 @@ msgstr "Decembrie"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "jan" msgid "jan"
msgstr "" msgstr "ian"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "feb" msgid "feb"
@ -1404,17 +1396,16 @@ msgid "apr"
msgstr "" msgstr ""
#: utils/dates.py:19 #: utils/dates.py:19
#, fuzzy
msgid "may" msgid "may"
msgstr "Mai" msgstr "mai"
#: utils/dates.py:19 #: utils/dates.py:19
msgid "jun" msgid "jun"
msgstr "" msgstr "iun"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "jul" msgid "jul"
msgstr "" msgstr "iul"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "aug" msgid "aug"
@ -1430,7 +1421,7 @@ msgstr ""
#: utils/dates.py:20 #: utils/dates.py:20
msgid "nov" msgid "nov"
msgstr "" msgstr "noi"
#: utils/dates.py:20 #: utils/dates.py:20
msgid "dec" msgid "dec"
@ -1467,40 +1458,38 @@ msgstr "Dec."
#: utils/timesince.py:12 #: utils/timesince.py:12
msgid "year" msgid "year"
msgid_plural "years" msgid_plural "years"
msgstr[0] "" msgstr[0] "an"
msgstr[1] "" msgstr[1] "ani"
#: utils/timesince.py:13 #: utils/timesince.py:13
msgid "month" msgid "month"
msgid_plural "months" msgid_plural "months"
msgstr[0] "" msgstr[0] "luna"
msgstr[1] "" msgstr[1] "luni"
#: utils/timesince.py:14 #: utils/timesince.py:14
msgid "week" msgid "week"
msgid_plural "weeks" msgid_plural "weeks"
msgstr[0] "" msgstr[0] "saptamana"
msgstr[1] "" msgstr[1] "saptamani"
#: utils/timesince.py:15 #: utils/timesince.py:15
#, fuzzy
msgid "day" msgid "day"
msgid_plural "days" msgid_plural "days"
msgstr[0] "Mai" msgstr[0] "zi"
msgstr[1] "Mai" msgstr[1] "zile"
#: utils/timesince.py:16 #: utils/timesince.py:16
msgid "hour" msgid "hour"
msgid_plural "hours" msgid_plural "hours"
msgstr[0] "" msgstr[0] "ora"
msgstr[1] "" msgstr[1] "ore"
#: utils/timesince.py:17 #: utils/timesince.py:17
#, fuzzy
msgid "minute" msgid "minute"
msgid_plural "minutes" msgid_plural "minutes"
msgstr[0] "sit" msgstr[0] "minut"
msgstr[1] "sit" msgstr[1] "minute"
#: conf/global_settings.py:37 #: conf/global_settings.py:37
msgid "Bengali" msgid "Bengali"
@ -1545,7 +1534,7 @@ msgstr "Galiciană"
#: conf/global_settings.py:47 #: conf/global_settings.py:47
msgid "Hungarian" msgid "Hungarian"
msgstr "" msgstr "Ungara"
#: conf/global_settings.py:48 #: conf/global_settings.py:48
msgid "Hebrew" msgid "Hebrew"
@ -1577,7 +1566,7 @@ msgstr "Braziliană"
#: conf/global_settings.py:55 #: conf/global_settings.py:55
msgid "Romanian" msgid "Romanian"
msgstr "" msgstr "Romana"
#: conf/global_settings.py:56 #: conf/global_settings.py:56
msgid "Russian" msgid "Russian"
@ -1750,7 +1739,7 @@ msgstr[1] "Îngrijiţi-vă limbajul! Cuvintele %s nu sînt permise aici."
#: core/validators.py:236 #: core/validators.py:236
#, python-format #, python-format
msgid "This field must match the '%s' field." msgid "This field must match the '%s' field."
msgstr "" msgstr "Acest camp trebuie sa fie identic cu '%s'."
#: core/validators.py:255 #: core/validators.py:255
#, fuzzy #, fuzzy
@ -1897,9 +1886,8 @@ msgstr ""
#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265
#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553
#: forms/__init__.py:346 #: forms/__init__.py:346
#, fuzzy
msgid "This field is required." msgid "This field is required."
msgstr "Cîmpul este invalid." msgstr "Campul acesta trebuie completat obligatoriu."
#: db/models/fields/__init__.py:337 #: db/models/fields/__init__.py:337
#, fuzzy #, fuzzy
@ -1917,14 +1905,13 @@ msgid "This field cannot be null."
msgstr "Cîmpul este invalid." msgstr "Cîmpul este invalid."
#: db/models/fields/__init__.py:562 #: db/models/fields/__init__.py:562
#, fuzzy
msgid "Enter a valid filename." msgid "Enter a valid filename."
msgstr "Introduceţi o adresă de email validă." msgstr "Introduceti un nume de fisier valid."
#: db/models/fields/related.py:43 #: db/models/fields/related.py:43
#, fuzzy, python-format #, python-format
msgid "Please enter a valid %s." msgid "Please enter a valid %s."
msgstr "Introduceţi vă rog o adresă IP validă." msgstr "Introduceti va rog un %s valid."
#: db/models/fields/related.py:579 #: db/models/fields/related.py:579
#, fuzzy #, fuzzy
@ -1953,6 +1940,7 @@ msgid "Ensure your text is less than %s character."
msgid_plural "Ensure your text is less than %s characters." msgid_plural "Ensure your text is less than %s characters."
msgstr[0] "" msgstr[0] ""
msgstr[1] "" msgstr[1] ""
"Va rugam asigurati-va ca textul dumneavoastra are mai putin de %s caractere."
#: forms/__init__.py:385 #: forms/__init__.py:385
#, fuzzy #, fuzzy
@ -1966,7 +1954,7 @@ msgstr ""
#: forms/__init__.py:645 #: forms/__init__.py:645
msgid "The submitted file is empty." msgid "The submitted file is empty."
msgstr "" msgstr "Fisierul uploadat este gol"
#: forms/__init__.py:699 #: forms/__init__.py:699
#, fuzzy #, fuzzy
@ -1985,7 +1973,7 @@ msgstr "Introduceţi un număr întreg."
#: template/defaultfilters.py:379 #: template/defaultfilters.py:379
msgid "yes,no,maybe" msgid "yes,no,maybe"
msgstr "" msgstr "da,nu,poate"
#, fuzzy #, fuzzy
#~ msgid "Comments" #~ msgid "Comments"

Binary file not shown.

View File

@ -0,0 +1,118 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-06-28 17:36+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,118 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-06-28 17:36+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""

Binary file not shown.

View File

@ -0,0 +1,118 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-06-28 17:36+1000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: contrib/admin/media/js/SelectFilter2.js:33
#, perl-format
msgid "Available %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:41
msgid "Choose all"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:46
msgid "Add"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:48
msgid "Remove"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:53
#, perl-format
msgid "Chosen %s"
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:54
msgid "Select your choice(s) and click "
msgstr ""
#: contrib/admin/media/js/SelectFilter2.js:59
msgid "Clear all"
msgstr ""
#: contrib/admin/media/js/dateparse.js:32
#: contrib/admin/media/js/calendar.js:24
msgid ""
"January February March April May June July August September October November "
"December"
msgstr ""
#: contrib/admin/media/js/dateparse.js:33
msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday"
msgstr ""
#: contrib/admin/media/js/calendar.js:25
msgid "S M T W T F S"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81
msgid "Now"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51
msgid "Clock"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78
msgid "Choose a time"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82
msgid "Midnight"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83
msgid "6 a.m."
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84
msgid "Noon"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183
msgid "Cancel"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177
msgid "Today"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132
msgid "Calendar"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175
msgid "Yesterday"
msgstr ""
#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179
msgid "Tomorrow"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72
msgid "Show"
msgstr ""
#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63
msgid "Hide"
msgstr ""

View File

@ -9,7 +9,7 @@ ADMINS = (
MANAGERS = ADMINS MANAGERS = ADMINS
DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = '' # Or path to database file if using sqlite3. DATABASE_NAME = '' # Or path to database file if using sqlite3.
DATABASE_USER = '' # Not used with sqlite3. DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3. DATABASE_PASSWORD = '' # Not used with sqlite3.

View File

@ -4,10 +4,13 @@ Tools for sending email.
from django.conf import settings from django.conf import settings
from django.utils.encoding import smart_str, force_unicode from django.utils.encoding import smart_str, force_unicode
from email import Charset, Encoders
from email.MIMEText import MIMEText from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.Header import Header from email.Header import Header
from email.Utils import formatdate, parseaddr, formataddr from email.Utils import formatdate, parseaddr, formataddr
from email import Charset import mimetypes
import os import os
import smtplib import smtplib
import socket import socket
@ -18,6 +21,10 @@ import random
# some spam filters. # some spam filters.
Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8') Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8')
# Default MIME type to use on attachments (if it is not explicitly given
# and cannot be guessed).
DEFAULT_ATTACHMENT_MIME_TYPE = 'application/octet-stream'
# Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of # Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of
# seconds, which slows down the restart of the server. # seconds, which slows down the restart of the server.
class CachedDnsName(object): class CachedDnsName(object):
@ -56,7 +63,7 @@ def make_msgid(idstring=None):
class BadHeaderError(ValueError): class BadHeaderError(ValueError):
pass pass
class SafeMIMEText(MIMEText): class SafeHeaderMixin(object):
def __setitem__(self, name, val): def __setitem__(self, name, val):
"Forbids multi-line headers, to prevent header injection." "Forbids multi-line headers, to prevent header injection."
if '\n' in val or '\r' in val: if '\n' in val or '\r' in val:
@ -73,7 +80,15 @@ class SafeMIMEText(MIMEText):
val = ', '.join(result) val = ', '.join(result)
else: else:
val = Header(force_unicode(val), settings.DEFAULT_CHARSET) val = Header(force_unicode(val), settings.DEFAULT_CHARSET)
MIMEText.__setitem__(self, name, val) # Note: using super() here is safe; any __setitem__ overrides must use
# the same argument signature.
super(SafeHeaderMixin, self).__setitem__(name, val)
class SafeMIMEText(MIMEText, SafeHeaderMixin):
pass
class SafeMIMEMultipart(MIMEMultipart, SafeHeaderMixin):
pass
class SMTPConnection(object): class SMTPConnection(object):
""" """
@ -165,7 +180,12 @@ class EmailMessage(object):
""" """
A container for email information. A container for email information.
""" """
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None, connection=None): content_subtype = 'plain'
multipart_subtype = 'mixed'
encoding = None # None => use settings default
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
connection=None, attachments=None, headers=None):
""" """
Initialise a single email message (which can be sent to multiple Initialise a single email message (which can be sent to multiple
recipients). recipients).
@ -179,6 +199,8 @@ class EmailMessage(object):
self.from_email = from_email or settings.DEFAULT_FROM_EMAIL self.from_email = from_email or settings.DEFAULT_FROM_EMAIL
self.subject = subject self.subject = subject
self.body = body self.body = body
self.attachments = attachments or []
self.extra_headers = headers or {}
self.connection = connection self.connection = connection
def get_connection(self, fail_silently=False): def get_connection(self, fail_silently=False):
@ -187,7 +209,18 @@ class EmailMessage(object):
return self.connection return self.connection
def message(self): def message(self):
msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET), 'plain', settings.DEFAULT_CHARSET) encoding = self.encoding or settings.DEFAULT_CHARSET
msg = SafeMIMEText(smart_str(self.body, settings.DEFAULT_CHARSET), self.content_subtype, encoding)
if self.attachments:
body_msg = msg
msg = SafeMIMEMultipart(_subtype=self.multipart_subtype)
if self.body:
msg.attach(body_msg)
for attachment in self.attachments:
if isinstance(attachment, MIMEBase):
msg.attach(attachment)
else:
msg.attach(self._create_attachment(*attachment))
msg['Subject'] = self.subject msg['Subject'] = self.subject
msg['From'] = self.from_email msg['From'] = self.from_email
msg['To'] = ', '.join(self.to) msg['To'] = ', '.join(self.to)
@ -195,6 +228,8 @@ class EmailMessage(object):
msg['Message-ID'] = make_msgid() msg['Message-ID'] = make_msgid()
if self.bcc: if self.bcc:
msg['Bcc'] = ', '.join(self.bcc) msg['Bcc'] = ', '.join(self.bcc)
for name, value in self.extra_headers.items():
msg[name] = value
return msg return msg
def recipients(self): def recipients(self):
@ -208,6 +243,61 @@ class EmailMessage(object):
"""Send the email message.""" """Send the email message."""
return self.get_connection(fail_silently).send_messages([self]) return self.get_connection(fail_silently).send_messages([self])
def attach(self, filename=None, content=None, mimetype=None):
"""
Attaches a file with the given filename and content. The filename can
be omitted (useful for multipart/alternative messages) and the mimetype
is guessed, if not provided.
If the first parameter is a MIMEBase subclass it is inserted directly
into the resulting message attachments.
"""
if isinstance(filename, MIMEBase):
assert content == mimetype == None
self.attachements.append(filename)
else:
assert content is not None
self.attachments.append((filename, content, mimetype))
def attach_file(self, path, mimetype=None):
"""Attaches a file from the filesystem."""
filename = os.path.basename(path)
content = open(path, 'rb').read()
self.attach(filename, content, mimetype)
def _create_attachment(self, filename, content, mimetype=None):
"""
Convert the filename, content, mimetype triple into a MIME attachment
object.
"""
if mimetype is None:
mimetype, _ = mimetypes.guess_type(filename)
if mimetype is None:
mimetype = DEFAULT_ATTACHMENT_MIME_TYPE
basetype, subtype = mimetype.split('/', 1)
if basetype == 'text':
attachment = SafeMIMEText(content, subtype, settings.DEFAULT_CHARSET)
else:
# Encode non-text attachments with base64.
attachment = MIMEBase(basetype, subtype)
attachment.set_payload(content)
Encoders.encode_base64(attachment)
if filename:
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
return attachment
class EmailMultiAlternatives(EmailMessage):
"""
A version of EmailMessage that makes it easy to send multipart/alternative
messages. For example, including text and HTML versions of the text is
made easier.
"""
multipart_subtype = 'alternative'
def attach_alternative(self, content, mimetype=None):
"""Attach an alternative content representation."""
self.attach(content=content, mimetype=mimetype)
def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None): def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None):
""" """
Easy wrapper for sending a single message to a recipient list. All members Easy wrapper for sending a single message to a recipient list. All members

View File

@ -202,7 +202,7 @@ class RegexURLResolver(object):
self._reverse_dict = {} self._reverse_dict = {}
def _get_reverse_dict(self): def _get_reverse_dict(self):
if not self._reverse_dict: if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'):
for pattern in reversed(self.urlconf_module.urlpatterns): for pattern in reversed(self.urlconf_module.urlpatterns):
if isinstance(pattern, RegexURLResolver): if isinstance(pattern, RegexURLResolver):
for key, value in pattern.reverse_dict.iteritems(): for key, value in pattern.reverse_dict.iteritems():

View File

@ -41,11 +41,16 @@ dictfetchall = complain
get_last_insert_id = complain get_last_insert_id = complain
get_date_extract_sql = complain get_date_extract_sql = complain
get_date_trunc_sql = complain get_date_trunc_sql = complain
get_datetime_cast_sql = complain
get_limit_offset_sql = complain get_limit_offset_sql = complain
get_random_function_sql = complain get_random_function_sql = complain
get_deferrable_sql = complain get_deferrable_sql = complain
get_fulltext_search_sql = complain get_fulltext_search_sql = complain
get_drop_foreignkey_sql = complain get_drop_foreignkey_sql = complain
get_pk_default_value = complain
get_max_name_length = ignore
get_start_transaction_sql = complain
get_autoinc_sql = complain
get_sql_flush = complain get_sql_flush = complain
get_sql_sequence_reset = complain get_sql_sequence_reset = complain

View File

@ -247,6 +247,8 @@ OPERATOR_MAPPING = {
'iexact': 'LIKE %s', 'iexact': 'LIKE %s',
'contains': 'LIKE BINARY %s', 'contains': 'LIKE BINARY %s',
'icontains': 'LIKE %s', 'icontains': 'LIKE %s',
'regex': 'REGEXP BINARY %s',
'iregex': 'REGEXP %s',
'gt': '> %s', 'gt': '> %s',
'gte': '>= %s', 'gte': '>= %s',
'lt': '< %s', 'lt': '< %s',

View File

@ -250,6 +250,8 @@ OPERATOR_MAPPING = {
'iexact': 'LIKE %s', 'iexact': 'LIKE %s',
'contains': 'LIKE BINARY %s', 'contains': 'LIKE BINARY %s',
'icontains': 'LIKE %s', 'icontains': 'LIKE %s',
'regex': 'REGEXP BINARY %s',
'iregex': 'REGEXP %s',
'gt': '> %s', 'gt': '> %s',
'gte': '>= %s', 'gte': '>= %s',
'lt': '< %s', 'lt': '< %s',

View File

@ -300,6 +300,8 @@ OPERATOR_MAPPING = {
'iexact': 'ILIKE %s', 'iexact': 'ILIKE %s',
'contains': 'LIKE %s', 'contains': 'LIKE %s',
'icontains': 'ILIKE %s', 'icontains': 'ILIKE %s',
'regex': '~ %s',
'iregex': '~* %s',
'gt': '> %s', 'gt': '> %s',
'gte': '>= %s', 'gte': '>= %s',
'lt': '< %s', 'lt': '< %s',

View File

@ -229,6 +229,8 @@ OPERATOR_MAPPING = {
'iexact': 'ILIKE %s', 'iexact': 'ILIKE %s',
'contains': 'LIKE %s', 'contains': 'LIKE %s',
'icontains': 'ILIKE %s', 'icontains': 'ILIKE %s',
'regex': '~ %s',
'iregex': '~* %s',
'gt': '> %s', 'gt': '> %s',
'gte': '>= %s', 'gte': '>= %s',
'lt': '< %s', 'lt': '< %s',

View File

@ -56,9 +56,10 @@ class DatabaseWrapper(local):
} }
kwargs.update(self.options) kwargs.update(self.options)
self.connection = Database.connect(**kwargs) self.connection = Database.connect(**kwargs)
# Register extract and date_trunc functions. # Register extract, date_trunc, and regexp functions.
self.connection.create_function("django_extract", 2, _sqlite_extract) self.connection.create_function("django_extract", 2, _sqlite_extract)
self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc) self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)
self.connection.create_function("regexp", 2, _sqlite_regexp)
cursor = self.connection.cursor(factory=SQLiteCursorWrapper) cursor = self.connection.cursor(factory=SQLiteCursorWrapper)
if settings.DEBUG: if settings.DEBUG:
return util.CursorDebugWrapper(cursor, self) return util.CursorDebugWrapper(cursor, self)
@ -206,6 +207,13 @@ def _sqlite_date_trunc(lookup_type, dt):
elif lookup_type == 'day': elif lookup_type == 'day':
return "%i-%02i-%02i 00:00:00" % (dt.year, dt.month, dt.day) return "%i-%02i-%02i 00:00:00" % (dt.year, dt.month, dt.day)
def _sqlite_regexp(re_pattern, re_string):
import re
try:
return bool(re.search(re_pattern, re_string))
except:
return False
# SQLite requires LIKE statements to include an ESCAPE clause if the value # SQLite requires LIKE statements to include an ESCAPE clause if the value
# being escaped has a percent or underscore in it. # being escaped has a percent or underscore in it.
# See http://www.sqlite.org/lang_expr.html for an explanation. # See http://www.sqlite.org/lang_expr.html for an explanation.
@ -214,6 +222,8 @@ OPERATOR_MAPPING = {
'iexact': "LIKE %s ESCAPE '\\'", 'iexact': "LIKE %s ESCAPE '\\'",
'contains': "LIKE %s ESCAPE '\\'", 'contains': "LIKE %s ESCAPE '\\'",
'icontains': "LIKE %s ESCAPE '\\'", 'icontains': "LIKE %s ESCAPE '\\'",
'regex': 'REGEXP %s',
'iregex': "REGEXP '(?i)' || %s",
'gt': '> %s', 'gt': '> %s',
'gte': '>= %s', 'gte': '>= %s',
'lt': '< %s', 'lt': '< %s',

View File

@ -175,7 +175,7 @@ class Field(object):
def get_db_prep_lookup(self, lookup_type, value): def get_db_prep_lookup(self, lookup_type, value):
"Returns field's value prepared for database lookup." "Returns field's value prepared for database lookup."
if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'): if lookup_type in ('exact', 'regex', 'iregex', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'):
return [value] return [value]
elif lookup_type in ('range', 'in'): elif lookup_type in ('range', 'in'):
return value return value
@ -801,6 +801,7 @@ class IntegerField(Field):
return super(IntegerField, self).formfield(**defaults) return super(IntegerField, self).formfield(**defaults)
class IPAddressField(Field): class IPAddressField(Field):
empty_strings_allowed = False
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
kwargs['maxlength'] = 15 kwargs['maxlength'] = 15
Field.__init__(self, *args, **kwargs) Field.__init__(self, *args, **kwargs)

View File

@ -1,3 +1,4 @@
from django.conf import settings
from django.db import backend, connection, transaction from django.db import backend, connection, transaction
from django.db.models.fields import DateField, FieldDoesNotExist from django.db.models.fields import DateField, FieldDoesNotExist
from django.db.models import signals, loading from django.db.models import signals, loading
@ -23,6 +24,7 @@ QUERY_TERMS = (
'gt', 'gte', 'lt', 'lte', 'in', 'gt', 'gte', 'lt', 'lte', 'in',
'startswith', 'istartswith', 'endswith', 'iendswith', 'startswith', 'istartswith', 'endswith', 'iendswith',
'range', 'year', 'month', 'day', 'isnull', 'search', 'range', 'year', 'month', 'day', 'isnull', 'search',
'regex', 'iregex',
) )
# Size of each "chunk" for get_iterator calls. # Size of each "chunk" for get_iterator calls.
@ -798,6 +800,15 @@ def get_where_clause(lookup_type, table_prefix, field_name, value):
return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or '')) return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or ''))
elif lookup_type == 'search': elif lookup_type == 'search':
return backend.get_fulltext_search_sql(table_prefix + field_name) return backend.get_fulltext_search_sql(table_prefix + field_name)
elif lookup_type in ('regex', 'iregex'):
if settings.DATABASE_ENGINE == 'oracle':
if lookup_type == 'regex':
match_option = 'c'
else:
match_option = 'i'
return "REGEXP_LIKE(%s%s, %s, '%s')" % (table_prefix, field_name, cast_sql, match_option)
else:
raise NotImplementedError
raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type) raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type)
def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0): def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0):

View File

@ -214,7 +214,7 @@ class HttpResponse(object):
status_code = 200 status_code = 200
def __init__(self, content='', mimetype=None): def __init__(self, content='', mimetype=None, status=None):
from django.conf import settings from django.conf import settings
self._charset = settings.DEFAULT_CHARSET self._charset = settings.DEFAULT_CHARSET
if not mimetype: if not mimetype:
@ -227,6 +227,8 @@ class HttpResponse(object):
self._is_string = True self._is_string = True
self.headers = {'Content-Type': mimetype} self.headers = {'Content-Type': mimetype}
self.cookies = SimpleCookie() self.cookies = SimpleCookie()
if status:
self.status_code = status
def __str__(self): def __str__(self):
"Full HTTP message, including headers" "Full HTTP message, including headers"

View File

@ -482,17 +482,18 @@ class ComboField(Field):
class MultiValueField(Field): class MultiValueField(Field):
""" """
A Field that is composed of multiple Fields. A Field that aggregates the logic of multiple Fields.
Its clean() method takes a "decompressed" list of values. Each value in Its clean() method takes a "decompressed" list of values, which are then
cleaned into a single value according to self.fields. Each value in
this list is cleaned by the corresponding field -- the first value is this list is cleaned by the corresponding field -- the first value is
cleaned by the first field, the second value is cleaned by the second cleaned by the first field, the second value is cleaned by the second
field, etc. Once all fields are cleaned, the list of clean values is field, etc. Once all fields are cleaned, the list of clean values is
"compressed" into a single value. "compressed" into a single value.
Subclasses should implement compress(), which specifies how a list of Subclasses should not have to implement clean(). Instead, they must
valid values should be converted to a single value. Subclasses should not implement compress(), which takes a list of valid values and returns a
have to implement clean(). "compressed" version of those values -- a single value.
You'll probably want to use this with MultiWidget. You'll probably want to use this with MultiWidget.
""" """

View File

@ -304,19 +304,28 @@ class MultiWidget(Widget):
""" """
A widget that is composed of multiple widgets. A widget that is composed of multiple widgets.
Its render() method takes a "decompressed" list of values, not a single Its render() method is different than other widgets', because it has to
value. Each value in this list is rendered in the corresponding widget -- figure out how to split a single value for display in multiple widgets.
the first value is rendered in the first widget, the second value is The ``value`` argument can be one of two things:
rendered in the second widget, etc.
Subclasses should implement decompress(), which specifies how a single * A list.
value should be converted to a list of values. Subclasses should not * A normal value (e.g., a string) that has been "compressed" from
have to implement clean(). a list of values.
In the second case -- i.e., if the value is NOT a list -- render() will
first "decompress" the value into a list before rendering it. It does so by
calling the decompress() method, which MultiWidget subclasses must
implement. This method takes a single "compressed" value and returns a
list.
When render() does its HTML rendering, each value in the list is rendered
with the corresponding widget -- the first value is rendered in the first
widget, the second value is rendered in the second widget, etc.
Subclasses may implement format_output(), which takes the list of rendered Subclasses may implement format_output(), which takes the list of rendered
widgets and returns HTML that formats them any way you'd like. widgets and returns a string of HTML that formats them any way you'd like.
You'll probably want to use this with MultiValueField. You'll probably want to use this class with MultiValueField.
""" """
def __init__(self, widgets, attrs=None): def __init__(self, widgets, attrs=None):
self.widgets = [isinstance(w, type) and w() or w for w in widgets] self.widgets = [isinstance(w, type) and w() or w for w in widgets]
@ -351,6 +360,13 @@ class MultiWidget(Widget):
return [widget.value_from_datadict(data, name + '_%s' % i) for i, widget in enumerate(self.widgets)] return [widget.value_from_datadict(data, name + '_%s' % i) for i, widget in enumerate(self.widgets)]
def format_output(self, rendered_widgets): def format_output(self, rendered_widgets):
"""
Given a list of rendered widgets (as strings), returns a Unicode string
representing the HTML for the whole lot.
This hook allows you to format the HTML design of the widgets, if
needed.
"""
return u''.join(rendered_widgets) return u''.join(rendered_widgets)
def decompress(self, value): def decompress(self, value):

View File

@ -325,7 +325,7 @@ Manually checking a user's password
If you'd like to manually authenticate a user by comparing a If you'd like to manually authenticate a user by comparing a
plain-text password to the hashed password in the database, use the plain-text password to the hashed password in the database, use the
convenience function `django.contrib.auth.models.check_password`. It convenience function ``django.contrib.auth.models.check_password``. It
takes two arguments: the plain-text password to check, and the full takes two arguments: the plain-text password to check, and the full
value of a user's ``password`` field in the database to check against, value of a user's ``password`` field in the database to check against,
and returns ``True`` if they match, ``False`` otherwise. and returns ``True`` if they match, ``False`` otherwise.
@ -461,7 +461,7 @@ block::
Other built-in views Other built-in views
-------------------- --------------------
In addition to the `login` view, the authentication system includes a In addition to the ``login`` view, the authentication system includes a
few other useful built-in views: few other useful built-in views:
``django.contrib.auth.views.logout`` ``django.contrib.auth.views.logout``

View File

@ -383,6 +383,65 @@ Model style
('F', 'Female'), ('F', 'Female'),
) )
Documentation style
===================
We place a high importance on consistency and readability of documentation.
(After all, Django was created in a journalism environment!)
Guidelines for ReST files
-------------------------
These guidelines regulate the format of our ReST documentation:
* In section titles, capitalize only initial words and proper nouns.
* Wrap the documentation at 80 characters wide, unless a code example
is significantly less readable when split over two lines, or for another
good reason.
Commonly used terms
-------------------
Here are some style guidelines on commonly used terms throughout the
documentation:
* **Django** -- when referring to the framework, capitalize Django. It is
lowercase only in Python code and in the djangoproject.com logo.
* **e-mail** -- it has a hyphen.
* **MySQL**
* **PostgreSQL**
* **Python** -- when referring to the language, capitalize Python.
* **realize**, **customize**, **initialize**, etc. -- use the American
"ize" suffix, not "ise."
* **SQLite**
* **subclass** -- it's a single word without a hyphen, both as a verb
("subclass that model") and as a noun ("create a subclass").
* **Web**, **World Wide Web**, **the Web** -- note Web is always
capitalized when referring to the World Wide Web.
* **Web site** -- use two words, with Web capitalized.
Django-specific terminology
---------------------------
* **model** -- it's not capitalized.
* **template** -- it's not capitalized.
* **URLconf** -- use three capitalized letters, with no space before
"conf."
* **view** -- it's not capitalized.
Committing code Committing code
=============== ===============

View File

@ -1173,6 +1173,58 @@ like ``contains`` but is significantly faster due to full-text indexing.
Note this is only available in MySQL and requires direct manipulation of the Note this is only available in MySQL and requires direct manipulation of the
database to add the full-text index. database to add the full-text index.
regex
~~~~~
**New in Django development version**
Case-sensitive regular expression match.
The regular expression syntax is that of the database backend in use. In the
case of SQLite, which doesn't natively support regular-expression lookups, the
syntax is that of Python's ``re`` module.
Example::
Entry.objects.get(title__regex=r'^(An?|The) +')
SQL equivalents::
SELECT ... WHERE title REGEXP BINARY '^(An?|The) +'; -- MySQL
SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'c'); -- Oracle
SELECT ... WHERE title ~ '^(An?|The) +'; -- PostgreSQL
SELECT ... WHERE title REGEXP '^(An?|The) +'; -- SQLite
Using raw strings (e.g., ``r'foo'`` instead of ``'foo'``) for passing in the
regular expression syntax is recommended.
Regular expression matching is not supported on the ``ado_mssql`` backend.
It will raise a ``NotImplementedError`` at runtime.
iregex
~~~~~~
**New in Django development version**
Case-insensitive regular expression match.
Example::
Entry.objects.get(title__iregex=r'^(an?|the) +')
SQL equivalents::
SELECT ... WHERE title REGEXP '^(an?|the) +'; -- MySQL
SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'i'); -- Oracle
SELECT ... WHERE title ~* '^(an?|the) +'; -- PostgreSQL
SELECT ... WHERE title REGEXP '(?i)^(an?|the) +'; -- SQLite
Default lookups are exact Default lookups are exact
------------------------- -------------------------
@ -1779,7 +1831,7 @@ use the default manager, or if you want to search a list of related objects,
you can provide ``get_object_or_404()`` with a manager object instead. you can provide ``get_object_or_404()`` with a manager object instead.
For example:: For example::
# Get the author of blog instance `e` with a name of 'Fred' # Get the author of blog instance e with a name of 'Fred'
a = get_object_or_404(e.authors, name='Fred') a = get_object_or_404(e.authors, name='Fred')
# Use a custom manager 'recent_entries' in the search for an # Use a custom manager 'recent_entries' in the search for an

View File

@ -513,7 +513,7 @@ Example usage::
Verbosity determines the amount of notification and debug information that Verbosity determines the amount of notification and debug information that
will be printed to the console. '0' is no output, '1' is normal output, will be printed to the console. '0' is no output, '1' is normal output,
and `2` is verbose output. and ``2`` is verbose output.
--adminmedia --adminmedia
------------ ------------

View File

@ -28,9 +28,9 @@ settings, if set, are used to authenticate to the SMTP server, and the
.. note:: .. note::
The character set of e-mail sent with ``django.core.mail`` will be set to The character set of e-mail sent with ``django.core.mail`` will be set to
the value of your `DEFAULT_CHARSET setting`_. the value of your `DEFAULT_CHARSET`_ setting.
.. _DEFAULT_CHARSET setting: ../settings/#default-charset .. _DEFAULT_CHARSET: ../settings/#default-charset
.. _EMAIL_HOST: ../settings/#email-host .. _EMAIL_HOST: ../settings/#email-host
.. _EMAIL_PORT: ../settings/#email-port .. _EMAIL_PORT: ../settings/#email-port
.. _EMAIL_HOST_USER: ../settings/#email-host-user .. _EMAIL_HOST_USER: ../settings/#email-host-user
@ -198,27 +198,58 @@ e-mail, you can subclass these two classes to suit your needs.
.. note:: .. note::
Not all features of the ``EmailMessage`` class are available through the Not all features of the ``EmailMessage`` class are available through the
``send_mail()`` and related wrapper functions. If you wish to use advanced ``send_mail()`` and related wrapper functions. If you wish to use advanced
features, such as BCC'ed recipients or multi-part e-mail, you'll need to features, such as BCC'ed recipients, file attachments, or multi-part
create ``EmailMessage`` instances directly. e-mail, you'll need to create ``EmailMessage`` instances directly.
This is a design feature. ``send_mail()`` and related functions were
originally the only interface Django provided. However, the list of
parameters they accepted was slowly growing over time. It made sense to
move to a more object-oriented design for e-mail messages and retain the
original functions only for backwards compatibility.
In general, ``EmailMessage`` is responsible for creating the e-mail message In general, ``EmailMessage`` is responsible for creating the e-mail message
itself. ``SMTPConnection`` is responsible for the network connection side of itself. ``SMTPConnection`` is responsible for the network connection side of
the operation. This means you can reuse the same connection (an the operation. This means you can reuse the same connection (an
``SMTPConnection`` instance) for multiple messages. ``SMTPConnection`` instance) for multiple messages.
The ``EmailMessage`` class is initialized as follows:: E-mail messages
---------------
email = EmailMessage(subject, body, from_email, to, bcc, connection) The ``EmailMessage`` class is initialized with the following parameters (in
the given order, if positional arguments are used). All parameters are
optional and can be set at any time prior to calling the ``send()`` method.
All of these parameters are optional. If ``from_email`` is omitted, the value * ``subject``: The subject line of the e-mail.
from ``settings.DEFAULT_FROM_EMAIL`` is used. Both the ``to`` and ``bcc``
parameters are lists of addresses, as strings. * ``body``: The body text. This should be a plain text message.
* ``from_email``: The sender's address. Both ``fred@example.com`` and
``Fred <fred@example.com>`` forms are legal. If omitted, the
``DEFAULT_FROM_EMAIL`` setting is used.
* ``to``: A list or tuple of recipient addresses.
* ``bcc``: A list or tuple of addresses used in the "Bcc" header when
sending the e-mail.
* ``connection``: An ``SMTPConnection`` instance. Use this parameter if
you want to use the same conneciton for multiple messages. If omitted, a
new connection is created when ``send()`` is called.
* ``attachments``: A list of attachments to put on the message. These can
be either ``email.MIMEBase.MIMEBase`` instances, or ``(filename,
content, mimetype)`` triples.
* ``headers``: A dictionary of extra headers to put on the message. The
keys are the header name, values are the header values. It's up to the
caller to ensure header names and values are in the correct format for
an e-mail message.
For example:: For example::
email = EmailMessage('Hello', 'Body goes here', 'from@example.com', email = EmailMessage('Hello', 'Body goes here', 'from@example.com',
['to1@example.com', 'to2@example.com'], ['to1@example.com', 'to2@example.com'], ['bcc@example.com'],
['bcc@example.com']) headers = {'Reply-To': 'another@example.com'})
The class has the following methods: The class has the following methods:
@ -227,18 +258,83 @@ The class has the following methods:
if none already exists. if none already exists.
* ``message()`` constructs a ``django.core.mail.SafeMIMEText`` object (a * ``message()`` constructs a ``django.core.mail.SafeMIMEText`` object (a
sub-class of Python's ``email.MIMEText.MIMEText`` class) holding the subclass of Python's ``email.MIMEText.MIMEText`` class) or a
message to be sent. If you ever need to extend the `EmailMessage` class, ``django.core.mail.SafeMIMEMultipart`` object holding the
you'll probably want to override this method to put the content you wish message to be sent. If you ever need to extend the ``EmailMessage`` class,
you'll probably want to override this method to put the content you want
into the MIME object. into the MIME object.
* ``recipients()`` returns a list of all the recipients of the message, * ``recipients()`` returns a list of all the recipients of the message,
whether they're recorded in the ``to`` or ``bcc`` attributes. This is whether they're recorded in the ``to`` or ``bcc`` attributes. This is
another method you might need to override when sub-classing, because the another method you might need to override when subclassing, because the
SMTP server needs to be told the full list of recipients when the message SMTP server needs to be told the full list of recipients when the message
is sent. If you add another way to specify recipients in your class, they is sent. If you add another way to specify recipients in your class, they
need to be returned from this method as well. need to be returned from this method as well.
* ``attach()`` creates a new file attachment and adds it to the message.
There are two ways to call ``attach()``:
* You can pass it a single argument that is an
``email.MIMBase.MIMEBase`` instance. This will be inserted directly
into the resulting message.
* Alternatively, you can pass ``attach()`` three arguments:
``filename``, ``content`` and ``mimetype``. ``filename`` is the name
of the file attachment as it will appear in the e-mail, ``content`` is
the data that will be contained inside the attachment and
``mimetype`` is the optional MIME type for the attachment. If you
omit ``mimetype``, the MIME content type will be guessed from the
filename of the attachment.
For example::
message.attach('design.png', img_data, 'image/png')
* ``attach_file()`` creates a new attachment using a file from your
filesystem. Call it with the path of the file to attach and, optionally,
the MIME type to use for the attachment. If the MIME type is omitted, it
will be guessed from the filename. The simplest use would be::
message.attach_file('/images/weather_map.png')
Sending alternative content types
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
It can be useful to include multiple versions of the content in an e-mail;
the classic example is to send both text and HTML versions of a message. With
Django's e-mail library, you can do this using the ``EmailMultiAlternatives``
class. This subclass of ``EmailMessage`` has an ``attach_alternative()`` method
for including extra versions of the message body in the e-mail. All the other
methods (including the class initialization) are inherited directly from
``EmailMessage``.
To send a text and HTML combination, you could write::
from django.core.mail import EmailMultiAlternatives
subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.'
msg = EmailMultiAlternatives(subject, text_content, from_email, to)
msg.attach_alternative(html_content, "text/html")
msg.send()
By default, the MIME type of the ``body`` parameter in an ``EmailMessage`` is
``"text/plain"``. It is good practice to leave this alone, because it
guarantees that any recipient will be able to read the e-mail, regardless of
their mail client. However, if you are confident that your recipients can
handle an alternative content type, you can use the ``content_subtype``
attribute on the ``EmailMessage`` class to change the main content type. The
major type will always be ``"text"``, but you can change it to the subtype. For
example::
msg = EmailMessage(subject, html_content, from_email, to)
msg.content_subtype = "html" # Main content is now text/html
msg.send()
SMTP network connections
------------------------
The ``SMTPConnection`` class is initialized with the host, port, username and The ``SMTPConnection`` class is initialized with the host, port, username and
password for the SMTP server. If you don't specify one or more of those password for the SMTP server. If you don't specify one or more of those
options, they are read from your settings file. options, they are read from your settings file.

View File

@ -104,7 +104,7 @@ Lawrence, Kansas, USA.
`Wilson Miner`_ `Wilson Miner`_
Wilson's design-fu makes us all look like rock stars. By day, he's an Wilson's design-fu makes us all look like rock stars. By day, he's an
interactive designer for `Apple`. Don't ask him what he's working on, or interactive designer for `Apple`_. Don't ask him what he's working on, or
he'll have to kill you. He lives in San Francisco. he'll have to kill you. He lives in San Francisco.
On IRC, Wilson goes by ``wilsonian``. On IRC, Wilson goes by ``wilsonian``.

View File

@ -754,10 +754,10 @@ If the results are paginated, the context will contain these extra variables:
* ``previous``: The previous page number, as an integer. This is 1-based. * ``previous``: The previous page number, as an integer. This is 1-based.
* `last_on_page`: The number of the * ``last_on_page``: The number of the
last result on the current page. This is 1-based. last result on the current page. This is 1-based.
* `first_on_page`: The number of the * ``first_on_page``: The number of the
first result on the current page. This is 1-based. first result on the current page. This is 1-based.
* ``pages``: The total number of pages, as an integer. * ``pages``: The total number of pages, as an integer.

View File

@ -48,7 +48,8 @@ Get your database running
If you plan to use Django's database API functionality, you'll need to If you plan to use Django's database API functionality, you'll need to
make sure a database server is running. Django works with PostgreSQL_, make sure a database server is running. Django works with PostgreSQL_,
MySQL_ and SQLite_. MySQL_, Oracle_ and SQLite_ (the latter doesn't require a separate server to
be running).
Additionally, you'll need to make sure your Python database bindings are Additionally, you'll need to make sure your Python database bindings are
installed. installed.
@ -76,6 +77,7 @@ installed.
.. _pysqlite: http://initd.org/tracker/pysqlite .. _pysqlite: http://initd.org/tracker/pysqlite
.. _MySQL backend: ../databases/ .. _MySQL backend: ../databases/
.. _cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/ .. _cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/
.. _Oracle: http://www.oracle.com/
Remove any old versions of Django Remove any old versions of Django
================================= =================================

View File

@ -18,7 +18,7 @@ You'll need to tell Django what your database connection parameters are, and
what the name of the database is. Do that by editing these settings in your what the name of the database is. Do that by editing these settings in your
`settings file`_: `settings file`_:
* `DATABASE_NAME` * `DATABASE_NAME`_
* `DATABASE_ENGINE`_ * `DATABASE_ENGINE`_
* `DATABASE_USER`_ * `DATABASE_USER`_
* `DATABASE_PASSWORD`_ * `DATABASE_PASSWORD`_

View File

@ -493,9 +493,9 @@ possible values for "no data;" Django convention is to use the empty
string, not ``NULL``. string, not ``NULL``.
.. note:: .. note::
Due to database limitations, when using the Oracle backend the When using the Oracle database backend, the ``null=True`` option will
``null=True`` option will be coerced for string-based fields that can be coerced for string-based fields that can blank, and the value
blank, and the value ``NULL`` will be stored to denote the empty string. ``NULL`` will be stored to denote the empty string.
``blank`` ``blank``
~~~~~~~~~ ~~~~~~~~~
@ -594,9 +594,12 @@ statement for this field.
``db_tablespace`` ``db_tablespace``
~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
If this field is indexed, the name of the database tablespace to use for the **New in Django development version**
index. The default is the ``db_tablespace`` of the model, if any. If the
backend doesn't support tablespaces, this option is ignored. The name of the database tablespace to use for this field's index, if
indeed this field is indexed. The default is the ``db_tablespace`` of
the model, if any. If the backend doesn't support tablespaces, this
option is ignored.
``default`` ``default``
~~~~~~~~~~~ ~~~~~~~~~~~
@ -1011,6 +1014,8 @@ that's OK. Django quotes column and table names behind the scenes.
``db_tablespace`` ``db_tablespace``
----------------- -----------------
**New in Django development version**
The name of the database tablespace to use for the model. If the backend The name of the database tablespace to use for the model. If the backend
doesn't support tablespaces, this option is ignored. doesn't support tablespaces, this option is ignored.

View File

@ -28,7 +28,7 @@ The following changes may require you to update your code when you switch from
Due to a bug in older versions of the ``MySQLdb`` Python module (which Due to a bug in older versions of the ``MySQLdb`` Python module (which
Django uses to connect to MySQL databases), Django's MySQL backend now Django uses to connect to MySQL databases), Django's MySQL backend now
requires version 1.2.1p2 or higher of `MySQLdb`, and will raise requires version 1.2.1p2 or higher of ``MySQLdb``, and will raise
exceptions if you attempt to use an older version. exceptions if you attempt to use an older version.
If you're currently unable to upgrade your copy of ``MySQLdb`` to meet If you're currently unable to upgrade your copy of ``MySQLdb`` to meet

View File

@ -48,12 +48,12 @@ Subset of fields
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
If you only want a subset of fields to be serialized, you can If you only want a subset of fields to be serialized, you can
specify a `fields` argument to the serializer:: specify a ``fields`` argument to the serializer::
from django.core import serializers from django.core import serializers
data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size')) data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size'))
In this example, only the `name` and `size` attributes of each model will In this example, only the ``name`` and ``size`` attributes of each model will
be serialized. be serialized.
.. note:: .. note::

View File

@ -342,7 +342,7 @@ If ``TEMPLATE_CONTEXT_PROCESSORS`` contains this processor, every
* ``user`` -- An ``auth.User`` instance representing the currently * ``user`` -- An ``auth.User`` instance representing the currently
logged-in user (or an ``AnonymousUser`` instance, if the client isn't logged-in user (or an ``AnonymousUser`` instance, if the client isn't
logged in). See the `user authentication docs`. logged in). See the `user authentication docs`_.
* ``messages`` -- A list of messages (as strings) for the currently * ``messages`` -- A list of messages (as strings) for the currently
logged-in user. Behind the scenes, this calls logged-in user. Behind the scenes, this calls

View File

@ -253,8 +253,8 @@ can be invoked on the ``Client`` instance.
f.close() f.close()
will result in the evaluation of a POST request on ``/customers/wishes/``, will result in the evaluation of a POST request on ``/customers/wishes/``,
with a POST dictionary that contains `name`, `attachment` (containing the with a POST dictionary that contains ``name``, ``attachment`` (containing the
file name), and `attachment_file` (containing the file data). Note that you file name), and ``attachment_file`` (containing the file data). Note that you
need to manually close the file after it has been provided to the POST. need to manually close the file after it has been provided to the POST.
``login(**credentials)`` ``login(**credentials)``
@ -660,8 +660,8 @@ arguments:
tested. This is the same format returned by ``django.db.models.get_apps()`` tested. This is the same format returned by ``django.db.models.get_apps()``
Verbosity determines the amount of notification and debug information that Verbosity determines the amount of notification and debug information that
will be printed to the console; `0` is no output, `1` is normal output, will be printed to the console; ``0`` is no output, ``1`` is normal output,
and `2` is verbose output. and ``2`` is verbose output.
This method should return the number of tests that failed. This method should return the number of tests that failed.

View File

@ -360,7 +360,7 @@ Note the following:
quotes. The author of this tutorial runs PostgreSQL, so the example quotes. The author of this tutorial runs PostgreSQL, so the example
output is in PostgreSQL syntax. output is in PostgreSQL syntax.
* The `sql` command doesn't actually run the SQL in your database - it just * The ``sql`` command doesn't actually run the SQL in your database - it just
prints it to the screen so that you can see what SQL Django thinks is required. prints it to the screen so that you can see what SQL Django thinks is required.
If you wanted to, you could copy and paste this SQL into your database prompt. If you wanted to, you could copy and paste this SQL into your database prompt.
However, as we will see shortly, Django provides an easier way of committing However, as we will see shortly, Django provides an easier way of committing

View File

@ -5,6 +5,7 @@ This demonstrates features of the database API.
""" """
from django.db import models from django.db import models
from django.conf import settings
class Article(models.Model): class Article(models.Model):
headline = models.CharField(maxlength=100) headline = models.CharField(maxlength=100)
@ -251,4 +252,100 @@ Traceback (most recent call last):
... ...
TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id, headline, pub_date TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id, headline, pub_date
# Create some articles with a bit more interesting headlines for testing field lookups:
>>> now = datetime.now()
>>> for a in Article.objects.all():
... a.delete()
>>> a1 = Article(pub_date=now, headline='f')
>>> a1.save()
>>> a2 = Article(pub_date=now, headline='fo')
>>> a2.save()
>>> a3 = Article(pub_date=now, headline='foo')
>>> a3.save()
>>> a4 = Article(pub_date=now, headline='fooo')
>>> a4.save()
>>> a5 = Article(pub_date=now, headline='hey-Foo')
>>> a5.save()
# zero-or-more
>>> Article.objects.filter(headline__regex=r'fo*')
[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>]
>>> Article.objects.filter(headline__iregex=r'fo*')
[<Article: f>, <Article: fo>, <Article: foo>, <Article: fooo>, <Article: hey-Foo>]
# one-or-more
>>> Article.objects.filter(headline__regex=r'fo+')
[<Article: fo>, <Article: foo>, <Article: fooo>]
# wildcard
>>> Article.objects.filter(headline__regex=r'fooo?')
[<Article: foo>, <Article: fooo>]
# and some more:
>>> a6 = Article(pub_date=now, headline='bar')
>>> a6.save()
>>> a7 = Article(pub_date=now, headline='AbBa')
>>> a7.save()
>>> a8 = Article(pub_date=now, headline='baz')
>>> a8.save()
>>> a9 = Article(pub_date=now, headline='baxZ')
>>> a9.save()
# leading anchor
>>> Article.objects.filter(headline__regex=r'^b')
[<Article: bar>, <Article: baxZ>, <Article: baz>]
>>> Article.objects.filter(headline__iregex=r'^a')
[<Article: AbBa>]
# trailing anchor
>>> Article.objects.filter(headline__regex=r'z$')
[<Article: baz>]
>>> Article.objects.filter(headline__iregex=r'z$')
[<Article: baxZ>, <Article: baz>]
# character sets
>>> Article.objects.filter(headline__regex=r'ba[rz]')
[<Article: bar>, <Article: baz>]
>>> Article.objects.filter(headline__regex=r'ba.[RxZ]')
[<Article: baxZ>]
>>> Article.objects.filter(headline__iregex=r'ba[RxZ]')
[<Article: bar>, <Article: baxZ>, <Article: baz>]
# and yet more:
>>> a10 = Article(pub_date=now, headline='foobar')
>>> a10.save()
>>> a11 = Article(pub_date=now, headline='foobaz')
>>> a11.save()
>>> a12 = Article(pub_date=now, headline='ooF')
>>> a12.save()
>>> a13 = Article(pub_date=now, headline='foobarbaz')
>>> a13.save()
>>> a14 = Article(pub_date=now, headline='zoocarfaz')
>>> a14.save()
>>> a15 = Article(pub_date=now, headline='barfoobaz')
>>> a15.save()
>>> a16 = Article(pub_date=now, headline='bazbaRFOO')
>>> a16.save()
# alternation
>>> Article.objects.filter(headline__regex=r'oo(f|b)')
[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
>>> Article.objects.filter(headline__iregex=r'oo(f|b)')
[<Article: barfoobaz>, <Article: foobar>, <Article: foobarbaz>, <Article: foobaz>, <Article: ooF>]
>>> Article.objects.filter(headline__regex=r'^foo(f|b)')
[<Article: foobar>, <Article: foobarbaz>, <Article: foobaz>]
# greedy matching
>>> Article.objects.filter(headline__regex=r'b.*az')
[<Article: barfoobaz>, <Article: baz>, <Article: bazbaRFOO>, <Article: foobarbaz>, <Article: foobaz>]
>>> Article.objects.filter(headline__iregex=r'b.*ar')
[<Article: bar>, <Article: barfoobaz>, <Article: bazbaRFOO>, <Article: foobar>, <Article: foobarbaz>]
"""} """}
if settings.DATABASE_ENGINE not in ('mysql', 'mysql_old'):
__test__['API_TESTS'] += r"""
# grouping and backreferences
>>> Article.objects.filter(headline__regex=r'b(.).*b\1')
[<Article: barfoobaz>, <Article: bazbaRFOO>, <Article: foobarbaz>]
"""

View File

@ -225,6 +225,9 @@ class Templates(unittest.TestCase):
# in the final output. # in the final output.
'filter-syntax18': (r'{{ var }}', {'var': UTF8Class()}, u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'), 'filter-syntax18': (r'{{ var }}', {'var': UTF8Class()}, u'\u0160\u0110\u0106\u017d\u0107\u017e\u0161\u0111'),
# Numbers as filter arguments should work
'filter-syntax19': ('{{ var|truncatewords:1 }}', {"var": "hello world"}, "hello ..."),
### COMMENT SYNTAX ######################################################## ### COMMENT SYNTAX ########################################################
'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"), 'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"),
'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"), 'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"),