diff --git a/AUTHORS b/AUTHORS index cd136fe06c..35ad3b7ef3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -100,11 +100,14 @@ answer newbie questions, and generally made Django that much better: Marc Fargas favo@exoweb.net Bill Fenner + Stefane Fermgier + Afonso Fernández Nogueira Matthew Flanagan Eric Floehr Jorge Gajon gandalf@owca.info Baishampayan Ghose + glin@seznam.cz martin.glueck@gmail.com GomoX Simon Greenhill @@ -119,6 +122,7 @@ answer newbie questions, and generally made Django that much better: Ian Holsman Kieran Holland Sung-Jin Hong + Richard House Robert Rock Howard Jason Huggins Hyun Mi Ae @@ -170,6 +174,7 @@ answer newbie questions, and generally made Django that much better: mikko@sorl.net mitakummaa@gmail.com mmarshall + Reza Mohammadi Eric Moritz mrmachine Robin Munn @@ -183,6 +188,7 @@ answer newbie questions, and generally made Django that much better: Jay Parlar pavithran s Barry Pederson + petr.marhoun@gmail.com pgross@thoughtworks.com phaedo phil@produxion.net @@ -224,6 +230,7 @@ answer newbie questions, and generally made Django that much better: Frank Tegtmeyer thebjorn Zach Thompson + tibimicu@gmax.net Tom Tobin Joe Topjian torne-django@wolfpuppy.org.uk @@ -233,6 +240,7 @@ answer newbie questions, and generally made Django that much better: Amit Upadhyay Geert Vanderkelen viestards.lists@gmail.com + Vlado Milton Waddams wam-djangobug@wamber.net wangchun @@ -245,6 +253,7 @@ answer newbie questions, and generally made Django that much better: wojtek ye7cakf02@sneakemail.com ymasuda@ethercube.com + Jarek Zgoda Cheng Zhang A big THANK YOU goes to: diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 8bdeb64efc..ea92d13eb3 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -48,6 +48,7 @@ LANGUAGES = ( ('en', gettext_noop('English')), ('es', gettext_noop('Spanish')), ('es_AR', gettext_noop('Argentinean Spanish')), + ('fa', gettext_noop('Persian')), ('fi', gettext_noop('Finnish')), ('fr', gettext_noop('French')), ('gl', gettext_noop('Galician')), diff --git a/django/conf/locale/bn/LC_MESSAGES/djangojs.mo b/django/conf/locale/bn/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..1db40df910 Binary files /dev/null and b/django/conf/locale/bn/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/bn/LC_MESSAGES/djangojs.po b/django/conf/locale/bn/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..4084313848 --- /dev/null +++ b/django/conf/locale/bn/LC_MESSAGES/djangojs.po @@ -0,0 +1,118 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:32 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "" diff --git a/django/conf/locale/ca/LC_MESSAGES/django.mo b/django/conf/locale/ca/LC_MESSAGES/django.mo index 665d7d41a9..f308c7589a 100644 Binary files a/django/conf/locale/ca/LC_MESSAGES/django.mo and b/django/conf/locale/ca/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ca/LC_MESSAGES/django.po b/django/conf/locale/ca/LC_MESSAGES/django.po index 30a8797a91..b8450ad1b9 100644 --- a/django/conf/locale/ca/LC_MESSAGES/django.po +++ b/django/conf/locale/ca/LC_MESSAGES/django.po @@ -1,20 +1,18 @@ # translation of django.po to -# This file is distributed under the same license as the PACKAGE package. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER. +# This file is distributed under the same license as the Django package. # msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-05-25 13:04+0200\n" -"PO-Revision-Date: 2007-05-25 13:04+0200\n" -"Last-Translator: Marc Fargas \n" +"POT-Creation-Date: 2007-06-25 17:31+0200\n" +"PO-Revision-Date: 2007-06-25 17:47+0200\n" +"Last-Translator: Marc Fargas \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: VIM 7.0\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n != 1);" #: template/defaultfilters.py:491 msgid "yes,no,maybe" @@ -42,38 +40,38 @@ msgstr "%.1f MB" msgid "%.1f GB" msgstr "%.1f GB" -#: newforms/models.py:173 newforms/fields.py:432 +#: newforms/models.py:172 newforms/fields.py:432 msgid "Select a valid choice. That choice is not one of the available choices." msgstr "" "Esculli una opció vàlida; Aquesta opció no és una de les opcions disponibles." -#: newforms/models.py:186 newforms/fields.py:87 newforms/fields.py:444 -#: newforms/fields.py:520 newforms/fields.py:531 oldforms/__init__.py:357 -#: db/models/fields/__init__.py:121 db/models/fields/__init__.py:278 -#: db/models/fields/__init__.py:675 db/models/fields/__init__.py:686 +#: newforms/models.py:185 newforms/fields.py:87 newforms/fields.py:444 +#: newforms/fields.py:522 newforms/fields.py:533 oldforms/__init__.py:357 +#: db/models/fields/__init__.py:126 db/models/fields/__init__.py:283 +#: db/models/fields/__init__.py:680 db/models/fields/__init__.py:691 msgid "This field is required." msgstr "Aquest camp és obligatori." -#: newforms/models.py:190 newforms/fields.py:448 newforms/fields.py:524 +#: newforms/models.py:189 newforms/fields.py:448 newforms/fields.py:526 msgid "Enter a list of values." msgstr "Introdueixi una llista de valors." -#: newforms/models.py:196 newforms/fields.py:457 +#: newforms/models.py:195 newforms/fields.py:457 #, python-format msgid "Select a valid choice. %s is not one of the available choices." msgstr "Esculli una opció vàlida; %s' no és una de les opcions vàlides." -#: newforms/widgets.py:182 contrib/admin/filterspecs.py:150 +#: newforms/widgets.py:181 contrib/admin/filterspecs.py:150 #: oldforms/__init__.py:577 msgid "Unknown" msgstr "Desconegut" -#: newforms/widgets.py:182 contrib/admin/filterspecs.py:143 +#: newforms/widgets.py:181 contrib/admin/filterspecs.py:143 #: oldforms/__init__.py:577 msgid "Yes" msgstr "Si" -#: newforms/widgets.py:182 contrib/admin/filterspecs.py:143 +#: newforms/widgets.py:181 contrib/admin/filterspecs.py:143 #: oldforms/__init__.py:577 msgid "No" msgstr "No" @@ -121,11 +119,11 @@ msgstr "Asseguris de que no hi ha més de %s decimals." msgid "Ensure that there are no more than %s digits before the decimal point." msgstr "Asseguris de que no hia ha més de %s dígits decimals." -#: newforms/fields.py:233 +#: newforms/fields.py:233 newforms/fields.py:566 msgid "Enter a valid date." msgstr "Introdueixi una data vàlida." -#: newforms/fields.py:260 +#: newforms/fields.py:260 newforms/fields.py:568 msgid "Enter a valid time." msgstr "Introdueixi una hora vàlida." @@ -198,118 +196,122 @@ msgid "Argentinean Spanish" msgstr "Castellà Argentí" #: conf/global_settings.py:51 +msgid "Persian" +msgstr "Persa" + +#: conf/global_settings.py:52 msgid "Finnish" msgstr "Finlandès" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "French" msgstr "Francès" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Galician" msgstr "Galleg" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Hungarian" msgstr "Húngar" -#: conf/global_settings.py:55 +#: conf/global_settings.py:56 msgid "Hebrew" msgstr "Hebreu" -#: conf/global_settings.py:56 +#: conf/global_settings.py:57 msgid "Icelandic" msgstr "Islandès" -#: conf/global_settings.py:57 +#: conf/global_settings.py:58 msgid "Italian" msgstr "Italià" -#: conf/global_settings.py:58 +#: conf/global_settings.py:59 msgid "Japanese" msgstr "Japonès" -#: conf/global_settings.py:59 +#: conf/global_settings.py:60 msgid "Korean" msgstr "Coreà" -#: conf/global_settings.py:60 +#: conf/global_settings.py:61 msgid "Kannada" msgstr "" -#: conf/global_settings.py:61 -msgid "Latvian" -msgstr "" - #: conf/global_settings.py:62 +msgid "Latvian" +msgstr "Letó" + +#: conf/global_settings.py:63 msgid "Macedonian" msgstr "Macedoni" -#: conf/global_settings.py:63 +#: conf/global_settings.py:64 msgid "Dutch" msgstr "Holandès" -#: conf/global_settings.py:64 +#: conf/global_settings.py:65 msgid "Norwegian" msgstr "Norueg" -#: conf/global_settings.py:65 +#: conf/global_settings.py:66 msgid "Polish" msgstr "Polac" -#: conf/global_settings.py:66 +#: conf/global_settings.py:67 msgid "Portugese" msgstr "Portuguès" -#: conf/global_settings.py:67 +#: conf/global_settings.py:68 msgid "Brazilian" msgstr "Brasileny" -#: conf/global_settings.py:68 +#: conf/global_settings.py:69 msgid "Romanian" msgstr "Rumanès" -#: conf/global_settings.py:69 +#: conf/global_settings.py:70 msgid "Russian" msgstr "Rús" -#: conf/global_settings.py:70 +#: conf/global_settings.py:71 msgid "Slovak" msgstr "Eslovac" -#: conf/global_settings.py:71 +#: conf/global_settings.py:72 msgid "Slovenian" msgstr "Esloveni" -#: conf/global_settings.py:72 +#: conf/global_settings.py:73 msgid "Serbian" msgstr "Serbi" -#: conf/global_settings.py:73 +#: conf/global_settings.py:74 msgid "Swedish" msgstr "Suec" -#: conf/global_settings.py:74 -msgid "Tamil" -msgstr "" - #: conf/global_settings.py:75 -msgid "Telugu" -msgstr "" +msgid "Tamil" +msgstr "Tàmil" #: conf/global_settings.py:76 +msgid "Telugu" +msgstr "Telugu" + +#: conf/global_settings.py:77 msgid "Turkish" msgstr "Turc" -#: conf/global_settings.py:77 +#: conf/global_settings.py:78 msgid "Ukrainian" msgstr "Ucranià" -#: conf/global_settings.py:78 +#: conf/global_settings.py:79 msgid "Simplified Chinese" msgstr "Xinés simplificat" -#: conf/global_settings.py:79 +#: conf/global_settings.py:80 msgid "Traditional Chinese" msgstr "Xinés tradicional" @@ -576,17 +578,15 @@ msgid "" "comment:\n" "\n" "%(text)s" -msgid_plural "" "This comment was posted by a user who has posted fewer than %(count)s " "comments:\n" "\n" "%(text)s" -msgstr[0] "" +msgstr "" "Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s " "comentari:\n" "\n" "%(text)s" -msgstr[1] "" "Aquest comentari el va enviar un usuari que ha enviat menys de %(count)s " "comentaris:\n" "\n" @@ -1218,13 +1218,13 @@ msgstr "Editar aquest objecte (nova finestra)" msgid "As above, but opens the admin page in a new window." msgstr "Com abans, però obre la pàgina d'administració en una nova finestra." -#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 +#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:262 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." msgstr "El/la %(name)s \"%(obj)s\".ha estat agregat/da amb èxit." -#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 -#: contrib/admin/views/main.py:347 +#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:266 +#: contrib/admin/views/main.py:352 msgid "You may edit it again below." msgstr "Pot editar-lo de nou abaix." @@ -1241,96 +1241,96 @@ msgstr "Canvi de clau exitós" msgid "Change password: %s" msgstr "Canviar clau: %s" -#: contrib/admin/views/main.py:223 +#: contrib/admin/views/main.py:228 msgid "Site administration" msgstr "Lloc administratiu" -#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 +#: contrib/admin/views/main.py:276 contrib/admin/views/main.py:361 #, python-format msgid "You may add another %s below." msgstr "Pot agregar un altre %s abaix." -#: contrib/admin/views/main.py:289 +#: contrib/admin/views/main.py:294 #, python-format msgid "Add %s" msgstr "Agregar %s" -#: contrib/admin/views/main.py:335 +#: contrib/admin/views/main.py:340 #, python-format msgid "Added %s." msgstr "Agregat %s." -#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 -#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 +#: contrib/admin/views/main.py:340 contrib/admin/views/main.py:342 +#: contrib/admin/views/main.py:344 db/models/manipulators.py:308 msgid "and" msgstr "i" -#: contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:342 #, python-format msgid "Changed %s." msgstr "Modificat %s." -#: contrib/admin/views/main.py:339 +#: contrib/admin/views/main.py:344 #, python-format msgid "Deleted %s." msgstr "Eliminat %s." -#: contrib/admin/views/main.py:342 +#: contrib/admin/views/main.py:347 msgid "No fields changed." msgstr "Cap camp canviat." -#: contrib/admin/views/main.py:345 +#: contrib/admin/views/main.py:350 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." msgstr "S'ha modificat amb èxist el/la %(name)s \"%(obj)s." -#: contrib/admin/views/main.py:353 +#: contrib/admin/views/main.py:358 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "" "S'ha agregat amb èxit el/la %(name)s \"%(obj)s\". Pot editar-lo de nou abaix." -#: contrib/admin/views/main.py:391 +#: contrib/admin/views/main.py:396 #, python-format msgid "Change %s" msgstr "Modificar %s" -#: contrib/admin/views/main.py:476 +#: contrib/admin/views/main.py:481 #, python-format msgid "One or more %(fieldname)s in %(name)s: %(obj)s" msgstr "Un o més %(fieldname)s en %(name)s: %(obj)s" -#: contrib/admin/views/main.py:481 +#: contrib/admin/views/main.py:486 #, python-format msgid "One or more %(fieldname)s in %(name)s:" msgstr "Un o més %(fieldname)s en %(name)s:" -#: contrib/admin/views/main.py:514 +#: contrib/admin/views/main.py:518 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgstr "El/la %(name)s \"%(obj)s\".ha estat eliminat amb èxit." -#: contrib/admin/views/main.py:517 +#: contrib/admin/views/main.py:521 msgid "Are you sure?" msgstr "Està segur?" -#: contrib/admin/views/main.py:539 +#: contrib/admin/views/main.py:543 #, python-format msgid "Change history: %s" msgstr "Modificar històric: %s" -#: contrib/admin/views/main.py:573 +#: contrib/admin/views/main.py:577 #, python-format msgid "Select %s" msgstr "Seleccioni %s" -#: contrib/admin/views/main.py:573 +#: contrib/admin/views/main.py:577 #, python-format msgid "Select %s to change" msgstr "Seleccioni %s per modificar" -#: contrib/admin/views/main.py:768 +#: contrib/admin/views/main.py:772 msgid "Database error" msgstr "Error de/en la base de dades" @@ -1697,35 +1697,35 @@ msgstr "llocs" msgid "Logged out" msgstr "Sessió finalitzada" -#: contrib/auth/models.py:44 contrib/auth/models.py:64 +#: contrib/auth/models.py:49 contrib/auth/models.py:69 msgid "name" msgstr "nom" -#: contrib/auth/models.py:46 +#: contrib/auth/models.py:51 msgid "codename" msgstr "nom en clau" -#: contrib/auth/models.py:49 +#: contrib/auth/models.py:54 msgid "permission" msgstr "permís" -#: contrib/auth/models.py:50 contrib/auth/models.py:65 +#: contrib/auth/models.py:55 contrib/auth/models.py:70 msgid "permissions" msgstr "permissos" -#: contrib/auth/models.py:68 +#: contrib/auth/models.py:73 msgid "group" msgstr "grup" -#: contrib/auth/models.py:69 contrib/auth/models.py:109 +#: contrib/auth/models.py:74 contrib/auth/models.py:114 msgid "groups" msgstr "grups" -#: contrib/auth/models.py:99 +#: contrib/auth/models.py:104 msgid "username" msgstr "nom d'usuari" -#: contrib/auth/models.py:99 +#: contrib/auth/models.py:104 msgid "" "Required. 30 characters or fewer. Alphanumeric characters only (letters, " "digits and underscores)." @@ -1733,23 +1733,23 @@ msgstr "" "Requerit. 30 o menys caracters. Només caracters alfanumèrics (lletres, " "dígits i guions baixos)." -#: contrib/auth/models.py:100 +#: contrib/auth/models.py:105 msgid "first name" msgstr "nom propi" -#: contrib/auth/models.py:101 +#: contrib/auth/models.py:106 msgid "last name" msgstr "cognoms" -#: contrib/auth/models.py:102 +#: contrib/auth/models.py:107 msgid "e-mail address" msgstr "adreça de correu electrònic" -#: contrib/auth/models.py:103 +#: contrib/auth/models.py:108 msgid "password" msgstr "contrasenya" -#: contrib/auth/models.py:103 +#: contrib/auth/models.py:108 msgid "" "Use '[algo]$[salt]$[hexdigest]' or use the change " "password form." @@ -1757,19 +1757,19 @@ msgstr "" "Utilitzi '[algo]$[salt]$[hexdigest]' o el formulari de " "canvi de contrasenya." -#: contrib/auth/models.py:104 +#: contrib/auth/models.py:109 msgid "staff status" msgstr "és membre del personal" -#: contrib/auth/models.py:104 +#: contrib/auth/models.py:109 msgid "Designates whether the user can log into this admin site." msgstr "Indica si l'usuari pot entrar en el lloc administratiu." -#: contrib/auth/models.py:105 +#: contrib/auth/models.py:110 msgid "active" msgstr "actiu" -#: contrib/auth/models.py:105 +#: contrib/auth/models.py:110 msgid "" "Designates whether this user can log into the Django admin. Unselect this " "instead of deleting accounts." @@ -1777,11 +1777,11 @@ msgstr "" "Designa si aquest usuari pot iniciar sessió a la interfície administrativa " "Djano. Deselecciona-ho enlloc de esborrar comptes d'usuari." -#: contrib/auth/models.py:106 +#: contrib/auth/models.py:111 msgid "superuser status" msgstr "estat de superusuari" -#: contrib/auth/models.py:106 +#: contrib/auth/models.py:111 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." @@ -1789,15 +1789,15 @@ msgstr "" "Designa que aquest usuari té tots els permisos sense assignar-los " "explícitament." -#: contrib/auth/models.py:107 +#: contrib/auth/models.py:112 msgid "last login" msgstr "últim inici de sessió" -#: contrib/auth/models.py:108 +#: contrib/auth/models.py:113 msgid "date joined" msgstr "data de creació" -#: contrib/auth/models.py:110 +#: contrib/auth/models.py:115 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." @@ -1805,39 +1805,39 @@ msgstr "" "Junt amb els permissos asignats manualment, aquest usuari tindrà, també, els " "permissos dels grups dels que sigui membre." -#: contrib/auth/models.py:111 +#: contrib/auth/models.py:116 msgid "user permissions" msgstr "permissos de l'usuari" -#: contrib/auth/models.py:115 +#: contrib/auth/models.py:120 msgid "user" msgstr "usuari" -#: contrib/auth/models.py:116 +#: contrib/auth/models.py:121 msgid "users" msgstr "usuaris" -#: contrib/auth/models.py:122 +#: contrib/auth/models.py:127 msgid "Personal info" msgstr "Informaciò personal" -#: contrib/auth/models.py:123 +#: contrib/auth/models.py:128 msgid "Permissions" msgstr "permissos" -#: contrib/auth/models.py:124 +#: contrib/auth/models.py:129 msgid "Important dates" msgstr "Dates importants" -#: contrib/auth/models.py:125 +#: contrib/auth/models.py:130 msgid "Groups" msgstr "Grups" -#: contrib/auth/models.py:269 +#: contrib/auth/models.py:273 msgid "message" msgstr "missatge" -#: contrib/auth/models.py:282 +#: contrib/auth/models.py:286 msgid "AnonymousUser" msgstr "AnonymousUser" @@ -1861,7 +1861,7 @@ msgstr "" msgid "This account is inactive." msgstr "Aquest compte està inactiu" -#: contrib/auth/forms.py:85 +#: contrib/auth/forms.py:84 msgid "" "That e-mail address doesn't have an associated user account. Are you sure " "you've registered?" @@ -2423,7 +2423,7 @@ msgstr "L'any ha de ser posterior al 1900" msgid "Invalid date: %s" msgstr "Data invàlida: %s" -#: core/validators.py:149 db/models/fields/__init__.py:463 +#: core/validators.py:149 db/models/fields/__init__.py:468 msgid "Enter a valid date in YYYY-MM-DD format." msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD." @@ -2431,7 +2431,7 @@ msgstr "Introdueixi una data vàlida en el forma AAAA-MM-DD." msgid "Enter a valid time in HH:MM format." msgstr "Introdueixi una hora vàlida en el format HH:MM." -#: core/validators.py:158 db/models/fields/__init__.py:532 +#: core/validators.py:158 db/models/fields/__init__.py:537 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." msgstr "Introdueixi un data/hora vàlida en format YYYY-MM-DD HH:MM." @@ -2558,35 +2558,29 @@ msgstr "Si us plau, introdueixi un número decimal vàlid." #: core/validators.py:423 #, python-format msgid "Please enter a valid decimal number with at most %s total digit." -msgid_plural "" "Please enter a valid decimal number with at most %s total digits." -msgstr[0] "" +msgstr "" "Si us plau, introdueixi un número decimal vàlid amb no més de %s digit." -msgstr[1] "" "Si us plau, introdueixi un número decimal vàlid amb no més de %s digits." #: core/validators.py:426 #, python-format msgid "" "Please enter a valid decimal number with a whole part of at most %s digit." -msgid_plural "" "Please enter a valid decimal number with a whole part of at most %s digits." -msgstr[0] "" +msgstr "" "Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a " "màxim %s dígit." -msgstr[1] "" "Si us plau, introdueixi un número decimal vàlid amb la part entera amb com a " "màxim %s dígits." #: core/validators.py:429 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." -msgid_plural "" "Please enter a valid decimal number with at most %s decimal places." -msgstr[0] "" +msgstr "" "Si us plau, introdueixi un número decimal vàlid amb no més de %s dígit en la " "part decimal." -msgstr[1] "" "Si us plau, introdueixi un número decimal vàlid amb no més de %s dígits en " "la part decimal." @@ -2983,52 +2977,51 @@ msgstr "Ja existeix un %(object)s del tipus %(type)s amb aquest %(field)s." msgid "%(optname)s with this %(fieldname)s already exists." msgstr "Ja existeix %(optname)s amb auqest %(fieldname)s." -#: db/models/fields/__init__.py:373 +#: db/models/fields/__init__.py:378 msgid "This value must be an integer." msgstr "Aquest valor ha de ser un enter." -#: db/models/fields/__init__.py:408 +#: db/models/fields/__init__.py:413 msgid "This value must be either True or False." msgstr "Aquest valor ha de ser True (Veritat) o False (Fals)" -#: db/models/fields/__init__.py:429 +#: db/models/fields/__init__.py:434 msgid "This field cannot be null." msgstr "Aquest camp no pot ser null (estar buit)." -#: db/models/fields/__init__.py:592 +#: db/models/fields/__init__.py:597 msgid "This value must be a decimal number." msgstr "Aquest valor ha de ser un número decimal." -#: db/models/fields/__init__.py:695 +#: db/models/fields/__init__.py:700 msgid "Enter a valid filename." msgstr "Introdueixi un nom de fitxer vàlid." -#: db/models/fields/__init__.py:818 +#: db/models/fields/__init__.py:824 msgid "This value must be either None, True or False." msgstr "Aquest valor ha de ser None (Cap), True (Veritat) o False (Fals)" -#: db/models/fields/related.py:53 +#: db/models/fields/related.py:54 #, python-format msgid "Please enter a valid %s." msgstr "Si us plau, introdueixi un %s vàlid." -#: db/models/fields/related.py:642 +#: db/models/fields/related.py:640 msgid "Separate multiple IDs with commas." msgstr "Separi múltiples IDs amb comes." -#: db/models/fields/related.py:644 +#: db/models/fields/related.py:642 msgid "" "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "Premi \"Control\" o \"Command\" en un Mac per escollir més d'un." -#: db/models/fields/related.py:691 +#: db/models/fields/related.py:689 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." -msgid_plural "" "Please enter valid %(self)s IDs. The values %(value)r are invalid." -msgstr[0] "" +msgstr "" "Si us plau, introdueixi IDs de %(self)s vàlids. El valor %(value)r és " "invàlid." -msgstr[1] "" "Si us plau, introdueixi IDs de %(self)s vàlids. Els valors %(value)r són " "invàlids." + diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.mo b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo index a5b908df1f..581b176be4 100644 Binary files a/django/conf/locale/ca/LC_MESSAGES/djangojs.mo and b/django/conf/locale/ca/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/ca/LC_MESSAGES/djangojs.po b/django/conf/locale/ca/LC_MESSAGES/djangojs.po index 8167253005..3ae0e9bad8 100644 --- a/django/conf/locale/ca/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/ca/LC_MESSAGES/djangojs.po @@ -1,15 +1,14 @@ # translation of djangojs.po to -# Spanish translation for the django-admin JS files. -# Copyright (C) -# This file is distributed under the same license as the PACKAGE package. +# Catalan translation for the django-admin JS files. +# This file is distributed under the same license as the Django package. # msgid "" msgstr "" "Project-Id-Version: djangojs\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-05-20 18:25+0200\n" -"PO-Revision-Date: 2007-05-20 18:24+0200\n" -"Last-Translator: Marc Fargas \n" +"PO-Revision-Date: 2007-06-25 17:47+0200\n" +"Last-Translator: Marc Fargas \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" diff --git a/django/conf/locale/cs/LC_MESSAGES/django.mo b/django/conf/locale/cs/LC_MESSAGES/django.mo index c2f04edb81..aacfcb6f61 100644 Binary files a/django/conf/locale/cs/LC_MESSAGES/django.mo and b/django/conf/locale/cs/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/cs/LC_MESSAGES/django.po b/django/conf/locale/cs/LC_MESSAGES/django.po index 0dcc31394c..008acdad7c 100644 --- a/django/conf/locale/cs/LC_MESSAGES/django.po +++ b/django/conf/locale/cs/LC_MESSAGES/django.po @@ -7,18 +7,854 @@ msgid "" msgstr "" "Project-Id-Version: Django Czech translation\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-05-16 10:11+0200\n" -"PO-Revision-Date: 2006-10-07 13:10+0100\n" -"Last-Translator: \n" +"POT-Creation-Date: 2007-06-18 11:26+0200\n" "Language-Team: Czech\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" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Poedit-Country: CZECH REPUBLIC\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n" -#: contrib/comments/models.py:67 -#: contrib/comments/models.py:166 +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "přesměrovat z" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Toto by měla být absolutní cesta, bez domény. Příklad: \"/udalosti/hledat/\"." + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "přesměrovat na" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na " +"\"http://\"." + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "přesměrování" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "přesměrování" + +#: contrib/localflavor/is_/forms.py:16 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "" + +#: contrib/localflavor/is_/forms.py:30 +msgid "The Icelandic identification number is not valid." +msgstr "" + +#: contrib/localflavor/no/forms.py:15 contrib/localflavor/ch/forms.py:18 +msgid "Enter a zip code in the format XXXX." +msgstr "" + +#: contrib/localflavor/no/forms.py:36 +msgid "Enter a valid Norwegian social security number." +msgstr "" + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:4 +msgid "Hokkaido" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:5 +msgid "Aomori" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:6 +msgid "Iwate" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:7 +msgid "Miyagi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:8 +msgid "Akita" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:9 +msgid "Yamagata" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:10 +msgid "Fukushima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:11 +msgid "Ibaraki" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:12 +msgid "Tochigi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:13 +msgid "Gunma" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:14 +msgid "Saitama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:15 +msgid "Chiba" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:16 +msgid "Tokyo" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:17 +msgid "Kanagawa" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:18 +msgid "Yamanashi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:19 +msgid "Nagano" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:20 +msgid "Niigata" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:21 +msgid "Toyama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:22 +msgid "Ishikawa" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:23 +msgid "Fukui" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:24 +msgid "Gifu" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:25 +msgid "Shizuoka" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:26 +msgid "Aichi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:27 +msgid "Mie" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:28 +msgid "Shiga" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:29 +msgid "Kyoto" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:30 +msgid "Osaka" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:31 +msgid "Hyogo" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:32 +msgid "Nara" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:33 +msgid "Wakayama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:34 +msgid "Tottori" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:35 +msgid "Shimane" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:36 +msgid "Okayama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:37 +msgid "Hiroshima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:38 +msgid "Yamaguchi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:39 +msgid "Tokushima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:40 +msgid "Kagawa" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:41 +msgid "Ehime" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:42 +msgid "Kochi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:43 +msgid "Fukuoka" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:44 +msgid "Saga" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:45 +msgid "Nagasaki" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:46 +msgid "Kumamoto" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:47 +msgid "Oita" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:48 +msgid "Miyazaki" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:49 +msgid "Kagoshima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:50 +msgid "Okinawa" +msgstr "" + +#: contrib/localflavor/cl/forms.py:21 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "" + +#: contrib/localflavor/cl/forms.py:26 +msgid "Enter valid a Chilean RUT" +msgstr "" + +#: contrib/localflavor/fr/forms.py:17 contrib/localflavor/de/forms.py:16 +#: contrib/localflavor/fi/forms.py:14 +msgid "Enter a zip code in the format XXXXX." +msgstr "" + +#: contrib/localflavor/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "" + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "" + +#: contrib/localflavor/br/forms.py:72 +msgid "This field requires only numbers." +msgstr "" + +#: contrib/localflavor/br/forms.py:74 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "" + +#: contrib/localflavor/br/forms.py:84 +msgid "Invalid CPF number." +msgstr "" + +#: contrib/localflavor/br/forms.py:106 +msgid "This field requires at least 14 digits" +msgstr "" + +#: contrib/localflavor/br/forms.py:116 +msgid "Invalid CNPJ number." +msgstr "" + +#: contrib/localflavor/us/forms.py:18 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "" + +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "" + +#: contrib/localflavor/de/forms.py:60 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "" + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "" + +#: contrib/localflavor/au/forms.py:18 +msgid "Enter a 4 digit post code." +msgstr "" + +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:11 +msgid "Fribourg" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:12 +msgid "Geneva" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:13 +msgid "Glarus" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:14 +msgid "Graubuenden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:15 +msgid "Jura" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:16 +msgid "Lucerne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:17 +msgid "Neuchatel" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:18 +msgid "Nidwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:19 +msgid "Obwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:20 +msgid "Schaffhausen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:21 +msgid "Schwyz" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:22 +msgid "Solothurn" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:23 +msgid "St. Gallen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:24 +msgid "Thurgau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:25 +msgid "Ticino" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:26 +msgid "Uri" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:27 +msgid "Valais" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:28 +msgid "Vaud" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:29 +msgid "Zug" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:30 +msgid "Zurich" +msgstr "" + +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "" + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 +msgid "Enter a valid Finnish social security number." +msgstr "" + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "" + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "" + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "th" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "st" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "nd" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "rd" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:47 +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "one" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "three" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "four" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "five" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "nine" +msgstr "" + +#: contrib/contenttypes/models.py:36 +msgid "python model class name" +msgstr "jméno modelu v Pythonu" + +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "typ obsahu" + +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "typy obsahu" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Hesla se neshodují." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Uživatel s tímto jménem již existuje." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Váš prohlížeč pravděpodobně nemá zapnuté cookies. Cookies jsou potřeba pro " +"zalogování." + +#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Prosíme, vložte správné uživatelské jméno a heslo. Poznámka - u obou položek " +"se rozlišuje velikost písmen." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Tento účet není aktivní." + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" +"K této e-mailové adrese není přiřazen žádný uživatelský účet. Jste si jist" +"(a), že jste se zaregistroval(a)?" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Hesla se neshodují." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Vaše staré heslo nebylo vloženo správně. Prosíme, zkuste to znovu." + +#: contrib/auth/models.py:44 contrib/auth/models.py:64 +msgid "name" +msgstr "jméno" + +#: contrib/auth/models.py:46 +msgid "codename" +msgstr "codename" + +#: contrib/auth/models.py:49 +msgid "permission" +msgstr "oprávnění" + +#: contrib/auth/models.py:50 contrib/auth/models.py:65 +msgid "permissions" +msgstr "oprávnění" + +#: contrib/auth/models.py:68 +msgid "group" +msgstr "skupina" + +#: contrib/auth/models.py:69 contrib/auth/models.py:109 +msgid "groups" +msgstr "skupiny" + +#: contrib/auth/models.py:99 +msgid "username" +msgstr "uživatelské jméno" + +#: contrib/auth/models.py:99 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" +"Požadováno. 30 znaků nebo méně. Pouze alfanumerické znaky (znaky, čísla a " +"podtržítka)." + +#: contrib/auth/models.py:100 +msgid "first name" +msgstr "křestní jméno" + +#: contrib/auth/models.py:101 +msgid "last name" +msgstr "příjmení" + +#: contrib/auth/models.py:102 +msgid "e-mail address" +msgstr "e-mailová adresa" + +#: contrib/auth/models.py:103 +msgid "password" +msgstr "heslo" + +#: contrib/auth/models.py:103 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Použijte formát \"[algo]$[salt]$[hexdigest]\" nebo formulář pro změnu hesla." + +#: contrib/auth/models.py:104 +msgid "staff status" +msgstr "administrativní přístup " + +#: contrib/auth/models.py:104 +msgid "Designates whether the user can log into this admin site." +msgstr "Rozhodne, zda se uživatel může přihlásit do správy webu." + +#: contrib/auth/models.py:105 +msgid "active" +msgstr "aktivní" + +#: contrib/auth/models.py:105 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" +"Rozhodne, zda se uživatel může přihlásit. Nastavte toto místo mazání účtů." + +#: contrib/auth/models.py:106 +msgid "superuser status" +msgstr "stav superuživatel" + +#: contrib/auth/models.py:106 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Stanoví, že uživatel má veškerá oprávnění bez jejich explicitního přiřazení." + +#: contrib/auth/models.py:107 +msgid "last login" +msgstr "poslední přihlášení" + +#: contrib/auth/models.py:108 +msgid "date joined" +msgstr "datum registrace" + +#: contrib/auth/models.py:110 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro " +"každou skupinu, ve které je." + +#: contrib/auth/models.py:111 +msgid "user permissions" +msgstr "uživatelská oprávnění" + +#: contrib/auth/models.py:115 +msgid "user" +msgstr "uživatel" + +#: contrib/auth/models.py:116 +msgid "users" +msgstr "uživatelé" + +#: contrib/auth/models.py:122 +msgid "Personal info" +msgstr "Osobní informace" + +#: contrib/auth/models.py:123 +msgid "Permissions" +msgstr "Oprávnění" + +#: contrib/auth/models.py:124 +msgid "Important dates" +msgstr "Důležitá data" + +#: contrib/auth/models.py:125 +msgid "Groups" +msgstr "Skupiny" + +#: contrib/auth/models.py:269 +msgid "message" +msgstr "zpráva" + +#: contrib/auth/models.py:282 +#, fuzzy +msgid "AnonymousUser" +msgstr "Anonymní uživatelé nemohou hlasovat" + +#: contrib/auth/views.py:40 +msgid "Logged out" +msgstr "Odhlášeno" + +#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:316 +msgid "URL" +msgstr "URL" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Příklad: \"/o/kontakt/\". Ujistěte se, že máte počáteční a konečná lomítka." + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "titulek" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "obsah" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "povolit komentáře" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "jméno šablony" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Příklad: \"flatpages/kontaktni_stranka.html\". Pokud toto není zadáno, " +"systém použije \"flatpages/default.html\"." + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "nutná registrace" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto " +"stránku." + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "statická stránka" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "statické stránky" + +#: contrib/sites/models.py:10 +msgid "domain name" +msgstr "jméno domény" + +#: contrib/sites/models.py:11 +msgid "display name" +msgstr "zobrazené jméno" + +#: contrib/sites/models.py:15 +msgid "site" +msgstr "web" + +#: contrib/sites/models.py:16 +msgid "sites" +msgstr "weby" + +#: contrib/comments/models.py:67 contrib/comments/models.py:166 msgid "object ID" msgstr "ID objektu" @@ -26,8 +862,7 @@ msgstr "ID objektu" msgid "headline" msgstr "titulek" -#: 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 msgid "comment" msgstr "komentář" @@ -68,18 +903,15 @@ msgstr "hodnocení #8" msgid "is valid rating" msgstr "je platné hodnocení" -#: contrib/comments/models.py:83 -#: contrib/comments/models.py:169 +#: contrib/comments/models.py:83 contrib/comments/models.py:169 msgid "date/time submitted" msgstr "datum/čas byl zaslán" -#: contrib/comments/models.py:84 -#: contrib/comments/models.py:170 +#: contrib/comments/models.py:84 contrib/comments/models.py:170 msgid "is public" msgstr "je veřejné" -#: contrib/comments/models.py:85 -#: contrib/admin/views/doc.py:304 +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:305 msgid "IP address" msgstr "IP adresa" @@ -88,15 +920,18 @@ msgid "is removed" msgstr "je odstraněno" #: contrib/comments/models.py:86 -msgid "Check this box if the comment is inappropriate. A \"This comment has been removed\" message will be displayed instead." -msgstr "Zaškrtněte tento box, pokud komentář není vhodný. Místo něj bude zobrazena zpráva \"Tento komentář byl smazán\"." +msgid "" +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." +msgstr "" +"Zaškrtněte tento box, pokud komentář není vhodný. Místo něj bude zobrazena " +"zpráva \"Tento komentář byl smazán\"." #: contrib/comments/models.py:91 msgid "comments" msgstr "komentáře" -#: contrib/comments/models.py:131 -#: contrib/comments/models.py:207 +#: contrib/comments/models.py:131 contrib/comments/models.py:207 msgid "Content object" msgstr "objekt obsahu" @@ -137,7 +972,7 @@ msgstr "volné komentáře" #: contrib/comments/models.py:233 msgid "score" -msgstr "body" +msgstr "hodnocení" #: contrib/comments/models.py:234 msgid "score date" @@ -201,6 +1036,75 @@ msgstr "vymazané moderátorem" msgid "Moderator deletion by %r" msgstr "Vymazáno moderátorem od %r" +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Vaše jméno:" + +#: contrib/comments/templates/comments/freeform.html:5 +#: contrib/comments/templates/comments/form.html:28 +msgid "Comment:" +msgstr "Komentář:" + +#: contrib/comments/templates/comments/freeform.html:10 +#: contrib/comments/templates/comments/form.html:35 +msgid "Preview comment" +msgstr "Náhled komentáře" + +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:17 +msgid "Username:" +msgstr "Uživatelské jméno:" + +#: contrib/comments/templates/comments/form.html:6 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +msgid "Log out" +msgstr "Odhlásit se" + +#: contrib/comments/templates/comments/form.html:8 +#: contrib/admin/templates/admin/login.html:20 +msgid "Password:" +msgstr "Heslo:" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Zapomenuté heslo?" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Hodnocení" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Povinné" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Volitelné" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Zařadit fotografii" + #: contrib/comments/views/karma.py:19 msgid "Anonymous users cannot vote" msgstr "Anonymní uživatelé nemohou hlasovat" @@ -214,29 +1118,37 @@ msgid "No voting for yourself" msgstr "Nelze hlasovat pro sebe" #: contrib/comments/views/comments.py:27 -msgid "This rating is required because you've entered at least one other rating." -msgstr "Toto hodnocení je povinné, protože jste zadal(a) alespoň jedno jiné hodnocení." +msgid "" +"This rating is required because you've entered at least one other rating." +msgstr "" +"Toto hodnocení je povinné, protože jste zadal(a) alespoň jedno jiné " +"hodnocení." #: contrib/comments/views/comments.py:111 #, python-format msgid "" -"This comment was posted by a user who has posted fewer than %(count)s comment:\n" +"This comment was posted by a user who has posted fewer than %(count)s " +"comment:\n" "\n" "%(text)s" msgid_plural "" -"This comment was posted by a user who has posted fewer than %(count)s comments:\n" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" "\n" "%(text)s" msgstr[0] "" -"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %(count)s komentář:\n" +"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %" +"(count)s komentář:\n" "\n" "%(text)s" msgstr[1] "" -"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %(count)s komentáře:\n" +"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %" +"(count)s komentáře:\n" "\n" "%(text)s" msgstr[2] "" -"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %(count)s komentářů:\n" +"Tento komentář byl odevzdán uživatelem, který(á) odevzdal(a) méně než %" +"(count)s komentářů:\n" "\n" "%(text)s" @@ -268,129 +1180,17 @@ msgstr "Někdo falšoval formulář komentáře (bezpečnostní narušení)" #: contrib/comments/views/comments.py:206 #: contrib/comments/views/comments.py:292 -msgid "The comment form had an invalid 'target' parameter -- the object ID was invalid" -msgstr "Formulář komentáře měl neplatný parametr 'target' -- ID objektu nebylo platné" +msgid "" +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "" +"Formulář komentáře měl neplatný parametr \"target\" -- ID objektu nebylo " +"platné" #: contrib/comments/views/comments.py:257 #: contrib/comments/views/comments.py:321 msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "Formulář komentáře neobsahoval buď 'preview' nebo 'post'" - -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" -msgstr "Uživatelské jméno:" - -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:25 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Log out" -msgstr "Odhlásit se" - -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Heslo:" - -#: contrib/comments/templates/comments/form.html:8 -msgid "Forgotten your password?" -msgstr "Zapomenuté heslo?" - -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "Hodnocení" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "Povinné" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "Volitelné" - -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "Zařadit fotografii" - -#: contrib/comments/templates/comments/form.html:28 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "Komentář:" - -#: contrib/comments/templates/comments/form.html:35 -#: contrib/comments/templates/comments/freeform.html:10 -msgid "Preview comment" -msgstr "Náhled komentáře" - -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Vaše jméno:" - -#: contrib/admin/filterspecs.py:40 -#, python-format -msgid "" -"

By %s:

\n" -"
    \n" -msgstr "" -"

    %s:

    \n" -"
      \n" - -#: contrib/admin/filterspecs.py:70 -#: contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -#: contrib/admin/filterspecs.py:169 -msgid "All" -msgstr "Vše" - -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Libovolné datum" - -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "Dnes" - -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "Posledních 7 dní" - -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Tento měsíc" - -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Tento rok" - -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Ano" - -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "Ne" - -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Neznámé" +msgstr "Formulář komentáře neobsahoval buď \"preview\" nebo \"post\"" #: contrib/admin/models.py:16 msgid "action time" @@ -420,294 +1220,138 @@ msgstr "log záznam" msgid "log entries" msgstr "log záznamy" -#: contrib/admin/templatetags/admin_list.py:230 -msgid "All dates" -msgstr "Všechna data" +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

      By %s:

      \n" +"
        \n" +msgstr "" +"

        %s:

        \n" +"
          \n" -#: contrib/admin/views/decorators.py:10 -#: contrib/auth/forms.py:59 -msgid "Please enter a correct username and password. Note that both fields are case-sensitive." -msgstr "Prosíme, vložte správné uživatelské jméno a heslo. Poznámka - u obou položek se rozlišuje velikost písmen." +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Vše" + +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Libovolné datum" + +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Dnes" + +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "Posledních 7 dní" + +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Tento měsíc" + +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Tento rok" + +#: contrib/admin/filterspecs.py:143 oldforms/__init__.py:581 +#: newforms/widgets.py:182 +msgid "Yes" +msgstr "Ano" + +#: contrib/admin/filterspecs.py:143 oldforms/__init__.py:581 +#: newforms/widgets.py:182 +msgid "No" +msgstr "Ne" + +#: contrib/admin/filterspecs.py:150 oldforms/__init__.py:581 +#: newforms/widgets.py:182 +msgid "Unknown" +msgstr "Neznámé" -#: contrib/admin/views/decorators.py:24 #: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:24 msgid "Log in" msgstr "Přihlášení" -#: contrib/admin/views/decorators.py:62 -msgid "Please log in again, because your session has expired. Don't worry: Your submission has been saved." -msgstr "Prosíme, znovu se přihlašte, Vaše sezení vypršelo. Nemusíte se obávat, Vaše podání je uloženo." +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/invalid_setup.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/auth/user/change_password.html:12 +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_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/logged_out.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Home" +msgstr "Domů" -#: contrib/admin/views/decorators.py:69 -msgid "Looks like your browser isn't configured to accept cookies. Please enable cookies, reload this page, and try again." -msgstr "Vypadá to, že Váš prohlížeč není nastaven, aby akceptoval cookies. Prosíme, zapněte cookies, obnovte tuto stránku a zkuste znovu." +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Chyba serveru" -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "Uživatelská jména nemohou obsahovat znak '@'." +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Chyba serveru (500)" -#: contrib/admin/views/decorators.py:85 +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Chyba serveru (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Nastala chyba. Byla oznámena administrátorovi serveru pomocí e-mailu a měla " +"by být brzy odstraněna. Děkujeme za trpělivost." + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Zobrazit všechny" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Provést" + +#: contrib/admin/templates/admin/search_form.html:10 #, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "Vaše e-mailová adresa není Vaše uživatelské jméno. Zkuste místo toho '%s'." +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "1 výsledek" +msgstr[1] "%(counter)s výsledky" +msgstr[2] "%(counter)s výsledků" -#: contrib/admin/views/main.py:223 -msgid "Site administration" -msgstr "Django správa" - -#: contrib/admin/views/main.py:257 -#: contrib/admin/views/auth.py:17 +#: contrib/admin/templates/admin/search_form.html:10 #, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně přidán." +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s celkem" -#: contrib/admin/views/main.py:261 -#: contrib/admin/views/main.py:347 -#: contrib/admin/views/auth.py:22 -msgid "You may edit it again below." -msgstr "Můžete to opět upravit níže." +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtr" -#: contrib/admin/views/main.py:271 -#: contrib/admin/views/main.py:356 -#, python-format -msgid "You may add another %s below." -msgstr "Můžete přidat další %s níže." - -#: contrib/admin/views/main.py:289 -#, python-format -msgid "Add %s" -msgstr "%s: přidat" - -#: contrib/admin/views/main.py:335 -#, python-format -msgid "Added %s." -msgstr "Záznam %s byl přidán." - -#: contrib/admin/views/main.py:335 -#: contrib/admin/views/main.py:337 -#: contrib/admin/views/main.py:339 -msgid "and" -msgstr "a" - -#: contrib/admin/views/main.py:337 -#, python-format -msgid "Changed %s." -msgstr "%s: změněno" - -#: contrib/admin/views/main.py:339 -#, python-format -msgid "Deleted %s." -msgstr "Záznam %s byl smazán." - -#: contrib/admin/views/main.py:342 -msgid "No fields changed." -msgstr "Nebyly změněny žádné pole." - -#: contrib/admin/views/main.py:345 -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "%(name)s \"%(obj)s\" byl úspěšně změněn." - -#: contrib/admin/views/main.py:353 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "The %(name)s \"%(obj)s\" byl úspěšně přidán. Můžete to opět upravit níže." - -#: contrib/admin/views/main.py:391 -#, python-format -msgid "Change %s" -msgstr "%s: změnit" - -#: contrib/admin/views/main.py:473 -#, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Jedno nebo více %(fieldname)s z %(name)s: %(obj)s" - -#: contrib/admin/views/main.py:478 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Jedno nebo více %(fieldname)s z %(name)s:" - -#: contrib/admin/views/main.py:511 -#, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "Záznam %(name)s \"%(obj)s\" byl úspěšně smazán." - -#: contrib/admin/views/main.py:514 -msgid "Are you sure?" -msgstr "Jste si jist(á)?" - -#: contrib/admin/views/main.py:536 -#, python-format -msgid "Change history: %s" -msgstr "Historie změn: %s" - -#: contrib/admin/views/main.py:570 -#, python-format -msgid "Select %s" -msgstr "Vybrat %s" - -#: contrib/admin/views/main.py:570 -#, python-format -msgid "Select %s to change" -msgstr "Vyberte %s pro změnu" - -#: contrib/admin/views/main.py:758 -msgid "Database error" -msgstr "Databázová chyba" - -#: contrib/admin/views/doc.py:46 -#: contrib/admin/views/doc.py:48 -#: contrib/admin/views/doc.py:50 -msgid "tag:" -msgstr "tag:" - -#: contrib/admin/views/doc.py:77 -#: contrib/admin/views/doc.py:79 -#: contrib/admin/views/doc.py:81 -msgid "filter:" -msgstr "filtr:" - -#: contrib/admin/views/doc.py:135 -#: contrib/admin/views/doc.py:137 -#: contrib/admin/views/doc.py:139 -msgid "view:" -msgstr "pohled (view):" - -#: contrib/admin/views/doc.py:164 -#, python-format -msgid "App %r not found" -msgstr "Aplikace %r nenalezena" - -#: contrib/admin/views/doc.py:171 -#, python-format -msgid "Model %r not found in app %r" -msgstr "Model %r v aplikaci %r nenalezen" - -#: contrib/admin/views/doc.py:183 -#, python-format -msgid "the related `%s.%s` object" -msgstr "související objekt `%s.%s`" - -#: contrib/admin/views/doc.py:183 -#: contrib/admin/views/doc.py:205 -#: contrib/admin/views/doc.py:219 -#: contrib/admin/views/doc.py:224 -msgid "model:" -msgstr "model:" - -#: contrib/admin/views/doc.py:214 -#, python-format -msgid "related `%s.%s` objects" -msgstr "související objekty `%s.%s`" - -#: contrib/admin/views/doc.py:219 -#, python-format -msgid "all %s" -msgstr "%s: vše" - -#: contrib/admin/views/doc.py:224 -#, python-format -msgid "number of %s" -msgstr "%s: počet" - -#: contrib/admin/views/doc.py:229 -#, python-format -msgid "Fields on %s objects" -msgstr "Pole na objektech %s" - -#: contrib/admin/views/doc.py:291 -#: contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 -#: contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 -#: contrib/admin/views/doc.py:312 -msgid "Integer" -msgstr "Celé číslo" - -#: contrib/admin/views/doc.py:292 -msgid "Boolean (Either True or False)" -msgstr "Boolean (buď Ano (True), nebo Ne (False))" - -#: contrib/admin/views/doc.py:293 -#: contrib/admin/views/doc.py:311 -#, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Text (maximálně %(maxlength)s znaků)" - -#: contrib/admin/views/doc.py:294 -msgid "Comma-separated integers" -msgstr "Celá čísla oddělená čárkou" - -#: contrib/admin/views/doc.py:295 -msgid "Date (without time)" -msgstr "Datum (bez času)" - -#: contrib/admin/views/doc.py:296 -msgid "Date (with time)" -msgstr "Datum (s časem)" - -#: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "E-mailová adresa" - -#: contrib/admin/views/doc.py:298 -#: contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "Cesta k souboru" - -#: contrib/admin/views/doc.py:300 -msgid "Decimal number" -msgstr "Desetiné číslo" - -#: contrib/admin/views/doc.py:306 -msgid "Boolean (Either True, False or None)" -msgstr "Boolean (buď Ano (True), Ne (False), nebo Nic (None))" - -#: contrib/admin/views/doc.py:307 -msgid "Relation to parent model" -msgstr "V relaci k rodičovskému modelu" - -#: contrib/admin/views/doc.py:308 -msgid "Phone number" -msgstr "Telefonní číslo" - -#: contrib/admin/views/doc.py:313 -msgid "Text" -msgstr "Text" - -#: contrib/admin/views/doc.py:314 -msgid "Time" -msgstr "Čas" - -#: contrib/admin/views/doc.py:315 -#: contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" - -#: contrib/admin/views/doc.py:316 -msgid "U.S. state (two uppercase letters)" -msgstr "Stát US (2 velké znaky)" - -#: contrib/admin/views/doc.py:317 -msgid "XML text" -msgstr "text XML" - -#: contrib/admin/views/doc.py:343 -#, python-format -msgid "%s does not appear to be a urlpattern object" -msgstr "%s pravděpodobně není objekt urlpattern" - -#: contrib/admin/views/auth.py:28 -msgid "Add user" -msgstr "Přidat uživatele" +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Něco není v pořádku s Vaší instalací databáze. Ujistěte se, že byly " +"vytvořeny odpovídající tabulky databáze a že databáze je přístupná pro čtení " +"daným databázovým uživatelem." #: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:3 @@ -715,43 +1359,30 @@ msgid "Documentation" msgstr "Dokumentace" #: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:15 +#: contrib/admin/templates/admin/auth/user/change_password.html:46 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/template_detail.html:4 msgid "Change password" msgstr "Změnit heslo" #: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/500.html:4 -#: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/base.html:30 -#: contrib/admin/templates/admin/delete_confirmation.html:6 -#: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/admin/invalid_setup.html:4 -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/logged_out.html:4 -#: contrib/admin/templates/registration/password_reset_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Home" -msgstr "Domů" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 +#: contrib/admin/templates/admin/change_form.html:21 msgid "History" msgstr "Historie" @@ -772,32 +1403,21 @@ msgid "DATE_WITH_TIME_FULL" msgstr "j. N Y, H:i" #: contrib/admin/templates/admin/object_history.html:36 -msgid "This object doesn't have a change history. It probably wasn't added via this admin site." -msgstr "Tento objekt nemá historii změn. Pravděpodobně nebyl přidán přes administrátorské rozhraní." +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Tento objekt nemá historii změn. Pravděpodobně nebyl přidán přes " +"administrátorské rozhraní." -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Django správa webu" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Vítejte, uživateli" -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Django správa" - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Chyba serveru" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Chyba serveru (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Chyba serveru (500)" - -#: contrib/admin/templates/admin/500.html:10 -msgid "There's been an error. It's been reported to the site administrators via e-mail and should be fixed shortly. Thanks for your patience." -msgstr "Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a měla by být brzy odstraněna. Děkujeme za trpělivost." +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "%(name)s: přidat" #: contrib/admin/templates/admin/404.html:4 #: contrib/admin/templates/admin/404.html:8 @@ -808,6 +1428,32 @@ msgstr "Stránka nenalezena" msgid "We're sorry, but the requested page could not be found." msgstr "Je nám líto, ale vyžádaná stránka nebyla nalezena." +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Dle: %(filter_title)s " + +#: contrib/admin/templates/admin/submit_line.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:9 +msgid "Delete" +msgstr "Smazat" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Uložit jako nový záznam" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Uložit a přidat další záznam" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Uložit a pokračovat v úpravách" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Uložit" + #: contrib/admin/templates/admin/index.html:17 #, python-format msgid "Models available in the %(name)s application." @@ -843,127 +1489,126 @@ msgstr "Mé akce" msgid "None available" msgstr "Nic" -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "%(name)s: přidat" - -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Zapomněl(a) jste své heslo?" - -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "Vítejte," - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Smazat" - #: contrib/admin/templates/admin/delete_confirmation.html:14 #, python-format -msgid "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:" -msgstr "Mazání %(object_name)s '%(escaped_object)s' by vyústilo ve vymazání souvisejících objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:" +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Smazání záznamu \"%(escaped_object)s\" typu \"%(object_name)s\" by vyústilo " +"ve vymazání souvisejících objektů, ale Váš účet nemá oprávnění pro mazání " +"následujících typů objektů:" #: contrib/admin/templates/admin/delete_confirmation.html:21 #, python-format -msgid "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? All of the following related items will be deleted:" -msgstr "Jste si jist(á), že chcete smazat %(object_name)s \"%(escaped_object)s\"? Všechny následující související položky budou smazány:" +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Jste si jist(á), že chcete smazat záznam \"%(escaped_object)s\" typu \"%" +"(object_name)s\"? Všechny následující související položky budou smazány:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" -msgstr "Ano, jsem si jist" +msgstr "Ano, jsem si jist(á)" -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr " Dle %(filter_title)s " +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django správa webu" -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Provést" +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Django správa" -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "1 result" -msgid_plural "%(counter)s results" -msgstr[0] "1 výsledek" -msgstr[1] "%(counter)s výsledky" -msgstr[2] "%(counter)s výsledků" - -#: contrib/admin/templates/admin/search_form.html:10 -#, python-format -msgid "%(full_result_count)s total" -msgstr "celkem %(full_result_count)s" - -#: contrib/admin/templates/admin/pagination.html:10 -msgid "Show all" -msgstr "Zobrazit všechny" - -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "Filtr" - -#: contrib/admin/templates/admin/change_form.html:21 +#: contrib/admin/templates/admin/change_form.html:22 msgid "View on site" msgstr "Pohled na stránku" -#: contrib/admin/templates/admin/change_form.html:30 +#: contrib/admin/templates/admin/change_form.html:32 +#: contrib/admin/templates/admin/auth/user/change_password.html:24 msgid "Please correct the error below." msgid_plural "Please correct the errors below." msgstr[0] "Prosíme, odstraňte chybu uvedenou níže." msgstr[1] "Prosíme, odstraňte chyby uvedené níže." msgstr[2] "Prosíme, odstraňte chyby uvedené níže." -#: contrib/admin/templates/admin/change_form.html:48 +#: contrib/admin/templates/admin/change_form.html:50 msgid "Ordering" -msgstr "Objednávání" +msgstr "Seřazeno" -#: contrib/admin/templates/admin/change_form.html:51 +#: contrib/admin/templates/admin/change_form.html:53 msgid "Order:" -msgstr "Objednávka:" - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Uložit jako nové" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Uložit a přidat další" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Uložit a pokračovat v úpravách" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Uložit" - -#: contrib/admin/templates/admin/invalid_setup.html:8 -msgid "Something's wrong with your database installation. Make sure the appropriate database tables have been created, and make sure the database is readable by the appropriate user." -msgstr "Něco není v pořádku s Vaší instalací databáze. Ujistěte se, že byly vytvořeny odpovídající tabulky databáze a že databáze je přístupná pro čtení daným databázovým uživatelem." +msgstr "Pořadí:" #: contrib/admin/templates/admin/auth/user/add_form.html:6 -msgid "First, enter a username and password. Then, you'll be able to edit more user options." -msgstr "Nejdříve vložte uživatelské jméno a heslo. Poté budete moci upravovat více uživatelských možností." +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" +"Nejdříve vložte uživatelské jméno a heslo. Poté budete moci upravovat více " +"uživatelských možností." #: contrib/admin/templates/admin/auth/user/add_form.html:12 msgid "Username" msgstr "Uživatelské jméno" #: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:34 msgid "Password" msgstr "Heslo" #: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 msgid "Password (again)" -msgstr "Heslo (znova)" +msgstr "Heslo (znovu)" #: contrib/admin/templates/admin/auth/user/add_form.html:24 +#: contrib/admin/templates/admin/auth/user/change_password.html:40 msgid "Enter the same password as above, for verification." msgstr "Pro ověření vložte stejné heslo znovu." +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Vložte nové heslo pro uživatele %(username)s." + +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:10 +#: contrib/admin/templates/registration/password_reset_done.html:4 +msgid "Password reset" +msgstr "Obnovení hesla" + +#: contrib/admin/templates/registration/password_reset_form.html:12 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll reset " +"your password and e-mail the new one to you." +msgstr "" +"Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo " +"obnovíme a zašleme Vám e-mailem nové." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "E-mailová adresa:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Obnovit heslo" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Obnovení hesla bylo úspěšné" + +#: contrib/admin/templates/registration/password_reset_done.html:12 +msgid "" +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." +msgstr "" +"Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) " +"byste ji dostat během okamžiku." + #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 #: contrib/admin/templates/registration/password_change_form.html:6 @@ -980,45 +1625,13 @@ msgstr "Změna hesla byla úspěšná" msgid "Your password was changed." msgstr "Vaše heslo bylo změněno." -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:6 -#: contrib/admin/templates/registration/password_reset_form.html:10 -#: contrib/admin/templates/registration/password_reset_done.html:4 -msgid "Password reset" -msgstr "Obnovení hesla" - -#: contrib/admin/templates/registration/password_reset_form.html:12 -msgid "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you." -msgstr "Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo obnovíme a zašleme Vám e-mailem nové." - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "E-mailová adresa:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Obnovit mé heslo" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Děkujeme Vám za Váš strávený čas na našich webových stránkách." - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Přihlašte se znova" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "Obnovení hesla bylo úspěšné" - -#: contrib/admin/templates/registration/password_reset_done.html:12 -msgid "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly." -msgstr "Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) byste ji dostat během okamžiku." - #: contrib/admin/templates/registration/password_change_form.html:12 -msgid "Please enter your old password, for security's sake, and then enter your new password twice so we can verify you typed it in correctly." -msgstr "Vložte svoje staré heslo a poté vložte dvakrát nové heslo. Tak můžeme ověřit, že jste ho napsal(a) správně." +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Vložte svoje staré heslo a poté vložte dvakrát nové heslo. Tak můžeme " +"ověřit, že jste ho napsal(a) správně." #: contrib/admin/templates/registration/password_change_form.html:17 msgid "Old password:" @@ -1034,7 +1647,7 @@ msgstr "Potvrdit heslo:" #: contrib/admin/templates/registration/password_change_form.html:23 msgid "Change my password" -msgstr "Změnit mé heslo" +msgstr "Změnit heslo" #: contrib/admin/templates/registration/password_reset_email.html:2 msgid "You're receiving this e-mail because you requested a password reset" @@ -1067,6 +1680,30 @@ msgstr "Děkujeme za používání našeho webu!" msgid "The %(site_name)s team" msgstr "Tým %(site_name)s" +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Děkujeme Vám za Váš strávený čas na našich webových stránkách." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Přihlašte se znovu" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Momentálně:" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Změna:" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Datum:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Čas:" + #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Bookmarklets" msgstr "Bookmarklety" @@ -1086,11 +1723,15 @@ msgid "" "your computer is \"internal\").

          \n" msgstr "" "\n" -"

          Pro nainstalování bookmarkletů, přetáhněte odkaz na Vaše záložky (oblíbené),\n" -"nebo klikněte pravým tlačítkem na odkaz a přidejte ho k Vašim záložkám (oblíbeným). Nyní můžete\n" +"

          Pro nainstalování bookmarkletů, přetáhněte odkaz na Vaše " +"záložky (oblíbené),\n" +"nebo klikněte pravým tlačítkem na odkaz a přidejte ho k Vašim záložkám " +"(oblíbeným). Nyní můžete\n" "zvolit bookmarklet z libovolné stránky. Poznámka: Některé tyto\n" -"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je nastaven jako\n" -"\"interní\" (promluvte si s Vaším administrátorem, jestli si nejste jisti,\n" +"bookmarklety vyžadují, abyste prohlížel(a) stránky z počítače, který je " +"nastaven jako\n" +"\"\"interní\" (promluvte si s Vaším administrátorem, jestli si nejste " +"jisti,\n" "zda je Váš počítač \"interní\").

          \n" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 @@ -1098,16 +1739,24 @@ msgid "Documentation for this page" msgstr "Dokumentace pro tuto stránku" #: contrib/admin/templates/admin_doc/bookmarklets.html:20 -msgid "Jumps you from any page to the documentation for the view that generates that page." -msgstr "Z libovolné stránky otevře dokumentaci pro pohled, který vygeneroval tuto stránku." +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" +"Z libovolné stránky otevře dokumentaci pro pohled, který vygeneroval tuto " +"stránku." #: contrib/admin/templates/admin_doc/bookmarklets.html:22 msgid "Show object ID" msgstr "Ukázat id objektu" #: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "Shows the content-type and unique ID for pages that represent a single object." -msgstr "Ukáže content-type a unikátní ID pro stránky, které reprezentují jeden objekt." +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Ukáže content-type a unikátní ID pro stránky, které reprezentují jeden " +"objekt." #: contrib/admin/templates/admin_doc/bookmarklets.html:25 msgid "Edit this object (current window)" @@ -1125,349 +1774,1168 @@ msgstr "Upravit tento objekt (ve novém okně)" msgid "As above, but opens the admin page in a new window." msgstr "Jako výše, ale otevře admin stránky v novém okně." -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Datum:" +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "tag:" -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Čas:" +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "filtr:" -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Momentálně:" +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "pohled (view):" -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "Změna:" +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Aplikace %r nenalezena" -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "přesměrovat z" +#: contrib/admin/views/doc.py:171 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "Model %(name)r v aplikaci %(label)r nenalezen" -#: contrib/redirects/models.py:8 -msgid "This should be an absolute path, excluding the domain name. Example: '/events/search/'." -msgstr "Toto by měla být absolutní cesta, bez domény. Např. '/udalosti/hledat/'." +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "související objekt `%(label)s.%(type)s`" -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "přesměrovat na" +#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 +#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 +msgid "model:" +msgstr "model:" -#: contrib/redirects/models.py:10 -msgid "This can be either an absolute path (as above) or a full URL starting with 'http://'." -msgstr "Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na 'http://'." +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "související objekty `%(label)s.%(name)s`" -#: contrib/redirects/models.py:13 -msgid "redirect" -msgstr "přesměrovat" +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "Vše: %s" -#: contrib/redirects/models.py:14 -msgid "redirects" -msgstr "přesměrování" +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "Počet: %s" -#: contrib/flatpages/models.py:8 -msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "Příklad: '/o/kontakt/'. Ujistěte se, že máte počáteční a konečná lomítka." +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Pole na objektech %s" -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "titulek" +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310 +#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313 +msgid "Integer" +msgstr "Celé číslo" -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "obsah" +#: contrib/admin/views/doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "Boolean (buď Ano (True), nebo Ne (False))" -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "povolit komentáře" +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "Text (maximálně %(maxlength)s znaků)" -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "jméno šablony" +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "Celá čísla oddělená čárkou" -#: contrib/flatpages/models.py:13 -msgid "Example: 'flatpages/contact_page.html'. If this isn't provided, the system will use 'flatpages/default.html'." -msgstr "Například: 'flatpages/kontaktni_stranka.html'. Pokud toto není zadáno, systém použije 'flatpages/default.html'." +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "Datum (bez času)" -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "nutná registrace" +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "Datum (s časem)" -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto stránku." +#: contrib/admin/views/doc.py:297 +msgid "Decimal number" +msgstr "Desetinné číslo" -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "statická stránka" +#: contrib/admin/views/doc.py:298 +msgid "E-mail address" +msgstr "E-mailová adresa" -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "statické stránky" +#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300 +#: contrib/admin/views/doc.py:303 +msgid "File path" +msgstr "Cesta k souboru" -#: contrib/auth/views.py:39 -msgid "Logged out" -msgstr "Odhlášeno" +#: contrib/admin/views/doc.py:301 +msgid "Floating point number" +msgstr "Celé číslo" -#: contrib/auth/models.py:38 -#: contrib/auth/models.py:57 -msgid "name" -msgstr "jméno" +#: contrib/admin/views/doc.py:307 +msgid "Boolean (Either True, False or None)" +msgstr "Boolean (buď Ano (True), Ne (False), nebo Nic (None))" -#: contrib/auth/models.py:40 -msgid "codename" -msgstr "codename" +#: contrib/admin/views/doc.py:308 +msgid "Relation to parent model" +msgstr "V relaci k rodičovskému modelu" -#: contrib/auth/models.py:42 -msgid "permission" -msgstr "oprávnění" +#: contrib/admin/views/doc.py:309 +msgid "Phone number" +msgstr "Telefonní číslo" -#: contrib/auth/models.py:43 -#: contrib/auth/models.py:58 -msgid "permissions" -msgstr "oprávnění" +#: contrib/admin/views/doc.py:314 +msgid "Text" +msgstr "Text" -#: contrib/auth/models.py:60 -msgid "group" -msgstr "skupina" +#: contrib/admin/views/doc.py:315 +msgid "Time" +msgstr "Čas" -#: contrib/auth/models.py:61 -#: contrib/auth/models.py:100 -msgid "groups" -msgstr "skupiny" +#: contrib/admin/views/doc.py:317 +msgid "U.S. state (two uppercase letters)" +msgstr "Stát US (2 velké znaky)" -#: contrib/auth/models.py:90 -msgid "username" -msgstr "uživatelské jméno" +#: contrib/admin/views/doc.py:318 +msgid "XML text" +msgstr "XML text" -#: contrib/auth/models.py:90 -msgid "Required. 30 characters or fewer. Alphanumeric characters only (letters, digits and underscores)." -msgstr "Požadováno. 30 znaků nebo méně. Pouze alfanumerické znaky (znaky, čísla a podtržítka)." +#: contrib/admin/views/doc.py:344 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s pravděpodobně není objekt urlpattern" -#: contrib/auth/models.py:91 -msgid "first name" -msgstr "křestní jméno" +#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně přidán." -#: contrib/auth/models.py:92 -msgid "last name" -msgstr "příjmení" +#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 +#: contrib/admin/views/main.py:347 +msgid "You may edit it again below." +msgstr "V úpravách můžete pokračovat níže." -#: contrib/auth/models.py:93 -msgid "e-mail address" -msgstr "e-mailová adresa" +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "Uživatel: přidat" -#: contrib/auth/models.py:94 -msgid "password" -msgstr "heslo" +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "Změna hesla byla úspěšná" -#: contrib/auth/models.py:94 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Použijte '[algo]$[salt]$[hexdigest]'" +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Heslo pro uživatele %s: změnit" -#: contrib/auth/models.py:95 -msgid "staff status" -msgstr "administrativní přístup " +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Django správa" -#: contrib/auth/models.py:95 -msgid "Designates whether the user can log into this admin site." -msgstr "Rozhodne, zda se může uživatel přihlásit do správy webu." +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 +#, python-format +msgid "You may add another %s below." +msgstr "Další záznam typu \"%s\" můžete přidat níže." -#: contrib/auth/models.py:96 -msgid "active" -msgstr "aktivní" +#: contrib/admin/views/main.py:289 +#, python-format +msgid "Add %s" +msgstr "%s: přidat" -#: contrib/auth/models.py:96 -msgid "Designates whether this user can log into the Django admin. Unselect this instead of deleting accounts." -msgstr "Rozhodne, zda se může uživatel přihlásit do správy webu. Nastavte toto místo mazání účtů." +#: contrib/admin/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "Záznam %s přidán." -#: contrib/auth/models.py:97 -msgid "superuser status" -msgstr "stav superuživatel" +#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 +msgid "and" +msgstr "a" -#: contrib/auth/models.py:97 -msgid "Designates that this user has all permissions without explicitly assigning them." -msgstr "Stanoví, že tento uživatel má veškerá oprávnění bez jejich explicitního přiřazení." +#: contrib/admin/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "Záznam %s změněn." -#: contrib/auth/models.py:98 -msgid "last login" -msgstr "poslední přihlášení" +#: contrib/admin/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "Záznam %s smazán." -#: contrib/auth/models.py:99 -msgid "date joined" -msgstr "datum zaregistrování" +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "Nebyly změněny žádná pole." -#: contrib/auth/models.py:101 -msgid "In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in." -msgstr "Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro každou skupinu, ve které je." +#: contrib/admin/views/main.py:345 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně změněn." -#: contrib/auth/models.py:102 -msgid "user permissions" -msgstr "uživatelskí oprávnění" +#: contrib/admin/views/main.py:353 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" +"Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně přidán. Níže můžete v " +"úpravách pokračovat." -#: contrib/auth/models.py:105 -msgid "user" -msgstr "uživatel" +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "%s: změnit" -#: contrib/auth/models.py:106 -msgid "users" -msgstr "uživatelé" +#: contrib/admin/views/main.py:476 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" +"Položka \"%(fieldname)s\" pro tento záznam typu \"%(name)s\": \"%(obj)s\"" -#: contrib/auth/models.py:111 -msgid "Personal info" -msgstr "Osobní informace" +#: contrib/admin/views/main.py:481 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Položka \"%(fieldname)s\" pro tento záznam typu \"%(name)s\":" -#: contrib/auth/models.py:112 -msgid "Permissions" -msgstr "Oprávnění" +#: contrib/admin/views/main.py:514 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Záznam \"%(obj)s\" typu \"%(name)s\" byl úspěšně smazán." -#: contrib/auth/models.py:113 -msgid "Important dates" -msgstr "Důležitá data" +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "Jste si jist(á)?" -#: contrib/auth/models.py:114 -msgid "Groups" -msgstr "Skupiny" +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "Historie změn: %s" -#: contrib/auth/models.py:256 -msgid "message" -msgstr "zpráva" +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "%s: vybrat" -#: contrib/auth/forms.py:52 -msgid "Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in." -msgstr "Váš prohlížeč pravděpodobně nemá zapnuté cookies. Cookies jsou potřeba pro zalogování." +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "%s: vybrat pro změnu" -#: contrib/auth/forms.py:61 -msgid "This account is inactive." -msgstr "Tento účet není aktivní." +#: contrib/admin/views/main.py:768 +msgid "Database error" +msgstr "Databázová chyba" -#: contrib/contenttypes/models.py:20 -msgid "python model class name" -msgstr "jméno modelu Pythonu" +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Prosíme, znovu se přihlašte, Vaše sezení vypršelo. Nemusíte se obávat, Vaše " +"podání je uloženo." -#: contrib/contenttypes/models.py:23 -msgid "content type" -msgstr "typ obsahu" +#: contrib/admin/views/decorators.py:69 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Vypadá to, že Váš prohlížeč není nastaven, aby akceptoval cookies. Prosíme, " +"zapněte cookies, obnovte tuto stránku a zkuste znovu." -#: contrib/contenttypes/models.py:24 -msgid "content types" -msgstr "typy obsahu" +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Uživatelská jména nemohou obsahovat znak \"@\"." -#: contrib/sessions/models.py:51 +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Vaše e-mailová adresa není Vaše uživatelské jméno. Zkuste místo toho \"%s\"." + +#: contrib/admin/templatetags/admin_list.py:249 +msgid "All dates" +msgstr "Všechna data" + +#: contrib/sessions/models.py:68 msgid "session key" msgstr "klíč sezení" -#: contrib/sessions/models.py:52 +#: contrib/sessions/models.py:69 msgid "session data" msgstr "data sezení" -#: contrib/sessions/models.py:53 +#: contrib/sessions/models.py:70 msgid "expire date" msgstr "datum expirace" -#: contrib/sessions/models.py:57 +#: contrib/sessions/models.py:74 msgid "session" msgstr "sezení" -#: contrib/sessions/models.py:58 +#: contrib/sessions/models.py:75 msgid "sessions" msgstr "sezení" -#: contrib/sites/models.py:10 -msgid "domain name" -msgstr "jméno domény" +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "arabsky" -#: contrib/sites/models.py:11 -msgid "display name" -msgstr "zobrazené jméno" +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "bengálsky" -#: contrib/sites/models.py:15 -msgid "site" -msgstr "web" +#: conf/global_settings.py:41 +msgid "Bulgarian" +msgstr "bulharsky" -#: contrib/sites/models.py:16 -msgid "sites" -msgstr "weby" +#: conf/global_settings.py:42 +msgid "Catalan" +msgstr "katalánsky" + +#: conf/global_settings.py:43 +msgid "Czech" +msgstr "česky" + +#: conf/global_settings.py:44 +msgid "Welsh" +msgstr "welšsky" + +#: conf/global_settings.py:45 +msgid "Danish" +msgstr "dánsky" + +#: conf/global_settings.py:46 +msgid "German" +msgstr "německy" + +#: conf/global_settings.py:47 +msgid "Greek" +msgstr "řecky" + +#: conf/global_settings.py:48 +msgid "English" +msgstr "anglicky" + +#: conf/global_settings.py:49 +msgid "Spanish" +msgstr "španělsky" + +#: conf/global_settings.py:50 +msgid "Argentinean Spanish" +msgstr "argentinskou španělštinou" + +#: conf/global_settings.py:51 +msgid "Finnish" +msgstr "finsky" + +#: conf/global_settings.py:52 +msgid "French" +msgstr "francouzsky" + +#: conf/global_settings.py:53 +msgid "Galician" +msgstr "galicijsky" + +#: conf/global_settings.py:54 +msgid "Hungarian" +msgstr "maďarsky" + +#: conf/global_settings.py:55 +msgid "Hebrew" +msgstr "hebrejsky" + +#: conf/global_settings.py:56 +msgid "Icelandic" +msgstr "islandsky" + +#: conf/global_settings.py:57 +msgid "Italian" +msgstr "italsky" + +#: conf/global_settings.py:58 +msgid "Japanese" +msgstr "japonsky" + +#: conf/global_settings.py:59 +msgid "Korean" +msgstr "korejsky" + +#: conf/global_settings.py:60 +msgid "Kannada" +msgstr "kannadsky" + +#: conf/global_settings.py:61 +msgid "Latvian" +msgstr "litevsky" + +#: conf/global_settings.py:62 +msgid "Macedonian" +msgstr "makedonsky" + +#: conf/global_settings.py:63 +msgid "Dutch" +msgstr "holandsky" + +#: conf/global_settings.py:64 +msgid "Norwegian" +msgstr "norsky" + +#: conf/global_settings.py:65 +msgid "Polish" +msgstr "polsky" + +#: conf/global_settings.py:66 +msgid "Portugese" +msgstr "portugalsky" + +#: conf/global_settings.py:67 +msgid "Brazilian" +msgstr "brazilsky" + +#: conf/global_settings.py:68 +msgid "Romanian" +msgstr "rumunsky" + +#: conf/global_settings.py:69 +msgid "Russian" +msgstr "rusky" + +#: conf/global_settings.py:70 +msgid "Slovak" +msgstr "slovensky" + +#: conf/global_settings.py:71 +msgid "Slovenian" +msgstr "slovinsky" + +#: conf/global_settings.py:72 +msgid "Serbian" +msgstr "srbsky" + +#: conf/global_settings.py:73 +msgid "Swedish" +msgstr "švédsky" + +#: conf/global_settings.py:74 +msgid "Tamil" +msgstr "tamilsky" + +#: conf/global_settings.py:75 +msgid "Telugu" +msgstr "telužsky" + +#: conf/global_settings.py:76 +msgid "Turkish" +msgstr "turecky" + +#: conf/global_settings.py:77 +msgid "Ukrainian" +msgstr "ukrajinsky" + +#: conf/global_settings.py:78 +msgid "Simplified Chinese" +msgstr "jednoduchou čínštinou" + +#: conf/global_settings.py:79 +msgid "Traditional Chinese" +msgstr "tradiční čínštinou" + +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "Záznam typu \"%(verbose_name)s\" byl úspěšně vytvořen." + +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "Záznam typu \"%(verbose_name)s\" byl úspěšně změnen." + +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "Záznam typu \"%(verbose_name)s\" byl smazán." + +#: oldforms/__init__.py:361 db/models/fields/__init__.py:121 +#: db/models/fields/__init__.py:278 db/models/fields/__init__.py:675 +#: db/models/fields/__init__.py:686 newforms/models.py:185 +#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:520 +#: newforms/fields.py:531 +msgid "This field is required." +msgstr "Toto pole je povinné." + +#: oldforms/__init__.py:396 +#, python-format +msgid "Ensure your text is less than %s character." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Ujistěte se, že Váš text má méně než %s znak." +msgstr[1] "Ujistěte se, že Váš text má méně než %s znaky." +msgstr[2] "Ujistěte se, že Váš text má méně než %s znaků." + +#: oldforms/__init__.py:401 +msgid "Line breaks are not allowed here." +msgstr "Zalomení řádky zde není povoleno." + +#: oldforms/__init__.py:502 oldforms/__init__.py:575 oldforms/__init__.py:614 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Vyberte platnou volbu. \"%(data)s\" není mezi %(choices)s." + +#: oldforms/__init__.py:676 core/validators.py:175 core/validators.py:453 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Soubor nebyl odeslán. Zkontrolujte \"encoding type\" formuláře." + +#: oldforms/__init__.py:678 +msgid "The submitted file is empty." +msgstr "Poslaný soubor je prázdný." + +#: oldforms/__init__.py:734 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Vložte celé číslo mezi -32768 a 32767." + +#: oldforms/__init__.py:744 +msgid "Enter a positive number." +msgstr "Vložte celé kladné číslo." + +#: oldforms/__init__.py:754 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Vložte celé číslo mezi 0 a 32767." + +#: core/validators.py:65 +msgid "This value must contain only letters, numbers and underscores." +msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka." + +#: core/validators.py:69 +msgid "" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "" +"Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka, pomlčky nebo " +"lomítka." + +#: core/validators.py:73 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo čárky." + +#: core/validators.py:77 +msgid "Uppercase letters are not allowed here." +msgstr "Velká písmena zde nejsou povolená." + +#: core/validators.py:81 +msgid "Lowercase letters are not allowed here." +msgstr "Malá písmena zde nejsou povolená." + +#: core/validators.py:88 +msgid "Enter only digits separated by commas." +msgstr "Vložte pouze cifry oddělené čárkami." + +#: core/validators.py:100 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Vložte platné e-mailové adresy oddělené čárkami." + +#: core/validators.py:104 +msgid "Please enter a valid IP address." +msgstr "Prosíme, zadejte platnou IP adresu." + +#: core/validators.py:108 +msgid "Empty values are not allowed here." +msgstr "Zde nejsou povolené prázdné hodnoty." + +#: core/validators.py:112 +msgid "Non-numeric characters aren't allowed here." +msgstr "Znaky, které nejsou čísla, zde nejsou povoleny." + +#: core/validators.py:116 +msgid "This value can't be comprised solely of digits." +msgstr "Tato hodnota nemůže být složená pouze z cifer." + +#: core/validators.py:121 newforms/fields.py:135 +msgid "Enter a whole number." +msgstr "Vložte celé číslo." + +#: core/validators.py:125 +msgid "Only alphabetical characters are allowed here." +msgstr "Zde jsou povoleny pouze alfanumerické znaky." + +#: core/validators.py:140 +msgid "Year must be 1900 or later." +msgstr "Rok musí být 1900 a vyšší." + +#: core/validators.py:144 +#, python-format +msgid "Invalid date: %s" +msgstr "Neplatné datum: %s" + +#: core/validators.py:149 db/models/fields/__init__.py:463 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Vložte platné datum ve formátu RRRR-MM-DD." + +#: core/validators.py:154 +msgid "Enter a valid time in HH:MM format." +msgstr "Vložte platný čas ve formátu HH:MM." + +#: core/validators.py:158 db/models/fields/__init__.py:532 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "Vložte platné datum a čas ve formátu RRRR-MM-DD HH:MM." + +#: core/validators.py:163 newforms/fields.py:339 +msgid "Enter a valid e-mail address." +msgstr "Vložte platnou e-mailovou adresu." + +#: core/validators.py:179 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Nahrajte na server platný obrázek. Poslaný soubor nebyl obrázkem nebo byl " +"poškozen." + +#: core/validators.py:186 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "URL %s neodkazuje na platný obrázek." + +#: core/validators.py:190 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "Telefonní čísla musí být ve formátu XXX-XXX-XXXX. \"%s\" není platné." + +#: core/validators.py:198 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "URL %s neodkazuje na platné video ve formátu QuickTime." + +#: core/validators.py:202 +msgid "A valid URL is required." +msgstr "Je vyžadováno platné URL." + +#: core/validators.py:216 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Je vyžadováno platné HTML. Konkrétní chyby jsou:\n" +"%s" + +#: core/validators.py:223 +#, python-format +msgid "Badly formed XML: %s" +msgstr "Špatně formované XML: %s" + +#: core/validators.py:240 +#, python-format +msgid "Invalid URL: %s" +msgstr "Neplatné URL: %s" + +#: core/validators.py:245 core/validators.py:247 +#, python-format +msgid "The URL %s is a broken link." +msgstr "Odkaz na URL %s nefunguje." + +#: core/validators.py:253 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Vložte platnou zkratku U.S. státu." + +#: core/validators.py:267 +#, python-format +msgid "Watch your mouth! The word %s is not allowed here." +msgid_plural "Watch your mouth! The words %s are not allowed here." +msgstr[0] "Mluvte slušně! Slovo %s zde není přípustné." +msgstr[1] "Mluvte slušně! Slova %s zde nejsou přípustná." +msgstr[2] "Mluvte slušně! Slova %s zde nejsou přípustná." + +#: core/validators.py:274 +#, python-format +msgid "This field must match the '%s' field." +msgstr "Toto pole se musí shodovat s polem \"%s\"." + +#: core/validators.py:293 +msgid "Please enter something for at least one field." +msgstr "Prosíme, vložte něco alespoň pro jedno pole." + +#: core/validators.py:302 core/validators.py:313 +msgid "Please enter both fields or leave them both empty." +msgstr "Prosíme, vložte obě pole, nebo je nechte obě prázdná." + +#: core/validators.py:321 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "Toto pole musí být vyplněno, když %(field)s má %(value)s" + +#: core/validators.py:334 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "Toto pole musí být vyplněno, když %(field)s nemá %(value)s" + +#: core/validators.py:353 +msgid "Duplicate values are not allowed." +msgstr "Duplikátní hodnoty nejsou povolené." + +#: core/validators.py:368 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "Tato hodnota musí být mezi %(lower)s and %(upper)s." + +#: core/validators.py:370 +#, python-format +msgid "This value must be at least %s." +msgstr "Tato hodnota musí alespoň %s." + +#: core/validators.py:372 +#, python-format +msgid "This value must be no more than %s." +msgstr "Tato hodnota nesmí být více než %s." + +#: core/validators.py:408 +#, python-format +msgid "This value must be a power of %s." +msgstr "Tato hodnota musí být mocninou %s." + +#: core/validators.py:417 +msgid "Please enter a valid decimal number." +msgstr "Prosíme, vložte platné číslo." + +#: core/validators.py:423 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." +msgid_plural "" +"Please enter a valid decimal number with at most %s total digits." +msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou celkem." +msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem." +msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem." + +#: core/validators.py:426 +#, python-format +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou." +msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi." +msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi." + +#: core/validators.py:429 +#, python-format +msgid "Please enter a valid decimal number with at most %s decimal place." +msgid_plural "" +"Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "" +"Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem." +msgstr[1] "" +"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou " +"celkem." +msgstr[2] "" +"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou " +"celkem." + +#: core/validators.py:437 +msgid "Please enter a valid floating point number." +msgstr "Prosíme, vložte platné reálné číslo." + +#: core/validators.py:446 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Ujistěte se, že poslaný soubor má nejméně %s bytů." + +#: core/validators.py:447 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "Ujistěte se, že soubor má nejvíce %s bytů." + +#: core/validators.py:464 +msgid "The format for this field is wrong." +msgstr "Formát pro toto pole je špatný." + +#: core/validators.py:479 +msgid "This field is invalid." +msgstr "Toto pole není platné." + +#: core/validators.py:515 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "Nelze získat nic z %s." + +#: core/validators.py:518 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" +"URL %(url)s vrátilo neplatnou hlavičku Content-Type \"%(contenttype)s\"." + +#: core/validators.py:551 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" +"Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s " +"\"%(start)s\".)" + +#: core/validators.py:555 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. " +"(Řádka začíná s \"%(start)s\".)" + +#: core/validators.py:560 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%" +"(start)s\".)" + +#: core/validators.py:565 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%" +"(start)s\".)" + +#: core/validators.py:569 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. " +"(Řádka začíná s \"%(start)s\".)" + +#: core/validators.py:574 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s " +"\"%(start)s\".)" + +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" +"%(object)s s takto vyplněným polem \"%(type)s\" již existuje pro dané pole " +"\"%(field)s\"." + +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "Prosíme, zadejte %s správně." + +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "Oddělte více identifikátorů čárkami." + +#: db/models/fields/related.py:644 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Podržte \"Control\" (nebo \"Command\" na Macu) pro vybrání více jak jedné " +"položky." + +#: db/models/fields/related.py:691 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid." +msgstr[0] "Prosíme, vložte platná %(self)s ID. Hodnota %(value)r není platná." +msgstr[1] "" +"Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné." +msgstr[2] "" +"Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné." + +#: db/models/fields/__init__.py:46 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "%(optname)s s takto vyplněným polem \"%(fieldname)s\" již existuje." + +#: db/models/fields/__init__.py:373 +msgid "This value must be an integer." +msgstr "Tato hodnota musí být celé číslo." + +#: db/models/fields/__init__.py:408 +msgid "This value must be either True or False." +msgstr "Tato hodnota musí být buď Ano (True), nebo Ne (False)." + +#: db/models/fields/__init__.py:429 +msgid "This field cannot be null." +msgstr "Toto pole nemůže být prázdné (null)." + +#: db/models/fields/__init__.py:592 +msgid "This value must be a decimal number." +msgstr "Tato hodnota musí být celé číslo." + +#: db/models/fields/__init__.py:695 +msgid "Enter a valid filename." +msgstr "Vložte platný název souboru." + +#: db/models/fields/__init__.py:818 +msgid "This value must be either None, True or False." +msgstr "Tato hodnota musí být buď Nic (None), Ano (True) nebo Ne (False)." + +#: template/defaultfilters.py:491 +msgid "yes,no,maybe" +msgstr "ano, ne, možná" + +#: template/defaultfilters.py:520 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#: template/defaultfilters.py:522 +#, python-format +msgid "%.1f KB" +msgstr "" + +#: template/defaultfilters.py:524 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: template/defaultfilters.py:525 +#, python-format +msgid "%.1f GB" +msgstr "" + +#: newforms/models.py:172 newforms/fields.py:432 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Vyberte platnou možnost. Tato není dostupná." + +#: newforms/models.py:189 newforms/fields.py:448 newforms/fields.py:524 +msgid "Enter a list of values." +msgstr "Vložte seznam hodnot." + +#: newforms/models.py:195 newforms/fields.py:457 +#, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Vyberte platnou možnost. Volba %s není dostupná." + +#: newforms/fields.py:110 newforms/fields.py:324 +#, python-format +msgid "Ensure this value has at most %d characters." +msgstr "Tato hodnota musí mít nejvíce %d znaků." + +#: newforms/fields.py:112 newforms/fields.py:326 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "Tato hodnota musí mít nejméně %d znaků." + +#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192 +#, python-format +msgid "Ensure this value is less than or equal to %s." +msgstr "Tato hodnota musí být menší nebo rovná %s." + +#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194 +#, python-format +msgid "Ensure this value is greater than or equal to %s." +msgstr "Tato hodnota musí být větší nebo rovná %s." + +#: newforms/fields.py:158 newforms/fields.py:186 +msgid "Enter a number." +msgstr "Vložte číslo." + +#: newforms/fields.py:196 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "Tato hodnota nesmí mít celkem více než %s cifer." + +#: newforms/fields.py:198 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "Tato hodnota nesmí mít za desetinou čárkou více než %s cifer." + +#: newforms/fields.py:200 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "Tato hodnota nesmí mít před desetinnou čárkou více než %s cifer." + +#: newforms/fields.py:233 +msgid "Enter a valid date." +msgstr "Vložte platné datum." + +#: newforms/fields.py:260 +msgid "Enter a valid time." +msgstr "Vložte platný čas." + +#: newforms/fields.py:296 +msgid "Enter a valid date/time." +msgstr "Vložte platný datum a čas." + +#: newforms/fields.py:310 +msgid "Enter a valid value." +msgstr "Vložte platnou hodnotu." + +#: newforms/fields.py:357 newforms/fields.py:379 +msgid "Enter a valid URL." +msgstr "Vložte platnou URL." + +#: newforms/fields.py:381 +msgid "This URL appears to be a broken link." +msgstr "Tento odkaz nefunguje." + +#: utils/timesince.py:12 +msgid "year" +msgid_plural "years" +msgstr[0] "rok" +msgstr[1] "roky" +msgstr[2] "let" + +#: utils/timesince.py:13 +msgid "month" +msgid_plural "months" +msgstr[0] "měsíc" +msgstr[1] "měsíce" +msgstr[2] "měsíců" + +#: utils/timesince.py:14 +msgid "week" +msgid_plural "weeks" +msgstr[0] "týden" +msgstr[1] "týdny" +msgstr[2] "týdnů" + +#: utils/timesince.py:15 +msgid "day" +msgid_plural "days" +msgstr[0] "den" +msgstr[1] "dny" +msgstr[2] "dnů" + +#: utils/timesince.py:16 +msgid "hour" +msgid_plural "hours" +msgstr[0] "hodina" +msgstr[1] "hodiny" +msgstr[2] "hodin" + +#: utils/timesince.py:17 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minuta" +msgstr[1] "minuty" +msgstr[2] "minut" + +#: utils/timesince.py:40 +#, python-format +msgid "%d milliseconds" +msgstr "" + +#: utils/timesince.py:41 +#, python-format +msgid "%(number)d %(type)s" +msgstr "" + +#: utils/timesince.py:47 +#, python-format +msgid ", %(number)d %(type)s" +msgstr "" + +#: utils/dateformat.py:40 +msgid "p.m." +msgstr "odp." + +#: utils/dateformat.py:41 +msgid "a.m." +msgstr "dop." + +#: utils/dateformat.py:46 +msgid "PM" +msgstr "odp." + +#: utils/dateformat.py:47 +msgid "AM" +msgstr "dop." + +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "půlnoc" + +#: utils/dateformat.py:97 +msgid "noon" +msgstr "poledne" #: utils/dates.py:6 msgid "Monday" -msgstr "Pondělí" +msgstr "pondělí" #: utils/dates.py:6 msgid "Tuesday" -msgstr "Úterý" +msgstr "úterý" #: utils/dates.py:6 msgid "Wednesday" -msgstr "Středa" +msgstr "středa" #: utils/dates.py:6 msgid "Thursday" -msgstr "Čtvrtek" +msgstr "čtvrtek" #: utils/dates.py:6 msgid "Friday" -msgstr "Pátek" +msgstr "pátek" #: utils/dates.py:7 msgid "Saturday" -msgstr "Sobota" +msgstr "sobota" #: utils/dates.py:7 msgid "Sunday" -msgstr "Neděle" +msgstr "neděle" #: utils/dates.py:14 msgid "January" -msgstr "Leden" +msgstr "leden" #: utils/dates.py:14 msgid "February" -msgstr "Únor" +msgstr "únor" -#: utils/dates.py:14 -#: utils/dates.py:27 +#: utils/dates.py:14 utils/dates.py:27 msgid "March" -msgstr "Březen" +msgstr "březen" -#: utils/dates.py:14 -#: utils/dates.py:27 +#: utils/dates.py:14 utils/dates.py:27 msgid "April" -msgstr "Duben" +msgstr "duben" -#: utils/dates.py:14 -#: utils/dates.py:27 +#: utils/dates.py:14 utils/dates.py:27 msgid "May" -msgstr "Květen" +msgstr "květen" -#: utils/dates.py:14 -#: utils/dates.py:27 +#: utils/dates.py:14 utils/dates.py:27 msgid "June" -msgstr "Červen" +msgstr "červen" -#: utils/dates.py:15 -#: utils/dates.py:27 +#: utils/dates.py:15 utils/dates.py:27 msgid "July" -msgstr "Červenec" +msgstr "červenec" #: utils/dates.py:15 msgid "August" -msgstr "Srpen" +msgstr "srpen" #: utils/dates.py:15 msgid "September" -msgstr "Září" +msgstr "září" #: utils/dates.py:15 msgid "October" -msgstr "Říjen" +msgstr "říjen" #: utils/dates.py:15 msgid "November" -msgstr "Listopad" +msgstr "listopad" #: utils/dates.py:16 msgid "December" -msgstr "Prosinec" +msgstr "prosinec" #: utils/dates.py:19 msgid "jan" @@ -1519,592 +2987,48 @@ msgstr "pro" #: utils/dates.py:27 msgid "Jan." -msgstr "Led." +msgstr "led." #: utils/dates.py:27 msgid "Feb." -msgstr "Ún." +msgstr "ún." #: utils/dates.py:28 msgid "Aug." -msgstr "Srp." +msgstr "srp." #: utils/dates.py:28 msgid "Sept." -msgstr "Zář." +msgstr "zář." #: utils/dates.py:28 msgid "Oct." -msgstr "Říj." +msgstr "říj." #: utils/dates.py:28 msgid "Nov." -msgstr "List." +msgstr "list." #: utils/dates.py:28 msgid "Dec." -msgstr "Pros." +msgstr "pros." -#: utils/timesince.py:12 -msgid "year" -msgid_plural "years" -msgstr[0] "rok" -msgstr[1] "roky" -msgstr[2] "let" - -#: utils/timesince.py:13 -msgid "month" -msgid_plural "months" -msgstr[0] "měsíc" -msgstr[1] "měsíce" -msgstr[2] "měsíců" - -#: utils/timesince.py:14 -msgid "week" -msgid_plural "weeks" -msgstr[0] "týden" -msgstr[1] "týdny" -msgstr[2] "týdnů" - -#: utils/timesince.py:15 -msgid "day" -msgid_plural "days" -msgstr[0] "den" -msgstr[1] "dny" -msgstr[2] "dnů" - -#: utils/timesince.py:16 -msgid "hour" -msgid_plural "hours" -msgstr[0] "hodina" -msgstr[1] "hodiny" -msgstr[2] "hodin" - -#: utils/timesince.py:17 -msgid "minute" -msgid_plural "minutes" -msgstr[0] "minuta" -msgstr[1] "minuty" -msgstr[2] "minut" - -#: utils/translation/trans_real.py:362 +#: utils/translation/trans_real.py:358 msgid "DATE_FORMAT" -msgstr "j.n.Y" +msgstr "j. n. Y" -#: utils/translation/trans_real.py:363 +#: utils/translation/trans_real.py:359 msgid "DATETIME_FORMAT" -msgstr "j.n.Y, H:i" +msgstr "j. n. Y, H:i" -#: utils/translation/trans_real.py:364 +#: utils/translation/trans_real.py:360 msgid "TIME_FORMAT" msgstr "H:i" -#: utils/translation/trans_real.py:380 +#: utils/translation/trans_real.py:376 msgid "YEAR_MONTH_FORMAT" msgstr "F Y" -#: utils/translation/trans_real.py:381 +#: utils/translation/trans_real.py:377 msgid "MONTH_DAY_FORMAT" msgstr "j. F" - -#: conf/global_settings.py:39 -msgid "Arabic" -msgstr "Arabic" - -#: conf/global_settings.py:40 -msgid "Bengali" -msgstr "Bengálsky" - -#: conf/global_settings.py:41 -msgid "Czech" -msgstr "Česky" - -#: conf/global_settings.py:42 -msgid "Welsh" -msgstr "Welšsky" - -#: conf/global_settings.py:43 -msgid "Danish" -msgstr "Dánsky" - -#: conf/global_settings.py:44 -msgid "German" -msgstr "Německy" - -#: conf/global_settings.py:45 -msgid "Greek" -msgstr "Řecky" - -#: conf/global_settings.py:46 -msgid "English" -msgstr "Anglicky" - -#: conf/global_settings.py:47 -msgid "Spanish" -msgstr "Španělsky" - -#: conf/global_settings.py:48 -msgid "Argentinean Spanish" -msgstr "Argentinean Spanish" - -#: conf/global_settings.py:49 -msgid "Finnish" -msgstr "Finsky" - -#: conf/global_settings.py:50 -msgid "French" -msgstr "Francouzsky" - -#: conf/global_settings.py:51 -msgid "Galician" -msgstr "Galicijsky" - -#: conf/global_settings.py:52 -msgid "Hungarian" -msgstr "Maďarsky" - -#: conf/global_settings.py:53 -msgid "Hebrew" -msgstr "Hebrejsky" - -#: conf/global_settings.py:54 -msgid "Icelandic" -msgstr "Islandština" - -#: conf/global_settings.py:55 -msgid "Italian" -msgstr "Italsky" - -#: conf/global_settings.py:56 -msgid "Japanese" -msgstr "Japonština" - -#: conf/global_settings.py:57 -msgid "Dutch" -msgstr "Holandština" - -#: conf/global_settings.py:58 -msgid "Norwegian" -msgstr "Norsky" - -#: conf/global_settings.py:59 -msgid "Brazilian" -msgstr "Brazilsky" - -#: conf/global_settings.py:60 -msgid "Romanian" -msgstr "Rumunsky" - -#: conf/global_settings.py:61 -msgid "Russian" -msgstr "Rusky" - -#: conf/global_settings.py:62 -msgid "Slovak" -msgstr "Slovensky" - -#: conf/global_settings.py:63 -msgid "Slovenian" -msgstr "Slovinsky" - -#: conf/global_settings.py:64 -msgid "Serbian" -msgstr "Srbsky" - -#: conf/global_settings.py:65 -msgid "Swedish" -msgstr "Švédsky" - -#: conf/global_settings.py:66 -msgid "Tamil" -msgstr "Tamil" - -#: conf/global_settings.py:67 -msgid "Turkish" -msgstr "Turecky" - -#: conf/global_settings.py:68 -msgid "Ukrainian" -msgstr "Ukrajinsky" - -#: conf/global_settings.py:69 -msgid "Simplified Chinese" -msgstr "Jednoduchá čínština" - -#: conf/global_settings.py:70 -msgid "Traditional Chinese" -msgstr "Tradiční čínština" - -#: core/validators.py:63 -msgid "This value must contain only letters, numbers and underscores." -msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka." - -#: core/validators.py:67 -msgid "This value must contain only letters, numbers, underscores, dashes or slashes." -msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka, pomlčky nebo lomítka." - -#: core/validators.py:71 -msgid "This value must contain only letters, numbers, underscores or hyphens." -msgstr "Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo čárky." - -#: core/validators.py:75 -msgid "Uppercase letters are not allowed here." -msgstr "Velká písmena zde nejsou povolená." - -#: core/validators.py:79 -msgid "Lowercase letters are not allowed here." -msgstr "Malá písmena zde nejsou povolená." - -#: core/validators.py:86 -msgid "Enter only digits separated by commas." -msgstr "Vložte pouze cifry oddělené čárkami." - -#: core/validators.py:98 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Vložte platné e-mailové adresy oddělené čárkami." - -#: core/validators.py:102 -msgid "Please enter a valid IP address." -msgstr "Prosíme, zadejte platnou IP adresu." - -#: core/validators.py:106 -msgid "Empty values are not allowed here." -msgstr "Zde nejsou povolené prázdné hodnoty." - -#: core/validators.py:110 -msgid "Non-numeric characters aren't allowed here." -msgstr "Znaky, které nejsou čísla, nejsou zde povoleny." - -#: core/validators.py:114 -msgid "This value can't be comprised solely of digits." -msgstr "Tato hodnota nemůže být složená pouze z cifer." - -#: core/validators.py:119 -msgid "Enter a whole number." -msgstr "Vložte celé číslo." - -#: core/validators.py:123 -msgid "Only alphabetical characters are allowed here." -msgstr "Zde jsou povoleny pouze alfanumerické znaky." - -#: core/validators.py:138 -msgid "Year must be 1900 or later." -msgstr "Rok musí být 1900 a vyšší." - -#: core/validators.py:142 -#, python-format -msgid "Invalid date: %s." -msgstr "Neplatné datum: %s." - -#: core/validators.py:146 -#: db/models/fields/__init__.py:415 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Vložte platné datum ve formátu RRRR-MM-DD." - -#: core/validators.py:151 -msgid "Enter a valid time in HH:MM format." -msgstr "Vložte platný čas ve formátu HH:MM." - -#: core/validators.py:155 -#: db/models/fields/__init__.py:477 -msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "Vložte platné datum a čas ve formátu RRRR-MM-DD HH:MM." - -#: core/validators.py:160 -msgid "Enter a valid e-mail address." -msgstr "Vložte platnou e-mailovou adresu." - -#: core/validators.py:172 -#: core/validators.py:401 -#: forms/__init__.py:661 -msgid "No file was submitted. Check the encoding type on the form." -msgstr "Soubor nebyl odeslán. Zkontrolujte encoding type formuláře." - -#: core/validators.py:176 -msgid "Upload a valid image. The file you uploaded was either not an image or a corrupted image." -msgstr "Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl obrázek, nebo byl porušen." - -#: core/validators.py:183 -#, python-format -msgid "The URL %s does not point to a valid image." -msgstr "URL %s neukazuje na platný obrázek." - -#: core/validators.py:187 -#, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "Telefonní čísla musí být ve formátu XXX-XXX-XXXX. \"%s\" není platné." - -#: core/validators.py:195 -#, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "URL %s neodkazuje na platné video ve formátu QuickTime." - -#: core/validators.py:199 -msgid "A valid URL is required." -msgstr "Je vyžadováno platné URL." - -#: core/validators.py:213 -#, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" -msgstr "" -"Je vyžadováno platné HTML. Konkrétní chyby jsou:\n" -"%s" - -#: core/validators.py:220 -#, python-format -msgid "Badly formed XML: %s" -msgstr "Špatně formované XML: %s" - -#: core/validators.py:230 -#, python-format -msgid "Invalid URL: %s" -msgstr "Neplatné URL: %s" - -#: core/validators.py:234 -#: core/validators.py:236 -#, python-format -msgid "The URL %s is a broken link." -msgstr "Odkaz na URL %s je rozbitý." - -#: core/validators.py:242 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Vložte platnou zkraku U.S. státu." - -#: core/validators.py:256 -#, python-format -msgid "Watch your mouth! The word %s is not allowed here." -msgid_plural "Watch your mouth! The words %s are not allowed here." -msgstr[0] "Mluvte slušně! Slovo %s zde není přípustné." -msgstr[1] "Mluvte slušně! Slova %s zde nejsou přípustná." -msgstr[2] "Mluvte slušně! Slova %s zde nejsou přípustná." - -#: core/validators.py:263 -#, python-format -msgid "This field must match the '%s' field." -msgstr "Toto pole se musí shodovat s polem '%s'." - -#: core/validators.py:282 -msgid "Please enter something for at least one field." -msgstr "Prosíme, vložte něco alespoň pro jedno pole." - -#: core/validators.py:291 -#: core/validators.py:302 -msgid "Please enter both fields or leave them both empty." -msgstr "Prosíme, vložte obě pole, nebo je nechte obě prázdná." - -#: core/validators.py:309 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "Toto pole musí být vyplněno, když %(field)s má %(value)s" - -#: core/validators.py:321 -#, python-format -msgid "This field must be given if %(field)s is not %(value)s" -msgstr "Toto pole musí být vyplněno, když %(field)s nemá %(value)s" - -#: core/validators.py:340 -msgid "Duplicate values are not allowed." -msgstr "Duplikátní hodnoty nejsou povolené." - -#: core/validators.py:363 -#, python-format -msgid "This value must be a power of %s." -msgstr "Tato hodnota musí být mocninou %s." - -#: core/validators.py:374 -msgid "Please enter a valid decimal number." -msgstr "Prosíme, vložte platné číslo." - -#: core/validators.py:378 -#, python-format -msgid "Please enter a valid decimal number with at most %s total digit." -msgid_plural "Please enter a valid decimal number with at most %s total digits." -msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou celkem." -msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem." -msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem." - -#: core/validators.py:381 -#, python-format -msgid "Please enter a valid decimal number with a whole part of at most %s digit." -msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits." -msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou." -msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi." -msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi." - -#: core/validators.py:384 -#, python-format -msgid "Please enter a valid decimal number with at most %s decimal place." -msgid_plural "Please enter a valid decimal number with at most %s decimal places." -msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem." -msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem." -msgstr[2] "Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou celkem." - -#: core/validators.py:394 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Ujistěte se, že posílaný soubor je velký nejméně %s bytů." - -#: core/validators.py:395 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "Ujistěte se, že posílaný soubor je velký nejvíce %s bytů." - -#: core/validators.py:412 -msgid "The format for this field is wrong." -msgstr "Formát pro toto pole je špatný." - -#: core/validators.py:427 -msgid "This field is invalid." -msgstr "Toto pole není platné." - -#: core/validators.py:463 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "Nemohl jsem získat nic z %s." - -#: core/validators.py:466 -#, python-format -msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "URL %(url)s vrátilo neplatnou hlavičku Content-Type '%(contenttype)s'." - -#: core/validators.py:499 -#, python-format -msgid "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with \"%(start)s\".)" -msgstr "Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s \"%(start)s\".)" - -#: core/validators.py:503 -#, python-format -msgid "Some text starting on line %(line)s is not allowed in that context. (Line starts with \"%(start)s\".)" -msgstr "Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. (Řádka začíná s \"%(start)s\".)" - -#: core/validators.py:508 -#, python-format -msgid "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%(start)s\".)" -msgstr "\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%(start)s\".)" - -#: core/validators.py:513 -#, python-format -msgid "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%(start)s\".)" -msgstr "\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%(start)s\".)" - -#: core/validators.py:517 -#, python-format -msgid "A tag on line %(line)s is missing one or more required attributes. (Line starts with \"%(start)s\".)" -msgstr "Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. (Řádka začíná s \"%(start)s\".)" - -#: core/validators.py:522 -#, python-format -msgid "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line starts with \"%(start)s\".)" -msgstr "Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s \"%(start)s\".)" - -#: views/generic/create_update.py:43 -#, python-format -msgid "The %(verbose_name)s was created successfully." -msgstr "Záznam %(verbose_name)s byl úspěšně vytvořen." - -#: views/generic/create_update.py:117 -#, python-format -msgid "The %(verbose_name)s was updated successfully." -msgstr "Záznam %(verbose_name)s byl úspěšně změnen." - -#: views/generic/create_update.py:184 -#, python-format -msgid "The %(verbose_name)s was deleted." -msgstr "Záznam %(verbose_name)s byl smazán." - -#: db/models/manipulators.py:302 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "%(object)s s tímto %(type)s již existují pro daná %(field)s." - -#: db/models/fields/__init__.py:40 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "%(optname)s s tímto %(fieldname)s již existuje." - -#: db/models/fields/__init__.py:114 -#: db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:551 -#: db/models/fields/__init__.py:562 -#: forms/__init__.py:346 -msgid "This field is required." -msgstr "Toto pole je povinné." - -#: db/models/fields/__init__.py:340 -msgid "This value must be an integer." -msgstr "Tato hodnota musí být celé číslo." - -#: db/models/fields/__init__.py:372 -msgid "This value must be either True or False." -msgstr "Tato hodnota musí být buď Ano (True), nebo Ne (False)." - -#: db/models/fields/__init__.py:388 -msgid "This field cannot be null." -msgstr "Toto pole nemůže být prázdné (null)." - -#: db/models/fields/__init__.py:571 -msgid "Enter a valid filename." -msgstr "Vložte platný název souboru." - -#: db/models/fields/related.py:51 -#, python-format -msgid "Please enter a valid %s." -msgstr "Prosíme, zadejte %s správně." - -#: db/models/fields/related.py:618 -msgid "Separate multiple IDs with commas." -msgstr "Oddělte více identifikátorů čárkami." - -#: db/models/fields/related.py:620 -msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "Podržte \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné položky." - -#: db/models/fields/related.py:664 -#, python-format -msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." -msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid." -msgstr[0] "Prosíme, vložte platná %(self)s ID. Hodnota %(value)r není platná." -msgstr[1] "Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné." -msgstr[2] "Prosíme, vložte platná %(self)s ID. Hodnoty %(value)r nejsou platné." - -#: forms/__init__.py:381 -#, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "Ujistěte se, že Váš text má méně než %s znak." -msgstr[1] "Ujistěte se, že Váš text má méně než %s znaky." -msgstr[2] "Ujistěte se, že Váš text má méně než %s znaků." - -#: forms/__init__.py:386 -msgid "Line breaks are not allowed here." -msgstr "Zalomení řádky zde nenjsou povolená." - -#: forms/__init__.py:487 -#: forms/__init__.py:560 -#: forms/__init__.py:599 -#, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "Vyberte platnou volbu. '%(data)s' není mezi %(choices)s." - -#: forms/__init__.py:663 -msgid "The submitted file is empty." -msgstr "Odevzdaný soubor je prázdný." - -#: forms/__init__.py:719 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Vložte celé číslo mezi -32,768 a 32,767." - -#: forms/__init__.py:729 -msgid "Enter a positive number." -msgstr "Vložte celé kladné číslo." - -#: forms/__init__.py:739 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Vložte celé číslo mezi 0 a 32,767." - -#: template/defaultfilters.py:401 -msgid "yes,no,maybe" -msgstr "ano, ne, možná" - diff --git a/django/conf/locale/cs/LC_MESSAGES/djangojs.mo b/django/conf/locale/cs/LC_MESSAGES/djangojs.mo index 097bd199d8..d1e3f81a82 100644 Binary files a/django/conf/locale/cs/LC_MESSAGES/djangojs.mo and b/django/conf/locale/cs/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/cs/LC_MESSAGES/djangojs.po b/django/conf/locale/cs/LC_MESSAGES/djangojs.po index 9143b56fdd..652f00f819 100644 --- a/django/conf/locale/cs/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/cs/LC_MESSAGES/djangojs.po @@ -7,25 +7,34 @@ msgid "" msgstr "" "Project-Id-Version: Django JavaScript Czech translation\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2005-12-17 22:26+0100\n" -"PO-Revision-Date: 2006-05-03 12:04+0100\n" -"Last-Translator: \n" +"POT-Creation-Date: 2007-06-18 11:26+0200\n" "Language-Team: Czech\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" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" -"X-Poedit-Language: Czech\n" -"X-Poedit-Country: CZECH REPUBLIC\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n>1 && n<5 ? 1 : 2;\n" + +#: 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 "" +"Leden Únor Březen Duben Květen Červen Červenec Srpen Září Říjen Listopad " +"Prosinec" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota" #: contrib/admin/media/js/SelectFilter2.js:33 #, perl-format msgid "Available %s" -msgstr "K dispozici %s" +msgstr "Dostupná %s" #: contrib/admin/media/js/SelectFilter2.js:41 msgid "Choose all" -msgstr "Vybrat vše" +msgstr "Vybrat vše" #: contrib/admin/media/js/SelectFilter2.js:46 msgid "Add" @@ -38,75 +47,72 @@ msgstr "Odebrat" #: contrib/admin/media/js/SelectFilter2.js:53 #, perl-format msgid "Chosen %s" -msgstr "Vybraný %s" +msgstr "Vybraná %s" #: contrib/admin/media/js/SelectFilter2.js:54 msgid "Select your choice(s) and click " -msgstr "Vyberte si a klikněte" +msgstr "Vyberte si a klikněte " #: contrib/admin/media/js/SelectFilter2.js:59 msgid "Clear all" -msgstr "Vše vymazat" - -#: contrib/admin/media/js/dateparse.js:26 -#: contrib/admin/media/js/calendar.js:24 -msgid "January February March April May June July August September October November December" -msgstr "Leden Únor Březen Duben Květen Červen Červenec Srpen Září Říjen Listopad Prosinec" - -#: contrib/admin/media/js/dateparse.js:27 -#, fuzzy -msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" -msgstr "Neděle Pondělí Úterý Středa Čtvrtek Pátek Sobota" +msgstr "Vymazat vše" #: contrib/admin/media/js/calendar.js:25 -#, fuzzy msgid "S M T W T F S" msgstr "N P U S C P S" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:45 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:80 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "Ukázat" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "Skrýt" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 msgid "Now" msgstr "Nyní" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:48 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 msgid "Clock" msgstr "Hodiny" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:77 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 msgid "Choose a time" msgstr "Vyberte čas" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 msgid "Midnight" msgstr "Půlnoc" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 msgid "6 a.m." msgstr "6 ráno" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 msgid "Noon" msgstr "Poledne" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:87 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:168 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 msgid "Cancel" msgstr "Storno" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:111 -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:162 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 msgid "Today" msgstr "Dnes" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:114 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 msgid "Calendar" msgstr "Kalendář" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:160 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 msgid "Yesterday" msgstr "Včera" -#: contrib/admin/media/js/admin/DateTimeShortcuts.js:164 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 msgid "Tomorrow" msgstr "Zítra" - diff --git a/django/conf/locale/da/LC_MESSAGES/djangojs.mo b/django/conf/locale/da/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..1db40df910 Binary files /dev/null and b/django/conf/locale/da/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/da/LC_MESSAGES/djangojs.po b/django/conf/locale/da/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..4084313848 --- /dev/null +++ b/django/conf/locale/da/LC_MESSAGES/djangojs.po @@ -0,0 +1,118 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:32 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "" diff --git a/django/conf/locale/fa/LC_MESSAGES/django.mo b/django/conf/locale/fa/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..c16335d237 Binary files /dev/null and b/django/conf/locale/fa/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/fa/LC_MESSAGES/django.po b/django/conf/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 0000000000..0d4e74ccea --- /dev/null +++ b/django/conf/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,2854 @@ +# Persian translation of Django. +# Copyright (C) 2007 THE Django'S COPYRIGHT HOLDER +# This file is distributed under the same license as the Django package. +# +# +msgid "" +msgstr "" +"Project-Id-Version: Django 1.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-06-19 15:49+0330\n" +"PO-Revision-Date: 2007-06-19 16:14+0330\n" +"Last-Translator: Reza Mohammadi \n" +"Language-Team: Persian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit" + +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "" + +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "" + +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "" + +#: core/validators.py:65 +msgid "This value must contain only letters, numbers and underscores." +msgstr "" + +#: core/validators.py:69 +msgid "" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "" + +#: core/validators.py:73 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "" + +#: core/validators.py:77 +msgid "Uppercase letters are not allowed here." +msgstr "" + +#: core/validators.py:81 +msgid "Lowercase letters are not allowed here." +msgstr "" + +#: core/validators.py:88 +msgid "Enter only digits separated by commas." +msgstr "" + +#: core/validators.py:100 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "" + +#: core/validators.py:104 +msgid "Please enter a valid IP address." +msgstr "" + +#: core/validators.py:108 +msgid "Empty values are not allowed here." +msgstr "" + +#: core/validators.py:112 +msgid "Non-numeric characters aren't allowed here." +msgstr "" + +#: core/validators.py:116 +msgid "This value can't be comprised solely of digits." +msgstr "" + +#: core/validators.py:121 newforms/fields.py:135 +msgid "Enter a whole number." +msgstr "" + +#: core/validators.py:125 +msgid "Only alphabetical characters are allowed here." +msgstr "" + +#: core/validators.py:140 +msgid "Year must be 1900 or later." +msgstr "" + +#: core/validators.py:144 +#, python-format +msgid "Invalid date: %s" +msgstr "" + +#: core/validators.py:149 db/models/fields/__init__.py:463 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "" + +#: core/validators.py:154 +msgid "Enter a valid time in HH:MM format." +msgstr "" + +#: core/validators.py:158 db/models/fields/__init__.py:532 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "" + +#: core/validators.py:163 newforms/fields.py:339 +msgid "Enter a valid e-mail address." +msgstr "" + +#: core/validators.py:175 core/validators.py:453 oldforms/__init__.py:676 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "" + +#: core/validators.py:179 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: core/validators.py:186 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "" + +#: core/validators.py:190 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" + +#: core/validators.py:198 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "" + +#: core/validators.py:202 +msgid "A valid URL is required." +msgstr "" + +#: core/validators.py:216 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" + +#: core/validators.py:223 +#, python-format +msgid "Badly formed XML: %s" +msgstr "" + +#: core/validators.py:240 +#, python-format +msgid "Invalid URL: %s" +msgstr "" + +#: core/validators.py:245 core/validators.py:247 +#, python-format +msgid "The URL %s is a broken link." +msgstr "" + +#: core/validators.py:253 +msgid "Enter a valid U.S. state abbreviation." +msgstr "" + +#: core/validators.py:267 +#, python-format +msgid "Watch your mouth! The word %s is not allowed here." +msgstr "" + +#: core/validators.py:274 +#, python-format +msgid "This field must match the '%s' field." +msgstr "" + +#: core/validators.py:293 +msgid "Please enter something for at least one field." +msgstr "" + +#: core/validators.py:302 core/validators.py:313 +msgid "Please enter both fields or leave them both empty." +msgstr "" + +#: core/validators.py:321 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "" + +#: core/validators.py:334 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "" + +#: core/validators.py:353 +msgid "Duplicate values are not allowed." +msgstr "" + +#: core/validators.py:368 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "" + +#: core/validators.py:370 +#, python-format +msgid "This value must be at least %s." +msgstr "" + +#: core/validators.py:372 +#, python-format +msgid "This value must be no more than %s." +msgstr "" + +#: core/validators.py:408 +#, python-format +msgid "This value must be a power of %s." +msgstr "" + +#: core/validators.py:417 +msgid "Please enter a valid decimal number." +msgstr "" + +#: core/validators.py:423 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." +"Please enter a valid decimal number with at most %s total digits." +msgstr "" + +#: core/validators.py:426 +#, python-format +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr "" + +#: core/validators.py:429 +#, python-format +msgid "Please enter a valid decimal number with at most %s decimal place." +"Please enter a valid decimal number with at most %s decimal places." +msgstr "" + +#: core/validators.py:437 +msgid "Please enter a valid floating point number." +msgstr "" + +#: core/validators.py:446 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "" + +#: core/validators.py:447 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "" + +#: core/validators.py:464 +msgid "The format for this field is wrong." +msgstr "" + +#: core/validators.py:479 +msgid "This field is invalid." +msgstr "" + +#: core/validators.py:515 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "" + +#: core/validators.py:518 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" + +#: core/validators.py:551 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" + +#: core/validators.py:555 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: core/validators.py:560 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: core/validators.py:565 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" + +#: core/validators.py:569 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: core/validators.py:574 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" +msgstr "" + +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "" + +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "" + +#: conf/global_settings.py:41 +msgid "Bulgarian" +msgstr "" + +#: conf/global_settings.py:42 +msgid "Catalan" +msgstr "" + +#: conf/global_settings.py:43 +msgid "Czech" +msgstr "" + +#: conf/global_settings.py:44 +msgid "Welsh" +msgstr "" + +#: conf/global_settings.py:45 +msgid "Danish" +msgstr "" + +#: conf/global_settings.py:46 +msgid "German" +msgstr "" + +#: conf/global_settings.py:47 +msgid "Greek" +msgstr "" + +#: conf/global_settings.py:48 +msgid "English" +msgstr "" + +#: conf/global_settings.py:49 +msgid "Spanish" +msgstr "" + +#: conf/global_settings.py:50 +msgid "Argentinean Spanish" +msgstr "" + +#: conf/global_settings.py:51 +msgid "Finnish" +msgstr "" + +#: conf/global_settings.py:52 +msgid "French" +msgstr "" + +#: conf/global_settings.py:53 +msgid "Galician" +msgstr "" + +#: conf/global_settings.py:54 +msgid "Hungarian" +msgstr "" + +#: conf/global_settings.py:55 +msgid "Hebrew" +msgstr "" + +#: conf/global_settings.py:56 +msgid "Icelandic" +msgstr "" + +#: conf/global_settings.py:57 +msgid "Italian" +msgstr "" + +#: conf/global_settings.py:58 +msgid "Japanese" +msgstr "" + +#: conf/global_settings.py:59 +msgid "Korean" +msgstr "" + +#: conf/global_settings.py:60 +msgid "Kannada" +msgstr "" + +#: conf/global_settings.py:61 +msgid "Latvian" +msgstr "" + +#: conf/global_settings.py:62 +msgid "Macedonian" +msgstr "" + +#: conf/global_settings.py:63 +msgid "Dutch" +msgstr "" + +#: conf/global_settings.py:64 +msgid "Norwegian" +msgstr "" + +#: conf/global_settings.py:65 +msgid "Polish" +msgstr "" + +#: conf/global_settings.py:66 +msgid "Portugese" +msgstr "" + +#: conf/global_settings.py:67 +msgid "Brazilian" +msgstr "" + +#: conf/global_settings.py:68 +msgid "Romanian" +msgstr "" + +#: conf/global_settings.py:69 +msgid "Russian" +msgstr "" + +#: conf/global_settings.py:70 +msgid "Slovak" +msgstr "" + +#: conf/global_settings.py:71 +msgid "Slovenian" +msgstr "" + +#: conf/global_settings.py:72 +msgid "Serbian" +msgstr "" + +#: conf/global_settings.py:73 +msgid "Swedish" +msgstr "" + +#: conf/global_settings.py:74 +msgid "Tamil" +msgstr "" + +#: conf/global_settings.py:75 +msgid "Telugu" +msgstr "" + +#: conf/global_settings.py:76 +msgid "Turkish" +msgstr "" + +#: conf/global_settings.py:77 +msgid "Ukrainian" +msgstr "" + +#: conf/global_settings.py:78 +msgid "Simplified Chinese" +msgstr "" + +#: conf/global_settings.py:79 +msgid "Traditional Chinese" +msgstr "" + +#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:520 +#: newforms/fields.py:531 newforms/models.py:185 oldforms/__init__.py:361 +#: db/models/fields/__init__.py:121 db/models/fields/__init__.py:278 +#: db/models/fields/__init__.py:675 db/models/fields/__init__.py:686 +msgid "This field is required." +msgstr "" + +#: newforms/fields.py:110 newforms/fields.py:324 +#, python-format +msgid "Ensure this value has at most %d characters." +msgstr "" + +#: newforms/fields.py:112 newforms/fields.py:326 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "" + +#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192 +#, python-format +msgid "Ensure this value is less than or equal to %s." +msgstr "" + +#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194 +#, python-format +msgid "Ensure this value is greater than or equal to %s." +msgstr "" + +#: newforms/fields.py:158 newforms/fields.py:186 +msgid "Enter a number." +msgstr "" + +#: newforms/fields.py:196 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "" + +#: newforms/fields.py:198 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "" + +#: newforms/fields.py:200 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "" + +#: newforms/fields.py:233 +msgid "Enter a valid date." +msgstr "" + +#: newforms/fields.py:260 +msgid "Enter a valid time." +msgstr "" + +#: newforms/fields.py:296 +msgid "Enter a valid date/time." +msgstr "" + +#: newforms/fields.py:310 +msgid "Enter a valid value." +msgstr "" + +#: newforms/fields.py:357 newforms/fields.py:379 +msgid "Enter a valid URL." +msgstr "" + +#: newforms/fields.py:381 +msgid "This URL appears to be a broken link." +msgstr "" + +#: newforms/fields.py:432 newforms/models.py:172 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "" + +#: newforms/fields.py:448 newforms/fields.py:524 newforms/models.py:189 +msgid "Enter a list of values." +msgstr "" + +#: newforms/fields.py:457 newforms/models.py:195 +#, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "" + +#: newforms/widgets.py:182 oldforms/__init__.py:581 +#: contrib/admin/filterspecs.py:150 +msgid "Unknown" +msgstr "ناشناخته" + +#: newforms/widgets.py:182 oldforms/__init__.py:581 +#: contrib/admin/filterspecs.py:143 +msgid "Yes" +msgstr "بله" + +#: newforms/widgets.py:182 oldforms/__init__.py:581 +#: contrib/admin/filterspecs.py:143 +msgid "No" +msgstr "خیر" + +#: oldforms/__init__.py:396 +#, python-format +msgid "Ensure your text is less than %s character." +msgstr "" + +#: oldforms/__init__.py:401 +msgid "Line breaks are not allowed here." +msgstr "" + +#: oldforms/__init__.py:502 oldforms/__init__.py:575 oldforms/__init__.py:614 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "" + +#: oldforms/__init__.py:678 +msgid "The submitted file is empty." +msgstr "" + +#: oldforms/__init__.py:734 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "" + +#: oldforms/__init__.py:744 +msgid "Enter a positive number." +msgstr "" + +#: oldforms/__init__.py:754 +msgid "Enter a whole number between 0 and 32,767." +msgstr "" + +#: contrib/sites/models.py:10 +msgid "domain name" +msgstr "" + +#: contrib/sites/models.py:11 +msgid "display name" +msgstr "" + +#: contrib/sites/models.py:15 +msgid "site" +msgstr "" + +#: contrib/sites/models.py:16 +msgid "sites" +msgstr "" + +#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:316 +msgid "URL" +msgstr "" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "" + +#: contrib/localflavor/fi/forms.py:14 contrib/localflavor/de/forms.py:16 +#: contrib/localflavor/fr/forms.py:17 +msgid "Enter a zip code in the format XXXXX." +msgstr "" + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 +msgid "Enter a valid Finnish social security number." +msgstr "" + +#: contrib/localflavor/is_/forms.py:16 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "" + +#: contrib/localflavor/is_/forms.py:30 +msgid "The Icelandic identification number is not valid." +msgstr "" + +#: contrib/localflavor/no/forms.py:15 contrib/localflavor/ch/forms.py:18 +msgid "Enter a zip code in the format XXXX." +msgstr "" + +#: contrib/localflavor/no/forms.py:36 +msgid "Enter a valid Norwegian social security number." +msgstr "" + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "" + +#: contrib/localflavor/de/forms.py:60 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "" + +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:11 +msgid "Fribourg" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:12 +msgid "Geneva" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:13 +msgid "Glarus" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:14 +msgid "Graubuenden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:15 +msgid "Jura" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:16 +msgid "Lucerne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:17 +msgid "Neuchatel" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:18 +msgid "Nidwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:19 +msgid "Obwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:20 +msgid "Schaffhausen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:21 +msgid "Schwyz" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:22 +msgid "Solothurn" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:23 +msgid "St. Gallen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:24 +msgid "Thurgau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:25 +msgid "Ticino" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:26 +msgid "Uri" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:27 +msgid "Valais" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:28 +msgid "Vaud" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:29 +msgid "Zug" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:30 +msgid "Zurich" +msgstr "" + +#: contrib/localflavor/us/forms.py:18 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "" + +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "" + +#: contrib/localflavor/cl/forms.py:21 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "" + +#: contrib/localflavor/cl/forms.py:26 +msgid "Enter valid a Chilean RUT" +msgstr "" + +#: contrib/localflavor/au/forms.py:18 +msgid "Enter a 4 digit post code." +msgstr "" + +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "" + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "" + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "" + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:4 +msgid "Hokkaido" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:5 +msgid "Aomori" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:6 +msgid "Iwate" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:7 +msgid "Miyagi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:8 +msgid "Akita" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:9 +msgid "Yamagata" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:10 +msgid "Fukushima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:11 +msgid "Ibaraki" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:12 +msgid "Tochigi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:13 +msgid "Gunma" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:14 +msgid "Saitama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:15 +msgid "Chiba" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:16 +msgid "Tokyo" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:17 +msgid "Kanagawa" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:18 +msgid "Yamanashi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:19 +msgid "Nagano" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:20 +msgid "Niigata" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:21 +msgid "Toyama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:22 +msgid "Ishikawa" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:23 +msgid "Fukui" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:24 +msgid "Gifu" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:25 +msgid "Shizuoka" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:26 +msgid "Aichi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:27 +msgid "Mie" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:28 +msgid "Shiga" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:29 +msgid "Kyoto" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:30 +msgid "Osaka" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:31 +msgid "Hyogo" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:32 +msgid "Nara" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:33 +msgid "Wakayama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:34 +msgid "Tottori" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:35 +msgid "Shimane" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:36 +msgid "Okayama" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:37 +msgid "Hiroshima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:38 +msgid "Yamaguchi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:39 +msgid "Tokushima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:40 +msgid "Kagawa" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:41 +msgid "Ehime" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:42 +msgid "Kochi" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:43 +msgid "Fukuoka" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:44 +msgid "Saga" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:45 +msgid "Nagasaki" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:46 +msgid "Kumamoto" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:47 +msgid "Oita" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:48 +msgid "Miyazaki" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:49 +msgid "Kagoshima" +msgstr "" + +#: contrib/localflavor/jp/jp_prefectures.py:50 +msgid "Okinawa" +msgstr "" + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "" + +#: contrib/localflavor/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "" + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "" + +#: contrib/localflavor/br/forms.py:72 +msgid "This field requires only numbers." +msgstr "" + +#: contrib/localflavor/br/forms.py:74 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "" + +#: contrib/localflavor/br/forms.py:84 +msgid "Invalid CPF number." +msgstr "" + +#: contrib/localflavor/br/forms.py:106 +msgid "This field requires at least 14 digits" +msgstr "" + +#: contrib/localflavor/br/forms.py:116 +msgid "Invalid CNPJ number." +msgstr "" + +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "زمان اتفاق" + +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "شناسهٔ شئ" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "" + +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

          By %s:

          \n" +"
            \n" +msgstr "" +"

            بوسیلهٔ %s:

            \n" +"
              \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "همه" + +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "هر تاریخی" + +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "امروز" + +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "۷ روز اخیر" + +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "این ماه" + +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "امسال" + +#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" + +#: contrib/admin/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "" + +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" + +#: contrib/admin/views/decorators.py:69 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" + +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "" + +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" + +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "" + +#: contrib/admin/views/main.py:257 contrib/admin/views/auth.py:19 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "" + +#: contrib/admin/views/main.py:261 contrib/admin/views/main.py:347 +#: contrib/admin/views/auth.py:24 +msgid "You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 +#, python-format +msgid "You may add another %s below." +msgstr "" + +#: contrib/admin/views/main.py:289 +#, python-format +msgid "Add %s" +msgstr "" + +#: contrib/admin/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "" + +#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 +msgid "and" +msgstr "" + +#: contrib/admin/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "" + +#: contrib/admin/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "" + +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "" + +#: contrib/admin/views/main.py:345 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "" + +#: contrib/admin/views/main.py:353 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "" + +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "" + +#: contrib/admin/views/main.py:476 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:481 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:514 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "" + +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "" + +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "" + +#: contrib/admin/views/main.py:768 +msgid "Database error" +msgstr "" + +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "" + +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "" + +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "" + +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "" + +#: contrib/admin/views/doc.py:171 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "" + +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "" + +#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 +#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 +msgid "model:" +msgstr "" + +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "" + +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "" + +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "" + +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "" + +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310 +#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313 +msgid "Integer" +msgstr "" + +#: contrib/admin/views/doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "" + +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "" + +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "" + +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "" + +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "" + +#: contrib/admin/views/doc.py:297 +msgid "Decimal number" +msgstr "" + +#: contrib/admin/views/doc.py:298 +msgid "E-mail address" +msgstr "" + +#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300 +#: contrib/admin/views/doc.py:303 +msgid "File path" +msgstr "" + +#: contrib/admin/views/doc.py:301 +msgid "Floating point number" +msgstr "" + +#: contrib/admin/views/doc.py:305 contrib/comments/models.py:85 +msgid "IP address" +msgstr "" + +#: contrib/admin/views/doc.py:307 +msgid "Boolean (Either True, False or None)" +msgstr "" + +#: contrib/admin/views/doc.py:308 +msgid "Relation to parent model" +msgstr "" + +#: contrib/admin/views/doc.py:309 +msgid "Phone number" +msgstr "" + +#: contrib/admin/views/doc.py:314 +msgid "Text" +msgstr "" + +#: contrib/admin/views/doc.py:315 +msgid "Time" +msgstr "" + +#: contrib/admin/views/doc.py:317 +msgid "U.S. state (two uppercase letters)" +msgstr "" + +#: contrib/admin/views/doc.py:318 +msgid "XML text" +msgstr "" + +#: contrib/admin/views/doc.py:344 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "" + +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "" + +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "" + +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "" + +#: contrib/admin/templatetags/admin_list.py:249 +msgid "All dates" +msgstr "" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +#: contrib/admin/templates/admin/login.html:17 +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +msgid "Username:" +msgstr "" + +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "" + +#: contrib/admin/templates/admin/invalid_setup.html:4 +#: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/auth/user/change_password.html:12 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_done.html:4 +msgid "Home" +msgstr "آغازه" + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +msgid "Documentation" +msgstr "مستندات" + +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:15 +#: contrib/admin/templates/admin/auth/user/change_password.html:46 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +msgid "Change password" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/comments/templates/comments/form.html:6 +msgid "Log out" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:15 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:21 +#: contrib/admin/templates/admin/object_history.html:5 +msgid "History" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:32 +#: contrib/admin/templates/admin/auth/user/change_password.html:24 +msgid "Please correct the error below." +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "" + +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgstr "" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:3 +#: contrib/admin/templates/admin/delete_confirmation.html:9 +msgid "Delete" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "" + +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "اضافه‌کردن %(name)s" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "وب‌گاه مدیریت Djago" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "مدیریت Django" + +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "" + +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "" + +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "تغییر" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "شما اجازهٔ ویرایش چیزی را ندارید." + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "اعمال اخیر" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "اعمال من" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "چیزی در دسترس نیست" + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "نمایش همه" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "خطای کارگزار" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "خطای کارگزار (۵۰۰)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "خطای کارگزار (۵۰۰)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" + +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "خوش آمدید،" + +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:21 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" + +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "بله، مطمئن هستم." + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "تاریخ/ساعت" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "کاربر" + +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "عمل" + +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "" + +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "فیلتر" + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "" + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "نام کاربری" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +msgid "Password" +msgstr "گذرواژه" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +msgid "Password (again)" +msgstr "گذرواژه (تکرار)" + +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +#: contrib/admin/templates/admin/auth/user/change_password.html:40 +msgid "Enter the same password as above, for verification." +msgstr "همان گذرواژهٔ بالایی را برای اطمینان دوباره وارد کنید." + +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "برای کابر %(username)s یک گذرنامهٔ جدید وارد کنید." + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

              To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

              \n" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "درخواستی برای ایجاد گذرواژهٔ جدید با آدرس شما به ما رسیده است و ما این نامه را برای شما فرستادیم" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "برای حساب کاربریتان در %(site_name)s" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "گذرواژهٔ جدیدتان: %(new_password)s" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "با رفتن به صفحهٔ زیر می‌توانید گذرواژه‌تان را عوض کنید:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "نام کاربریتان، اگر یادتان رفته است:" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "متشکر از استفادهٔ شما از وبگاه ما" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "گروه %(site_name)s" + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "متشکر از اینکه مدتی از وقت خود را به ما اختصاص دادید." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "ورود دوباره" + +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:10 +#: contrib/admin/templates/registration/password_reset_done.html:4 +msgid "Password reset" +msgstr "ایجاد گذرواژهٔ جدید" + +#: contrib/admin/templates/registration/password_reset_form.html:12 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll reset " +"your password and e-mail the new one to you." +msgstr "" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "آدرس پست الکترونیکی:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "ایجاد گذرواژهٔ جدید" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "گذرواژهٔ جدید ایجاد شد." + +#: contrib/admin/templates/registration/password_reset_done.html:12 +msgid "" +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." +msgstr "ما به آدرس پست اکترونیکی‌ای که وارد کردید یک گذرواژهٔ جدید فرستادیم. به زودی به شما می‌رسد." + +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_form.html:6 +#: contrib/admin/templates/registration/password_change_form.html:10 +#: contrib/admin/templates/registration/password_change_done.html:4 +msgid "Password change" +msgstr "تغییر گذرواژه" + +#: contrib/admin/templates/registration/password_change_form.html:12 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "گذرواژهٔ قدیمی خود را، برای امنیت بیشتر، وارد کنید و سپس گذرواژهٔ جدیدتان را دوبار وارد کنید تا " +"ما بتوانیم چک کنیم که به درستی تایپ کرده‌اید." + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "گذرواژهٔ قدیمی" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "گذرواژهٔ جدید" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "تکرار گذرواژه" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "تغییر گذرواژهٔ من" + +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "گذرواژه تغییر یافت." + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "گذرواژهٔ شما تغییر یافت." + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "" + +#: contrib/sessions/models.py:68 +msgid "session key" +msgstr "" + +#: contrib/sessions/models.py:69 +msgid "session data" +msgstr "اطلاعات نشست" + +#: contrib/sessions/models.py:70 +msgid "expire date" +msgstr "تاریخ انقضاء" + +#: contrib/sessions/models.py:74 +msgid "session" +msgstr "نشست" + +#: contrib/sessions/models.py:75 +msgid "sessions" +msgstr "نشست‌ها" + +#: contrib/comments/models.py:67 contrib/comments/models.py:166 +msgid "object ID" +msgstr "" + +#: contrib/comments/models.py:68 +msgid "headline" +msgstr "" + +#: contrib/comments/models.py:69 contrib/comments/models.py:90 +#: contrib/comments/models.py:167 +msgid "comment" +msgstr "نظر" + +#: contrib/comments/models.py:70 +msgid "rating #1" +msgstr "" + +#: contrib/comments/models.py:71 +msgid "rating #2" +msgstr "" + +#: contrib/comments/models.py:72 +msgid "rating #3" +msgstr "" + +#: contrib/comments/models.py:73 +msgid "rating #4" +msgstr "" + +#: contrib/comments/models.py:74 +msgid "rating #5" +msgstr "" + +#: contrib/comments/models.py:75 +msgid "rating #6" +msgstr "" + +#: contrib/comments/models.py:76 +msgid "rating #7" +msgstr "" + +#: contrib/comments/models.py:77 +msgid "rating #8" +msgstr "" + +#: contrib/comments/models.py:82 +msgid "is valid rating" +msgstr "" + +#: contrib/comments/models.py:83 contrib/comments/models.py:169 +msgid "date/time submitted" +msgstr "" + +#: contrib/comments/models.py:84 contrib/comments/models.py:170 +msgid "is public" +msgstr "عمومی است" + +#: contrib/comments/models.py:86 +msgid "is removed" +msgstr "پاک شده است" + +#: contrib/comments/models.py:86 +msgid "" +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." +msgstr "" + +#: contrib/comments/models.py:91 +msgid "comments" +msgstr "نظرها" + +#: contrib/comments/models.py:131 contrib/comments/models.py:207 +msgid "Content object" +msgstr "شئ نظر" + +#: contrib/comments/models.py:159 +#, python-format +msgid "" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" +msgstr "" + +#: contrib/comments/models.py:168 +msgid "person's name" +msgstr "نام شخص" + +#: contrib/comments/models.py:171 +msgid "ip address" +msgstr "" + +#: contrib/comments/models.py:173 +msgid "approved by staff" +msgstr "" + +#: contrib/comments/models.py:176 +msgid "free comment" +msgstr "" + +#: contrib/comments/models.py:177 +msgid "free comments" +msgstr "" + +#: contrib/comments/models.py:233 +msgid "score" +msgstr "امتیاز" + +#: contrib/comments/models.py:234 +msgid "score date" +msgstr "تاریخ امتیاز" + +#: contrib/comments/models.py:237 +msgid "karma score" +msgstr "امتیاز عملکرد" + +#: contrib/comments/models.py:238 +msgid "karma scores" +msgstr "امتیازهای عملکرد" + +#: contrib/comments/models.py:242 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "" + +#: contrib/comments/models.py:258 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" + +#: contrib/comments/models.py:265 +msgid "flag date" +msgstr "تاریخ پرچم" + +#: contrib/comments/models.py:268 +msgid "user flag" +msgstr "پرچم کاربر" + +#: contrib/comments/models.py:269 +msgid "user flags" +msgstr "پرچم‌های کاربر" + +#: contrib/comments/models.py:273 +#, python-format +msgid "Flag by %r" +msgstr "" + +#: contrib/comments/models.py:278 +msgid "deletion date" +msgstr "" + +#: contrib/comments/models.py:280 +msgid "moderator deletion" +msgstr "" + +#: contrib/comments/models.py:281 +msgid "moderator deletions" +msgstr "" + +#: contrib/comments/models.py:285 +#, python-format +msgid "Moderator deletion by %r" +msgstr "" + +#: contrib/comments/views/comments.py:27 +msgid "" +"This rating is required because you've entered at least one other rating." +msgstr "" + +#: contrib/comments/views/comments.py:111 +#, python-format +msgid "" +"This comment was posted by a user who has posted fewer than %(count)s " +"comment:\n" +"\n" +"%(text)s" +"This comment was posted by a user who has posted fewer than %(count)s " +"comments:\n" +"\n" +"%(text)s" +msgstr "" + +#: contrib/comments/views/comments.py:116 +#, python-format +msgid "" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" +msgstr "" + +#: contrib/comments/views/comments.py:188 +#: contrib/comments/views/comments.py:280 +msgid "Only POSTs are allowed" +msgstr "" + +#: contrib/comments/views/comments.py:192 +#: contrib/comments/views/comments.py:284 +msgid "One or more of the required fields wasn't submitted" +msgstr "" + +#: contrib/comments/views/comments.py:196 +#: contrib/comments/views/comments.py:286 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "" + +#: contrib/comments/views/comments.py:206 +#: contrib/comments/views/comments.py:292 +msgid "" +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "" + +#: contrib/comments/views/comments.py:257 +#: contrib/comments/views/comments.py:321 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "" + +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "" + +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "" + +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "گذرواژه‌تان را فراموش کرده‌اید؟" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "لازم" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "اختیاری" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "ارسال عکس" + +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "نظر:" + +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "پیش‌نمایش نظر" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "نام شما:" + +#: contrib/auth/models.py:44 contrib/auth/models.py:64 +msgid "name" +msgstr "نام" + +#: contrib/auth/models.py:46 +msgid "codename" +msgstr "نام کد" + +#: contrib/auth/models.py:49 +msgid "permission" +msgstr "اجازه" + +#: contrib/auth/models.py:50 contrib/auth/models.py:65 +msgid "permissions" +msgstr "اجازه‌ها" + +#: contrib/auth/models.py:68 +msgid "group" +msgstr "گروه" + +#: contrib/auth/models.py:69 contrib/auth/models.py:109 +msgid "groups" +msgstr "گروه‌ها" + +#: contrib/auth/models.py:99 +msgid "username" +msgstr "نام کاربری" + +#: contrib/auth/models.py:99 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" + +#: contrib/auth/models.py:100 +msgid "first name" +msgstr "نام" + +#: contrib/auth/models.py:101 +msgid "last name" +msgstr "نام خانوادگی" + +#: contrib/auth/models.py:102 +msgid "e-mail address" +msgstr "آدرس پست الکترونیکی" + +#: contrib/auth/models.py:103 +msgid "password" +msgstr "گذرواژه" + +#: contrib/auth/models.py:103 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" + +#: contrib/auth/models.py:104 +msgid "staff status" +msgstr "کارمند" + +#: contrib/auth/models.py:104 +msgid "Designates whether the user can log into this admin site." +msgstr "" + +#: contrib/auth/models.py:105 +msgid "active" +msgstr "فعال" + +#: contrib/auth/models.py:105 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" + +#: contrib/auth/models.py:106 +msgid "superuser status" +msgstr "ابرکاربر" + +#: contrib/auth/models.py:106 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" + +#: contrib/auth/models.py:107 +msgid "last login" +msgstr "آخرین ورود" + +#: contrib/auth/models.py:108 +msgid "date joined" +msgstr "تاریخ پیوستن" + +#: contrib/auth/models.py:110 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" + +#: contrib/auth/models.py:111 +msgid "user permissions" +msgstr "اجازه‌های کاربر" + +#: contrib/auth/models.py:115 +msgid "user" +msgstr "کاربر" + +#: contrib/auth/models.py:116 +msgid "users" +msgstr "کاربرها" + +#: contrib/auth/models.py:122 +msgid "Personal info" +msgstr "اطلاعات شخصی" + +#: contrib/auth/models.py:123 +msgid "Permissions" +msgstr "اجازه‌ها" + +#: contrib/auth/models.py:124 +msgid "Important dates" +msgstr "تاریخ‌های مهم" + +#: contrib/auth/models.py:125 +msgid "Groups" +msgstr "گروه‌ها" + +#: contrib/auth/models.py:269 +msgid "message" +msgstr "پیغام" + +#: contrib/auth/models.py:282 +msgid "AnonymousUser" +msgstr "کاربر ناشناس" + +#: contrib/auth/views.py:40 +msgid "Logged out" +msgstr "خارج شد" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "دو فیلد گذرواژه با هم مطابقت ندارند." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "کاربری با این نام کاربری وجود دارد." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "این حساب غیرفعال است." + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "دو فیلد «گذرواژهٔ جدید» با هم مطابقت ندارند." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "گذرواژهٔ قدیمی شما اشتباه بود. لطفاً دوباره وارد کنید." + +#: contrib/contenttypes/models.py:36 +msgid "python model class name" +msgstr "" + +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "نوع محتوا" + +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "نوع‌های محتوا" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "th" +msgstr "اُم" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "st" +msgstr "اُم" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "nd" +msgstr "اُم" + +#: contrib/humanize/templatetags/humanize.py:17 +msgid "rd" +msgstr "اُم" + +#: contrib/humanize/templatetags/humanize.py:47 +#, python-format +msgid "%(value).1f million" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +msgid "%(value).1f billion" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +msgid "%(value).1f trillion" +msgstr "" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "one" +msgstr "یک" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "دو" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "three" +msgstr "سه" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "four" +msgstr "چهار" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "five" +msgstr "پنج" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "شش" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "هفت" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "هشت" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "nine" +msgstr "نُه" + +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" + +#: db/models/fields/__init__.py:46 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: db/models/fields/__init__.py:373 +msgid "This value must be an integer." +msgstr "" + +#: db/models/fields/__init__.py:408 +msgid "This value must be either True or False." +msgstr "" + +#: db/models/fields/__init__.py:429 +msgid "This field cannot be null." +msgstr "" + +#: db/models/fields/__init__.py:592 +msgid "This value must be a decimal number." +msgstr "" + +#: db/models/fields/__init__.py:695 +msgid "Enter a valid filename." +msgstr "" + +#: db/models/fields/__init__.py:818 +msgid "This value must be either None, True or False." +msgstr "" + +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "" + +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "" + +#: db/models/fields/related.py:644 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" + +#: db/models/fields/related.py:691 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +"Please enter valid %(self)s IDs. The values %(value)r are invalid." +msgstr "" + +#: utils/timesince.py:12 +msgid "year" +msgstr "سال" + +#: utils/timesince.py:13 +msgid "month" +msgstr "ماه" + +#: utils/timesince.py:14 +msgid "week" +msgstr "هفته" + +#: utils/timesince.py:15 +msgid "day" +msgstr "روز" + +#: utils/timesince.py:16 +msgid "hour" +msgstr "ساعت" + +#: utils/timesince.py:17 +msgid "minute" +msgstr "دقیقه" + +#: utils/timesince.py:40 +#, python-format +msgid "%d milliseconds" +msgstr "%d میلی‌ثانیه" + +#: utils/timesince.py:41 +#, python-format +msgid "%(number)d %(type)s" +msgstr "" + +#: utils/timesince.py:47 +#, python-format +msgid ", %(number)d %(type)s" +msgstr "" + +#: utils/dateformat.py:40 +msgid "p.m." +msgstr "ب.ظ." + +#: utils/dateformat.py:41 +msgid "a.m." +msgstr "صبح" + +#: utils/dateformat.py:46 +msgid "PM" +msgstr "بعد از ظهر" + +#: utils/dateformat.py:47 +msgid "AM" +msgstr "صبح" + +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "" + +#: utils/dateformat.py:97 +msgid "noon" +msgstr "" + +#: utils/dates.py:6 +msgid "Monday" +msgstr "" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "" + +#: utils/dates.py:6 +msgid "Thursday" +msgstr "" + +#: utils/dates.py:6 +msgid "Friday" +msgstr "" + +#: utils/dates.py:7 +msgid "Saturday" +msgstr "" + +#: utils/dates.py:7 +msgid "Sunday" +msgstr "" + +#: utils/dates.py:14 +msgid "January" +msgstr "ژانویه" + +#: utils/dates.py:14 +msgid "February" +msgstr "فوریه" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "March" +msgstr "مارس" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "April" +msgstr "آوریل" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "May" +msgstr "مه" + +#: utils/dates.py:14 utils/dates.py:27 +msgid "June" +msgstr "ژوئن" + +#: utils/dates.py:15 utils/dates.py:27 +msgid "July" +msgstr "ژوئیه" + +#: utils/dates.py:15 +msgid "August" +msgstr "اوت" + +#: utils/dates.py:15 +msgid "September" +msgstr "سپتامبر" + +#: utils/dates.py:15 +msgid "October" +msgstr "اکتبر" + +#: utils/dates.py:15 +msgid "November" +msgstr "نوامبر" + +#: utils/dates.py:16 +msgid "December" +msgstr "دسامبر" + +#: utils/dates.py:19 +msgid "jan" +msgstr "ژانویه" + +#: utils/dates.py:19 +msgid "feb" +msgstr "فوریه" + +#: utils/dates.py:19 +msgid "mar" +msgstr "مارس" + +#: utils/dates.py:19 +msgid "apr" +msgstr "آوریل" + +#: utils/dates.py:19 +msgid "may" +msgstr "مه" + +#: utils/dates.py:19 +msgid "jun" +msgstr "ژوئن" + +#: utils/dates.py:20 +msgid "jul" +msgstr "ژوئیه" + +#: utils/dates.py:20 +msgid "aug" +msgstr "اوت" + +#: utils/dates.py:20 +msgid "sep" +msgstr "سپتامبر" + +#: utils/dates.py:20 +msgid "oct" +msgstr "اکتبر" + +#: utils/dates.py:20 +msgid "nov" +msgstr "نوامبر" + +#: utils/dates.py:20 +msgid "dec" +msgstr "دسامبر" + +#: utils/dates.py:27 +msgid "Jan." +msgstr "ژانویه" + +#: utils/dates.py:27 +msgid "Feb." +msgstr "فوریه" + +#: utils/dates.py:28 +msgid "Aug." +msgstr "اوت" + +#: utils/dates.py:28 +msgid "Sept." +msgstr "سپتامبر" + +#: utils/dates.py:28 +msgid "Oct." +msgstr "اکتبر" + +#: utils/dates.py:28 +msgid "Nov." +msgstr "نوامبر" + +#: utils/dates.py:28 +msgid "Dec." +msgstr "دسامبر" + +#: utils/translation/trans_real.py:358 +msgid "DATE_FORMAT" +msgstr "" + +#: utils/translation/trans_real.py:359 +msgid "DATETIME_FORMAT" +msgstr "" + +#: utils/translation/trans_real.py:360 +msgid "TIME_FORMAT" +msgstr "" + +#: utils/translation/trans_real.py:376 +msgid "YEAR_MONTH_FORMAT" +msgstr "" + +#: utils/translation/trans_real.py:377 +msgid "MONTH_DAY_FORMAT" +msgstr "" + +#: template/defaultfilters.py:491 +msgid "yes,no,maybe" +msgstr "بله،خیر،شاید" + +#: template/defaultfilters.py:520 +#, python-format +msgid "%(size)d byte" +msgstr "%(size)d یایت" + +#: template/defaultfilters.py:522 +#, python-format +msgid "%.1f KB" +msgstr "" + +#: template/defaultfilters.py:524 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: template/defaultfilters.py:525 +#, python-format +msgid "%.1f GB" +msgstr "" + diff --git a/django/conf/locale/fa/LC_MESSAGES/djangojs.mo b/django/conf/locale/fa/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..8d3f8e505f Binary files /dev/null and b/django/conf/locale/fa/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/fa/LC_MESSAGES/djangojs.po b/django/conf/locale/fa/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..255cb71870 --- /dev/null +++ b/django/conf/locale/fa/LC_MESSAGES/djangojs.po @@ -0,0 +1,118 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2007-06-24 22:09+1000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:32 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "" diff --git a/django/conf/locale/gl/LC_MESSAGES/django.mo b/django/conf/locale/gl/LC_MESSAGES/django.mo index 00beabebf8..ae0783f43d 100644 Binary files a/django/conf/locale/gl/LC_MESSAGES/django.mo and b/django/conf/locale/gl/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/gl/LC_MESSAGES/django.po b/django/conf/locale/gl/LC_MESSAGES/django.po index 394f9cd016..ef02b59e87 100644 --- a/django/conf/locale/gl/LC_MESSAGES/django.po +++ b/django/conf/locale/gl/LC_MESSAGES/django.po @@ -1,14 +1,13 @@ # Translation of django.po to Galego # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# Afonso Fernández Nogueira , 2005. # msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2006-05-16 10:11+0200\n" -"PO-Revision-Date: 2006-07-03 14:06+0200\n" +"POT-Creation-Date: 2007-05-28 12:56+0200\n" +"PO-Revision-Date: 2007-05-28 17:29+0200\n" "Last-Translator: Afonso Fernández Nogueira \n" "Language-Team: Galego\n" "MIME-Version: 1.0\n" @@ -17,6 +16,1256 @@ msgstr "" "X-Poedit-Language: Galician\n" "X-Poedit-SourceCharset: utf-8\n" +#: conf/global_settings.py:39 +msgid "Arabic" +msgstr "árabe" + +#: conf/global_settings.py:40 +msgid "Bengali" +msgstr "bengalí" + +#: conf/global_settings.py:41 +msgid "Bulgarian" +msgstr "búlgaro" + +#: conf/global_settings.py:42 +msgid "Catalan" +msgstr "catalán" + +#: conf/global_settings.py:43 +msgid "Czech" +msgstr "checo" + +#: conf/global_settings.py:44 +msgid "Welsh" +msgstr "galés" + +#: conf/global_settings.py:45 +msgid "Danish" +msgstr "dinamarqués" + +#: conf/global_settings.py:46 +msgid "German" +msgstr "alemán" + +#: conf/global_settings.py:47 +msgid "Greek" +msgstr "grego" + +#: conf/global_settings.py:48 +msgid "English" +msgstr "inglés" + +#: conf/global_settings.py:49 +msgid "Spanish" +msgstr "español" + +#: conf/global_settings.py:50 +msgid "Argentinean Spanish" +msgstr "español de Arxentina" + +#: conf/global_settings.py:51 +msgid "Finnish" +msgstr "finés" + +#: conf/global_settings.py:52 +msgid "French" +msgstr "francés" + +#: conf/global_settings.py:53 +msgid "Galician" +msgstr "galego" + +#: conf/global_settings.py:54 +msgid "Hungarian" +msgstr "húngaro" + +#: conf/global_settings.py:55 +msgid "Hebrew" +msgstr "hebreo" + +#: conf/global_settings.py:56 +msgid "Icelandic" +msgstr "islandés" + +#: conf/global_settings.py:57 +msgid "Italian" +msgstr "italiano" + +#: conf/global_settings.py:58 +msgid "Japanese" +msgstr "xaponés" + +#: conf/global_settings.py:59 +msgid "Korean" +msgstr "coreano" + +#: conf/global_settings.py:60 +msgid "Kannada" +msgstr "canará" + +#: conf/global_settings.py:61 +msgid "Latvian" +msgstr "letón" + +#: conf/global_settings.py:62 +msgid "Macedonian" +msgstr "macedonio" + +#: conf/global_settings.py:63 +msgid "Dutch" +msgstr "holandés" + +#: conf/global_settings.py:64 +msgid "Norwegian" +msgstr "noruegués" + +#: conf/global_settings.py:65 +msgid "Polish" +msgstr "polaco" + +#: conf/global_settings.py:66 +msgid "Portugese" +msgstr "portugués" + +#: conf/global_settings.py:67 +msgid "Brazilian" +msgstr "brasileiro" + +#: conf/global_settings.py:68 +msgid "Romanian" +msgstr "romanés" + +#: conf/global_settings.py:69 +msgid "Russian" +msgstr "ruso" + +#: conf/global_settings.py:70 +msgid "Slovak" +msgstr "eslovaco" + +#: conf/global_settings.py:71 +msgid "Slovenian" +msgstr "esloveno" + +#: conf/global_settings.py:72 +msgid "Serbian" +msgstr "serbio" + +#: conf/global_settings.py:73 +msgid "Swedish" +msgstr "sueco" + +#: conf/global_settings.py:74 +msgid "Tamil" +msgstr "támil" + +#: conf/global_settings.py:75 +msgid "Telugu" +msgstr "telugu" + +#: conf/global_settings.py:76 +msgid "Turkish" +msgstr "turco" + +#: conf/global_settings.py:77 +msgid "Ukrainian" +msgstr "ucraíno" + +#: conf/global_settings.py:78 +msgid "Simplified Chinese" +msgstr "chinés simplificado" + +#: conf/global_settings.py:79 +msgid "Traditional Chinese" +msgstr "chinés tradicional" + +#: contrib/admin/filterspecs.py:40 +#, python-format +msgid "" +"

              By %s:

              \n" +"
                \n" +msgstr "" +"

                Por %s:

                \n" +"
                  \n" + +#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 +#: contrib/admin/filterspecs.py:143 contrib/admin/filterspecs.py:169 +msgid "All" +msgstr "Todo" + +#: contrib/admin/filterspecs.py:109 +msgid "Any date" +msgstr "Calquera data" + +#: contrib/admin/filterspecs.py:110 +msgid "Today" +msgstr "Hoxe" + +#: contrib/admin/filterspecs.py:113 +msgid "Past 7 days" +msgstr "Últimos 7 días" + +#: contrib/admin/filterspecs.py:115 +msgid "This month" +msgstr "Este mes" + +#: contrib/admin/filterspecs.py:117 +msgid "This year" +msgstr "Este ano" + +#: contrib/admin/filterspecs.py:143 newforms/widgets.py:182 +#: oldforms/__init__.py:577 +msgid "Yes" +msgstr "Si" + +#: contrib/admin/filterspecs.py:143 newforms/widgets.py:182 +#: oldforms/__init__.py:577 +msgid "No" +msgstr "Non" + +#: contrib/admin/filterspecs.py:150 newforms/widgets.py:182 +#: oldforms/__init__.py:577 +msgid "Unknown" +msgstr "Descoñecido" + +#: contrib/admin/models.py:16 +msgid "action time" +msgstr "hora da acción" + +#: contrib/admin/models.py:19 +msgid "object id" +msgstr "id do obxecto" + +#: contrib/admin/models.py:20 +msgid "object repr" +msgstr "repr do obxecto" + +#: contrib/admin/models.py:21 +msgid "action flag" +msgstr "código do tipo de acción" + +#: contrib/admin/models.py:22 +msgid "change message" +msgstr "cambiar mensaxe" + +#: contrib/admin/models.py:25 +msgid "log entry" +msgstr "entrada de rexistro" + +#: contrib/admin/models.py:26 +msgid "log entries" +msgstr "entradas de rexistro" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Páxina non atopada" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Sentímolo, pero non se atopou a páxina solicitada." + +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/change_form.html:13 +#: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/invalid_setup.html:4 +#: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/auth/user/change_password.html:12 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +msgid "Home" +msgstr "Inicio" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Erro no servidor" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Erro no servidor (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Erro do servidor (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Houbo un erro. Xa se informou aos administradores do sitio por correo " +"electrónico e debería quedar arranxado pronto. Grazas pola súa paciencia." + +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Benvido," + +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +msgid "Documentation" +msgstr "Documentación" + +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin/auth/user/change_password.html:15 +#: contrib/admin/templates/admin/auth/user/change_password.html:46 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +msgid "Change password" +msgstr "Cambiar contrasinal" + +#: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/change_form.html:10 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/auth/user/change_password.html:9 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +#: contrib/admin/templates/admin_doc/index.html:4 +#: contrib/admin/templates/admin_doc/missing_docutils.html:4 +#: contrib/admin/templates/admin_doc/model_detail.html:3 +#: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/view_detail.html:4 +#: contrib/admin/templates/admin_doc/view_index.html:5 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/comments/templates/comments/form.html:6 +msgid "Log out" +msgstr "Rematar sesión" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Administración de sitio Django" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Administración de Django" + +#: contrib/admin/templates/admin/change_form.html:15 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "Engadir" + +#: contrib/admin/templates/admin/change_form.html:21 +#: contrib/admin/templates/admin/object_history.html:5 +msgid "History" +msgstr "Histórico" + +#: contrib/admin/templates/admin/change_form.html:22 +msgid "View on site" +msgstr "Ver na web" + +#: contrib/admin/templates/admin/change_form.html:32 +#: contrib/admin/templates/admin/auth/user/change_password.html:24 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Por favor, corrixa o erro de embaixo." +msgstr[1] "Por favor, corrixa os erros de embaixo." + +#: contrib/admin/templates/admin/change_form.html:50 +msgid "Ordering" +msgstr "Orde" + +#: contrib/admin/templates/admin/change_form.html:53 +msgid "Order:" +msgstr "Orde:" + +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Engadir %(name)s" + +#: contrib/admin/templates/admin/delete_confirmation.html:9 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Eliminar" + +#: contrib/admin/templates/admin/delete_confirmation.html:14 +#, python-format +msgid "" +"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"related objects, but your account doesn't have permission to delete the " +"following types of objects:" +msgstr "" +"Borrar o %(object_name)s '%(escaped_object)s' resultaría na eliminación de elementos " +"relacionados, pero a súa conta non ten permiso para borrar os seguintes " +"tipos de elementos:" + +#: contrib/admin/templates/admin/delete_confirmation.html:21 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Seguro que quere borrar o %(object_name)s \"%(escaped_object)s\"? Eliminaranse os " +"seguintes obxectos relacionados:" + +#: contrib/admin/templates/admin/delete_confirmation.html:26 +msgid "Yes, I'm sure" +msgstr "Si, estou seguro" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Por %(filter_title)s " + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtro" + +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "Modelos dispoñíbeis na aplicación %(name)s." + +#: contrib/admin/templates/admin/index.html:18 +#, python-format +msgid "%(name)s" +msgstr "%(name)s" + +#: contrib/admin/templates/admin/index.html:34 +msgid "Change" +msgstr "Modificar" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Non ten permiso para editar nada." + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Accións recentes" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "As miñas accións" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Ningunha dispoñíbel" + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Hai un problema coa súa instalación de base de datos. Asegúrese " +"de que se creasen as táboas axeitadas na base de datos, e de que o usuario " +"apropiado teña permisos para lela." + +#: contrib/admin/templates/admin/login.html:17 +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +msgid "Username:" +msgstr "Usuario:" + +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "Contrasinal:" + +#: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:24 +msgid "Log in" +msgstr "Iniciar sesión" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "Date/time" +msgstr "Data/hora" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "User" +msgstr "Usuario" + +#: contrib/admin/templates/admin/object_history.html:20 +msgid "Action" +msgstr "Acción" + +#: contrib/admin/templates/admin/object_history.html:26 +msgid "DATE_WITH_TIME_FULL" +msgstr "j de N de Y, H:i" + +#: contrib/admin/templates/admin/object_history.html:36 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Este obxecto non ten histórico de cambios. Posibelmente non se creou usando " +"este sitio de administración." + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Amosar todo" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Ir" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "1 resultado" +msgstr[1] "%(counter)s resultados" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "%(full_result_count)s en total" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Gardar coma novo" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Gardar e engadir outro" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Gardar e seguir editando" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Gardar" + +#: contrib/admin/templates/admin/auth/user/add_form.html:6 +msgid "" +"First, enter a username and password. Then, you'll be able to edit more user " +"options." +msgstr "Primeiro insira un nome de usuario e un contrasinal. Despois poderá " +"editar máis opcións de usuario." + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Usuario" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:34 +msgid "Password" +msgstr "Contrasinal" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +msgid "Password (again)" +msgstr "Contrasinal (outra vez)" + +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +#: contrib/admin/templates/admin/auth/user/change_password.html:40 +msgid "Enter the same password as above, for verification." +msgstr "Insira o mesmo contrasinal ca enriba para verificalo." + +#: contrib/admin/templates/admin/auth/user/change_password.html:28 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Insira un novo contrasinal para o usuario %(username)s." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Bookmarklets" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:5 +msgid "Documentation bookmarklets" +msgstr "Bookmarklets de documentación" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:9 +msgid "" +"\n" +"

                  To install bookmarklets, drag the link to your bookmarks\n" +"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" +"select the bookmarklet from any page in the site. Note that some of these\n" +"bookmarklets require you to be viewing the site from a computer designated\n" +"as \"internal\" (talk to your system administrator if you aren't sure if\n" +"your computer is \"internal\").

                  \n" +msgstr "" +"\n" +"

                  Para instalar bookmarklets, arrastre a ligazón á súa\n" +"barra de favoritos ou marcadores, ou faga clic co botón dereito\n" +"e engádao aos marcadores. Agora pode usar o bookmarklet dende\n" +" calquera páxina do sitio web. Teña en conta que algúns destes\n" +"bookmarklets precisan que estea a visitar o sitio dende un ordenador\n" +"designado coma \"interno\" (fale co administrador do sistema se\n" +"non está seguro de que o seu ordenador é \"interno\" .

                  \n" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "Documentation for this page" +msgstr "Documentación para esta páxina" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:20 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "Salta á documentación para a vista que xera a páxina." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "Show object ID" +msgstr "Amosar ID do obxecto" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:23 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" +"Amosa o tipo de contido e a ID única para páxinas que representan un obxecto " +"determinado." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Edit this object (current window)" +msgstr "Editar este obxecto (nesta fiestra)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:26 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" +"Salta á páxina de administración para páxina que representan un obxecto " +"determinado." + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "Edit this object (new window)" +msgstr "Editar este obxecto (nunha nova fiestra)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:29 +msgid "As above, but opens the admin page in a new window." +msgstr "Como enriba, pero abre a páxina de administración nunha nova fiestra." + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Grazas polo tempo que dedicou ao sitio web." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Entrar de novo" + +#: contrib/admin/templates/registration/password_change_done.html:4 +#: contrib/admin/templates/registration/password_change_form.html:4 +#: contrib/admin/templates/registration/password_change_form.html:6 +#: contrib/admin/templates/registration/password_change_form.html:10 +msgid "Password change" +msgstr "Cambiar o contrasinal" + +#: contrib/admin/templates/registration/password_change_done.html:6 +#: contrib/admin/templates/registration/password_change_done.html:10 +msgid "Password change successful" +msgstr "O seu contrasinal cambiouse correctamente." + +#: contrib/admin/templates/registration/password_change_done.html:12 +msgid "Your password was changed." +msgstr "Cambiouse o seu contrasinal." + +#: contrib/admin/templates/registration/password_change_form.html:12 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Por razóns de seguridade, introduza o contrasinal actual. Despois introduza " +"dúas veces o contrasinal para verificarmos que o escribiu correctamente." + +#: contrib/admin/templates/registration/password_change_form.html:17 +msgid "Old password:" +msgstr "Contrasinal actual:" + +#: contrib/admin/templates/registration/password_change_form.html:19 +msgid "New password:" +msgstr "Contrasinal novo:" + +#: contrib/admin/templates/registration/password_change_form.html:21 +msgid "Confirm password:" +msgstr "Confirmar contrasinal:" + +#: contrib/admin/templates/registration/password_change_form.html:23 +msgid "Change my password" +msgstr "Cambiar o contrasinal" + +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:6 +#: contrib/admin/templates/registration/password_reset_form.html:10 +msgid "Password reset" +msgstr "Recuperar o contrasinal" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "O contrasinal foi recuperado correctamente" + +#: contrib/admin/templates/registration/password_reset_done.html:12 +msgid "" +"We've e-mailed a new password to the e-mail address you submitted. You " +"should be receiving it shortly." +msgstr "" +"Acabamos de enviarlle un novo contrasinal ao enderezo de correo indicado. " +"Debería recibilo en breve." + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "Recibe esta mensaxe porque solicitou recuperar o contrasinal" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "para a súa conta de usuario en %(site_name)s" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "O seu novo contrasinal é: %(new_password)s" + +#: contrib/admin/templates/registration/password_reset_email.html:7 +msgid "Feel free to change this password by going to this page:" +msgstr "Pode cambiar este contrasinal visitando esta páxina:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "No caso de que o esquecese, o seu nome de usuario é:" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "Grazas por usar o noso sitio web!" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "O equipo de %(site_name)s" + +#: contrib/admin/templates/registration/password_reset_form.html:12 +msgid "" +"Forgotten your password? Enter your e-mail address below, and we'll reset " +"your password and e-mail the new one to you." +msgstr "" +"Esqueceu o contrasinal? Introduza o seu enderezo de correo electrónico " +"embaixo e enviarémoslle un novo contrasinal." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "Enderezo de correo electrónico:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Recuperar o meu contrasinal" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Data:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Hora" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Agora:" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Modificar:" + +#: contrib/admin/templatetags/admin_list.py:249 +msgid "All dates" +msgstr "Todas as datas" + +#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "Engadiuse correctamente o/a %(name)s \"%(obj)s\"." + +#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 +#: contrib/admin/views/main.py:347 +msgid "You may edit it again below." +msgstr "Pode editalo embaixo." + +#: contrib/admin/views/auth.py:30 +msgid "Add user" +msgstr "Engadir usuario" + +#: contrib/admin/views/auth.py:57 +msgid "Password changed successfully." +msgstr "O contrasinal cambiouse correctamente." + +#: contrib/admin/views/auth.py:64 +#, python-format +msgid "Change password: %s" +msgstr "Cambiar contrasinal: %s" + +#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Insira un nome de usuario e un contrasinal correctos. Teña en conta que nos " +"dous campos se distingue entre maiúsculas e minúsculas." + +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Ten que identicarse outra vez porque a súa sesión expirou. Non se preocupe, " +"o que enviou quedou gardado." + +#: contrib/admin/views/decorators.py:69 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Semella que o seu navegador non está configurado para aceptar 'cookies'. " +"Por favor, habilite as 'cookies', recargue a páxina e ténteo de novo." + +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Os nomes de usuario non poden conter o carácter '@'." + +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"O seu enderezo de correo electrónico non é o seu nome de usuario. Probe con " +"'%s'." + +#: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 +#: contrib/admin/views/doc.py:50 +msgid "tag:" +msgstr "etiqueta:" + +#: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 +#: contrib/admin/views/doc.py:81 +msgid "filter:" +msgstr "filtro:" + +#: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 +#: contrib/admin/views/doc.py:139 +msgid "view:" +msgstr "vista:" + +#: contrib/admin/views/doc.py:164 +#, python-format +msgid "App %r not found" +msgstr "Non se atopou a aplicación %r" + +#: contrib/admin/views/doc.py:171 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "Non se atopou o modelo %(name)r na aplicación %(label)r" + +#: contrib/admin/views/doc.py:183 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "o obxecto `%(label)s.%(type)s` relacionado" + +#: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 +#: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 +msgid "model:" +msgstr "modelo:" + +#: contrib/admin/views/doc.py:214 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "obxectos `%(label)s.%(name)s` relacionados" + +#: contrib/admin/views/doc.py:219 +#, python-format +msgid "all %s" +msgstr "todos os %s" + +#: contrib/admin/views/doc.py:224 +#, python-format +msgid "number of %s" +msgstr "número de %s" + +#: contrib/admin/views/doc.py:229 +#, python-format +msgid "Fields on %s objects" +msgstr "Campos dos obxectos %s" + +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310 +#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313 +msgid "Integer" +msgstr "Número enteiro" + +#: contrib/admin/views/doc.py:292 +msgid "Boolean (Either True or False)" +msgstr "Valor booleano (verdadeiro ou falso)" + +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312 +#, python-format +msgid "String (up to %(maxlength)s)" +msgstr "Cadea (ata %(maxlength)s caracteres)" + +#: contrib/admin/views/doc.py:294 +msgid "Comma-separated integers" +msgstr "Números enteiros separados por comas" + +#: contrib/admin/views/doc.py:295 +msgid "Date (without time)" +msgstr "Data (sen a hora)" + +#: contrib/admin/views/doc.py:296 +msgid "Date (with time)" +msgstr "Data (coa hora)" + +#: contrib/admin/views/doc.py:297 +msgid "Decimal number" +msgstr "Número decimal" + +#: contrib/admin/views/doc.py:298 +msgid "E-mail address" +msgstr "Enderezo de correo electrónico" + +#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300 +#: contrib/admin/views/doc.py:303 +msgid "File path" +msgstr "Ruta do ficheiro" + +#: contrib/admin/views/doc.py:301 +msgid "Floating point number" +msgstr "Número de coma flotante" + +#: contrib/admin/views/doc.py:305 contrib/comments/models.py:85 +msgid "IP address" +msgstr "Enderezo IP" + +#: contrib/admin/views/doc.py:307 +msgid "Boolean (Either True, False or None)" +msgstr "Booleano (verdadeiro, falso ou ningún)" + +#: contrib/admin/views/doc.py:308 +msgid "Relation to parent model" +msgstr "Relación cun modelo pai" + +#: contrib/admin/views/doc.py:309 +msgid "Phone number" +msgstr "Número de teléfono" + +#: contrib/admin/views/doc.py:314 +msgid "Text" +msgstr "Texto" + +#: contrib/admin/views/doc.py:315 +msgid "Time" +msgstr "Hora" + +#: contrib/admin/views/doc.py:316 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" + +#: contrib/admin/views/doc.py:317 +msgid "U.S. state (two uppercase letters)" +msgstr "Estado dos Estados Unidos (dúas letras maiúsculas)" + +#: contrib/admin/views/doc.py:318 +msgid "XML text" +msgstr "Texto XML" + +#: contrib/admin/views/doc.py:344 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s non semella ser un obxecto urlpattern" + +#: contrib/admin/views/main.py:223 +msgid "Site administration" +msgstr "Administración do sitio web" + +#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 +#, python-format +msgid "You may add another %s below." +msgstr "Pode engadir outro/a %s embaixo." + +#: contrib/admin/views/main.py:289 +#, python-format +msgid "Add %s" +msgstr "Engadir %s" + +#: contrib/admin/views/main.py:335 +#, python-format +msgid "Added %s." +msgstr "Engadido/a %s." + +#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 +msgid "and" +msgstr "e" + +#: contrib/admin/views/main.py:337 +#, python-format +msgid "Changed %s." +msgstr "Modificado(s) %s." + +#: contrib/admin/views/main.py:339 +#, python-format +msgid "Deleted %s." +msgstr "Eliminado(s) %s." + +#: contrib/admin/views/main.py:342 +msgid "No fields changed." +msgstr "Non se modificou ningún campo." + +#: contrib/admin/views/main.py:345 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "Modificouse correctamente o/a %(name)s \"%(obj)s\"." + +#: contrib/admin/views/main.py:353 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "Engadiuse correctamente o/a %(name)s \"%(obj)s\" Pode editalo embaixo." + +#: contrib/admin/views/main.py:391 +#, python-format +msgid "Change %s" +msgstr "Modificar %s" + +#: contrib/admin/views/main.py:476 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "Un ou máis %(fieldname)s no/a %(name)s: %(obj)s" + +#: contrib/admin/views/main.py:481 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "Un ou máis %(fieldname)s no/a %(name)s:" + +#: contrib/admin/views/main.py:514 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Eliminouse correctamente o/a %(name)s \"%(obj)s\"." + +#: contrib/admin/views/main.py:517 +msgid "Are you sure?" +msgstr "Está seguro?" + +#: contrib/admin/views/main.py:539 +#, python-format +msgid "Change history: %s" +msgstr "Histórico de cambios: %s" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s" +msgstr "Seleccione un/ha %s" + +#: contrib/admin/views/main.py:573 +#, python-format +msgid "Select %s to change" +msgstr "Seleccione %s que modificar" + +#: contrib/admin/views/main.py:768 +msgid "Database error" +msgstr "Erro da base de datos" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Os dous campos de contrasinal non coinciden." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Xa existe un usuario con ese nome de usuario." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Semella que o seu navegador non acepta 'cookies'. Requírense 'cookies' para " +"iniciar sesión." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Esta conta está inactiva." + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" +"Este enderezo de correo electrónico non ten unha conta de usuario asociada. " +"Está seguro de que está rexistrado?" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Os dous campos 'contrasinal novo' non coinciden." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Inseriu incorrectamente o seu contrasinal actual. Por favor, insírao de novo." + +#: contrib/auth/models.py:44 contrib/auth/models.py:64 +msgid "name" +msgstr "nome" + +#: contrib/auth/models.py:46 +msgid "codename" +msgstr "código" + +#: contrib/auth/models.py:49 +msgid "permission" +msgstr "permiso" + +#: contrib/auth/models.py:50 contrib/auth/models.py:65 +msgid "permissions" +msgstr "permisos" + +#: contrib/auth/models.py:68 +msgid "group" +msgstr "grupo" + +#: contrib/auth/models.py:69 contrib/auth/models.py:109 +msgid "groups" +msgstr "grupos" + +#: contrib/auth/models.py:99 +msgid "username" +msgstr "nome de usuario" + +#: contrib/auth/models.py:99 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" +"Requirido. 30 caracteres ou menos. Soamente caracteres alfanuméricos " +"(letras, díxitos ou guións baixos)." + +#: contrib/auth/models.py:100 +msgid "first name" +msgstr "nome" + +#: contrib/auth/models.py:101 +msgid "last name" +msgstr "apelidos" + +#: contrib/auth/models.py:102 +msgid "e-mail address" +msgstr "enderezo de correo electrónico" + +#: contrib/auth/models.py:103 +msgid "password" +msgstr "contrasinal" + +#: contrib/auth/models.py:103 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Use '[algo]$[salt]$[hexdigest]' ou utilice o formulario de " +"cambio de contrasinal." + +#: contrib/auth/models.py:104 +msgid "staff status" +msgstr "membro do persoal" + +#: contrib/auth/models.py:104 +msgid "Designates whether the user can log into this admin site." +msgstr "Indica se o usuario pode entrar neste sitio de administración." + +#: contrib/auth/models.py:105 +msgid "active" +msgstr "activo" + +#: contrib/auth/models.py:105 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "Indica se o usuario pode entrar na sección de administración. " +"Desactíveo no canto de borrar contas de usuario." + +#: contrib/auth/models.py:106 +msgid "superuser status" +msgstr "estatus de superusuario" + +#: contrib/auth/models.py:106 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Indica que este usuario ten todos os permisos sen asignarllos explicitamente." + + +#: contrib/auth/models.py:107 +msgid "last login" +msgstr "última sesión" + +#: contrib/auth/models.py:108 +msgid "date joined" +msgstr "data de rexistro" + +#: contrib/auth/models.py:110 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Ademais dos permisos asignados manualmente, este usuario gozará de todos os " +"permisos concedidos a cada un dos grupos aos que pertence." + +#: contrib/auth/models.py:111 +msgid "user permissions" +msgstr "permisos de usuario" + +#: contrib/auth/models.py:115 +msgid "user" +msgstr "usuario" + +#: contrib/auth/models.py:116 +msgid "users" +msgstr "usuarios" + +#: contrib/auth/models.py:122 +msgid "Personal info" +msgstr "Información persoal" + +#: contrib/auth/models.py:123 +msgid "Permissions" +msgstr "Permisos" + +#: contrib/auth/models.py:124 +msgid "Important dates" +msgstr "Datas importantes" + +#: contrib/auth/models.py:125 +msgid "Groups" +msgstr "Grupos" + +#: contrib/auth/models.py:269 +msgid "message" +msgstr "mensaxe" + +#: contrib/auth/models.py:282 +msgid "AnonymousUser" +msgstr "UsuarioAnónimo" + +#: contrib/auth/views.py:40 +msgid "Logged out" +msgstr "Rematou a sesión" + #: contrib/comments/models.py:67 contrib/comments/models.py:166 msgid "object ID" msgstr "ID do obxecto" @@ -32,39 +1281,39 @@ msgstr "comentario" #: contrib/comments/models.py:70 msgid "rating #1" -msgstr "" +msgstr "valoración 1" #: contrib/comments/models.py:71 msgid "rating #2" -msgstr "" +msgstr "valoración 2" #: contrib/comments/models.py:72 msgid "rating #3" -msgstr "" +msgstr "valoración 3" #: contrib/comments/models.py:73 msgid "rating #4" -msgstr "" +msgstr "valoración 4" #: contrib/comments/models.py:74 msgid "rating #5" -msgstr "" +msgstr "valoración 5" #: contrib/comments/models.py:75 msgid "rating #6" -msgstr "" +msgstr "valoración 6" #: contrib/comments/models.py:76 msgid "rating #7" -msgstr "" +msgstr "valoración 7" #: contrib/comments/models.py:77 msgid "rating #8" -msgstr "" +msgstr "valoración 8" #: contrib/comments/models.py:82 msgid "is valid rating" -msgstr "é unha puntuación válida" +msgstr "é unha valoración válida" #: contrib/comments/models.py:83 contrib/comments/models.py:169 msgid "date/time submitted" @@ -74,10 +1323,6 @@ msgstr "data/hora do envío" msgid "is public" msgstr "é público" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -msgid "IP address" -msgstr "Enderezo IP" - #: contrib/comments/models.py:86 msgid "is removed" msgstr "está borrado" @@ -152,7 +1397,7 @@ msgstr "puntos de karma" #: contrib/comments/models.py:242 #, python-format msgid "%(score)d rating by %(user)s" -msgstr "" +msgstr "puntuación de %(score)d por %(user)s" #: contrib/comments/models.py:258 #, python-format @@ -199,24 +1444,49 @@ msgstr "borrados de moderador" msgid "Moderator deletion by %r" msgstr "Borrado polo moderador %r" -#: contrib/comments/views/karma.py:19 -msgid "Anonymous users cannot vote" -msgstr "Os usuarios anónimos non poden votar" +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Esqueceu o contrasinal?" -#: contrib/comments/views/karma.py:23 -msgid "Invalid comment ID" -msgstr "ID de comentario non válida" +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Valoracións" -#: contrib/comments/views/karma.py:25 -msgid "No voting for yourself" -msgstr "Vostede non se pode votar a si mesmo" +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Requirido" -#: contrib/comments/views/comments.py:28 +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Opcional" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Publicar unha foto" + +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "Comentario:" + +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "Previsualizar comentario" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "O seu nome:" + +#: contrib/comments/views/comments.py:27 msgid "" "This rating is required because you've entered at least one other rating." -msgstr "" +msgstr "Requírese esta valoración porque vostede inseriu polo menos " +"outra valoración." -#: contrib/comments/views/comments.py:112 +#: contrib/comments/views/comments.py:111 #, python-format msgid "" "This comment was posted by a user who has posted fewer than %(count)s " @@ -239,30 +1509,33 @@ msgstr[1] "" "\n" "%(text)s" -#: contrib/comments/views/comments.py:117 +#: contrib/comments/views/comments.py:116 #, python-format msgid "" "This comment was posted by a sketchy user:\n" "\n" "%(text)s" msgstr "" +"Este comentario foi enviado por un usuario conflitivo:\n" +"\n" +"%(text)s" -#: contrib/comments/views/comments.py:189 +#: contrib/comments/views/comments.py:188 #: contrib/comments/views/comments.py:280 msgid "Only POSTs are allowed" msgstr "Soamente se permiten envíos polo método POST" -#: contrib/comments/views/comments.py:193 +#: contrib/comments/views/comments.py:192 #: contrib/comments/views/comments.py:284 msgid "One or more of the required fields wasn't submitted" msgstr "Non se enviaron un ou máis dos campos requiridos" -#: contrib/comments/views/comments.py:197 +#: contrib/comments/views/comments.py:196 #: contrib/comments/views/comments.py:286 msgid "Somebody tampered with the comment form (security violation)" msgstr "Alguén manipulou o formulario do comentario (violación de seguridade)" -#: contrib/comments/views/comments.py:207 +#: contrib/comments/views/comments.py:206 #: contrib/comments/views/comments.py:292 msgid "" "The comment form had an invalid 'target' parameter -- the object ID was " @@ -276,816 +1549,29 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "O formulario de comentario non proporciona 'preview' ou 'post'" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/login.html:17 -msgid "Username:" -msgstr "Usuario:" +#: contrib/comments/views/karma.py:19 +msgid "Anonymous users cannot vote" +msgstr "Os usuarios anónimos non poden votar" -#: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/login.html:20 -msgid "Password:" -msgstr "Contrasinal:" +#: contrib/comments/views/karma.py:23 +msgid "Invalid comment ID" +msgstr "ID de comentario non válida" -#: contrib/comments/templates/comments/form.html:6 -msgid "Forgotten your password?" -msgstr "Esqueceu o contrasinal?" +#: contrib/comments/views/karma.py:25 +msgid "No voting for yourself" +msgstr "Vostede non se pode votar a si mesmo" -#: contrib/comments/templates/comments/form.html:8 -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Log out" -msgstr "Rematar sesión" +#: contrib/contenttypes/models.py:36 +msgid "python model class name" +msgstr "nome do módulo Python" -#: contrib/comments/templates/comments/form.html:12 -msgid "Ratings" -msgstr "" +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "tipo de contido" -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Required" -msgstr "Requirido" - -#: contrib/comments/templates/comments/form.html:12 -#: contrib/comments/templates/comments/form.html:23 -msgid "Optional" -msgstr "Opcional" - -#: contrib/comments/templates/comments/form.html:23 -msgid "Post a photo" -msgstr "Publicar unha foto" - -#: contrib/comments/templates/comments/form.html:27 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "Comentario:" - -#: contrib/comments/templates/comments/form.html:32 -#: contrib/comments/templates/comments/freeform.html:9 -msgid "Preview comment" -msgstr "Previsualizar comentario" - -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Nome:" - -#: contrib/admin/filterspecs.py:40 -#, python-format -msgid "" -"

                  By %s:

                  \n" -"
                    \n" -msgstr "" -"

                    Por %s:

                    \n" -"
                      \n" - -#: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 -#: contrib/admin/filterspecs.py:143 -msgid "All" -msgstr "Todo" - -#: contrib/admin/filterspecs.py:109 -msgid "Any date" -msgstr "Calquera data" - -#: contrib/admin/filterspecs.py:110 -msgid "Today" -msgstr "Hoxe" - -#: contrib/admin/filterspecs.py:113 -msgid "Past 7 days" -msgstr "Últimos 7 días" - -#: contrib/admin/filterspecs.py:115 -msgid "This month" -msgstr "Este mes" - -#: contrib/admin/filterspecs.py:117 -msgid "This year" -msgstr "Este ano" - -#: contrib/admin/filterspecs.py:143 -msgid "Yes" -msgstr "Si" - -#: contrib/admin/filterspecs.py:143 -msgid "No" -msgstr "Non" - -#: contrib/admin/filterspecs.py:150 -msgid "Unknown" -msgstr "Descoñecido" - -#: contrib/admin/models.py:16 -msgid "action time" -msgstr "hora da acción" - -#: contrib/admin/models.py:19 -msgid "object id" -msgstr "id do obxecto" - -#: contrib/admin/models.py:20 -msgid "object repr" -msgstr "repr do obxecto" - -#: contrib/admin/models.py:21 -msgid "action flag" -msgstr "código do tipo de acción" - -#: contrib/admin/models.py:22 -msgid "change message" -msgstr "cambiar mensaxe" - -#: contrib/admin/models.py:25 -msgid "log entry" -msgstr "entrada de rexistro" - -#: contrib/admin/models.py:26 -msgid "log entries" -msgstr "entradas de rexistro" - -#: contrib/admin/templatetags/admin_list.py:228 -msgid "All dates" -msgstr "Todas as datas" - -#: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 -#: contrib/auth/forms.py:41 -msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." -msgstr "Insira un nome de usuario e un contrasinal correctos. Teña en conta que " -"nos dous campos se distingue entre maiúsculas e minúsculas." - -#: contrib/admin/views/decorators.py:23 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Iniciar sesión" - -#: contrib/admin/views/decorators.py:61 -msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." -msgstr "" -"Ten que identicarse outra vez porque a súa sesión expirou. Non se preocupe, " -"o que enviou quedou gardado." - -#: contrib/admin/views/decorators.py:68 -msgid "" -"Looks like your browser isn't configured to accept cookies. Please enable " -"cookies, reload this page, and try again." -msgstr "" -"Semella que o seu navegador non está configurado para aceptar 'cookies'. " -"Por favor, habilite as 'cookies', recargue a páxina e ténteo de novo." - -#: contrib/admin/views/decorators.py:82 -msgid "Usernames cannot contain the '@' character." -msgstr "Os nomes de usuario non poden conter o carácter '@'." - -#: contrib/admin/views/decorators.py:84 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "" -"O seu enderezo de correo electrónico non é o seu nome de usuario. Probe con " -"'%s'." - -#: contrib/admin/views/main.py:226 -msgid "Site administration" -msgstr "Administración do sitio web" - -#: contrib/admin/views/main.py:260 -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "Engadiuse correctamente o/a %(name)s \"%(obj)s\"." - -#: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 -msgid "You may edit it again below." -msgstr "Pode editalo embaixo." - -#: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 -#, python-format -msgid "You may add another %s below." -msgstr "Pode engadir outro/a %s embaixo." - -#: contrib/admin/views/main.py:290 -#, python-format -msgid "Add %s" -msgstr "Engadir %s" - -#: contrib/admin/views/main.py:336 -#, python-format -msgid "Added %s." -msgstr "Engadido/a %s." - -#: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 -#: contrib/admin/views/main.py:340 -msgid "and" -msgstr "e" - -#: contrib/admin/views/main.py:338 -#, python-format -msgid "Changed %s." -msgstr "Modificado(s) %s." - -#: contrib/admin/views/main.py:340 -#, python-format -msgid "Deleted %s." -msgstr "Eliminado(s) %s." - -#: contrib/admin/views/main.py:343 -msgid "No fields changed." -msgstr "Non se modificou ningún campo." - -#: contrib/admin/views/main.py:346 -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "Modificouse correctamente o/a %(name)s \"%(obj)s\"." - -#: contrib/admin/views/main.py:354 -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "Engadiuse correctamente o/a %(name)s \"%(obj)s\" Pode editalo embaixo." - -#: contrib/admin/views/main.py:392 -#, python-format -msgid "Change %s" -msgstr "Modificar %s" - -#: contrib/admin/views/main.py:470 -#, python-format -msgid "One or more %(fieldname)s in %(name)s: %(obj)s" -msgstr "Un ou máis %(fieldname)s no/a %(name)s: %(obj)s" - -#: contrib/admin/views/main.py:475 -#, python-format -msgid "One or more %(fieldname)s in %(name)s:" -msgstr "Un ou máis %(fieldname)s no/a %(name)s:" - -#: contrib/admin/views/main.py:508 -#, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "Eliminouse correctamente o/a %(name)s \"%(obj)s\"." - -#: contrib/admin/views/main.py:511 -msgid "Are you sure?" -msgstr "Está seguro?" - -#: contrib/admin/views/main.py:533 -#, python-format -msgid "Change history: %s" -msgstr "Histórico de cambios: %s" - -#: contrib/admin/views/main.py:565 -#, python-format -msgid "Select %s" -msgstr "Seleccione un/ha %s" - -#: contrib/admin/views/main.py:565 -#, python-format -msgid "Select %s to change" -msgstr "Seleccione %s que modificar" - -#: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 -#: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 -#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 -msgid "Integer" -msgstr "Número enteiro" - -#: contrib/admin/views/doc.py:278 -msgid "Boolean (Either True or False)" -msgstr "Valor booleano (verdadeiro ou falso)" - -#: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 -#, python-format -msgid "String (up to %(maxlength)s)" -msgstr "Cadea (ata %(maxlength)s caracteres)" - -#: contrib/admin/views/doc.py:280 -msgid "Comma-separated integers" -msgstr "Números enteiros separados por comas" - -#: contrib/admin/views/doc.py:281 -msgid "Date (without time)" -msgstr "Data (sen a hora)" - -#: contrib/admin/views/doc.py:282 -msgid "Date (with time)" -msgstr "Data (coa hora)" - -#: contrib/admin/views/doc.py:283 -msgid "E-mail address" -msgstr "Enderezo de correo electrónico" - -#: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 -msgid "File path" -msgstr "Ruta do ficheiro" - -#: contrib/admin/views/doc.py:285 -msgid "Decimal number" -msgstr "Número decimal" - -#: contrib/admin/views/doc.py:291 -msgid "Boolean (Either True, False or None)" -msgstr "Booleano (verdadeiro, falso ou ningún)" - -#: contrib/admin/views/doc.py:292 -msgid "Relation to parent model" -msgstr "Relación cun modelo pai" - -#: contrib/admin/views/doc.py:293 -msgid "Phone number" -msgstr "Número de teléfono" - -#: contrib/admin/views/doc.py:298 -msgid "Text" -msgstr "Texto" - -#: contrib/admin/views/doc.py:299 -msgid "Time" -msgstr "Hora" - -#: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 -msgid "URL" -msgstr "URL" - -#: contrib/admin/views/doc.py:301 -msgid "U.S. state (two uppercase letters)" -msgstr "Estado dos Estados Unidos (dúas letras maíusculas)" - -#: contrib/admin/views/doc.py:302 -msgid "XML text" -msgstr "Texto XML" - -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Documentation" -msgstr "Documentación" - -#: contrib/admin/templates/admin/object_history.html:3 -#: contrib/admin/templates/admin/change_list.html:5 -#: contrib/admin/templates/admin/base.html:23 -#: contrib/admin/templates/admin/delete_confirmation.html:3 -#: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/registration/password_change_done.html:3 -#: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 -#: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 -#: contrib/admin/templates/admin_doc/missing_docutils.html:4 -#: contrib/admin/templates/admin_doc/view_index.html:5 -#: contrib/admin/templates/admin_doc/model_detail.html:3 -#: contrib/admin/templates/admin_doc/index.html:4 -#: contrib/admin/templates/admin_doc/model_index.html:5 -msgid "Change password" -msgstr "Cambiar contrasinal" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/500.html:4 -#: contrib/admin/templates/admin/change_list.html:6 -#: contrib/admin/templates/admin/base.html:28 -#: contrib/admin/templates/admin/delete_confirmation.html:6 -#: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/logged_out.html:4 -#: contrib/admin/templates/registration/password_reset_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Home" -msgstr "Inicio" - -#: contrib/admin/templates/admin/object_history.html:5 -#: contrib/admin/templates/admin/change_form.html:20 -msgid "History" -msgstr "Histórico" - -#: contrib/admin/templates/admin/object_history.html:18 -msgid "Date/time" -msgstr "Data/hora" - -#: contrib/admin/templates/admin/object_history.html:19 -msgid "User" -msgstr "Usuario" - -#: contrib/admin/templates/admin/object_history.html:20 -msgid "Action" -msgstr "Acción" - -#: contrib/admin/templates/admin/object_history.html:26 -msgid "DATE_WITH_TIME_FULL" -msgstr "j de N de Y, H:i" - -#: contrib/admin/templates/admin/object_history.html:36 -msgid "" -"This object doesn't have a change history. It probably wasn't added via this " -"admin site." -msgstr "" -"Este obxecto non ten histórico de cambios. Posibelmente non se creou usando " -"este sitio de administración." - -#: contrib/admin/templates/admin/base_site.html:4 -msgid "Django site admin" -msgstr "Administración de sitio Django" - -#: contrib/admin/templates/admin/base_site.html:7 -msgid "Django administration" -msgstr "Administración de Django" - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Erro do servidor" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Erro do servidor (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Erro do servidor (500)" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Houbo un erro. Xa se informou aos administradores do sitio por correo " -"electrónico e debería quedar arranxado pronto. Grazas pola súa paciencia." - -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Páxina non atopada" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Sentímolo, pero non se atopou a páxina solicitada." - -#: contrib/admin/templates/admin/index.html:17 -#, python-format -msgid "Models available in the %(name)s application." -msgstr "Modelos dispoñíbeis na aplicación %(name)s." - -#: contrib/admin/templates/admin/index.html:28 -#: contrib/admin/templates/admin/change_form.html:15 -msgid "Add" -msgstr "Engadir" - -#: contrib/admin/templates/admin/index.html:34 -msgid "Change" -msgstr "Modificar" - -#: contrib/admin/templates/admin/index.html:44 -msgid "You don't have permission to edit anything." -msgstr "Non ten permiso para editar nada." - -#: contrib/admin/templates/admin/index.html:52 -msgid "Recent Actions" -msgstr "Accións recentes" - -#: contrib/admin/templates/admin/index.html:53 -msgid "My Actions" -msgstr "As miñas accións" - -#: contrib/admin/templates/admin/index.html:57 -msgid "None available" -msgstr "Ningunha dispoñíbel" - -#: contrib/admin/templates/admin/change_list.html:11 -#, python-format -msgid "Add %(name)s" -msgstr "Engadir %(name)s" - -#: contrib/admin/templates/admin/login.html:22 -msgid "Have you forgotten your password?" -msgstr "Esqueceu o contrasinal?" - -#: contrib/admin/templates/admin/base.html:23 -msgid "Welcome," -msgstr "Benvido," - -#: contrib/admin/templates/admin/delete_confirmation.html:9 -#: contrib/admin/templates/admin/submit_line.html:3 -msgid "Delete" -msgstr "Eliminar" - -#: contrib/admin/templates/admin/delete_confirmation.html:14 -#, python-format -msgid "" -"Deleting the %(object_name)s '%(object)s' would result in deleting related " -"objects, but your account doesn't have permission to delete the following " -"types of objects:" -msgstr "" -"Borrar o %(object_name)s '%(object)s' resultaría na eliminación de elementos " -"relacionados, pero a súa conta non ten permiso para borrar os seguintes " -"tipos de elementos:" - -#: contrib/admin/templates/admin/delete_confirmation.html:21 -#, python-format -msgid "" -"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of " -"the following related items will be deleted:" -msgstr "" -"Seguro que quere borrar o %(object_name)s \"%(object)s\"? Eliminaranse os " -"seguintes obxectos relacionados:" - -#: contrib/admin/templates/admin/delete_confirmation.html:26 -msgid "Yes, I'm sure" -msgstr "Si, estou seguro" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(title)s " -msgstr " Por %(title)s " - -#: contrib/admin/templates/admin/search_form.html:8 -msgid "Go" -msgstr "Ir" - -#: contrib/admin/templates/admin/change_form.html:21 -msgid "View on site" -msgstr "Ver na web" - -#: contrib/admin/templates/admin/change_form.html:30 -msgid "Please correct the error below." -msgid_plural "Please correct the errors below." -msgstr[0] "Por favor, corrixa o erro de embaixo." -msgstr[1] "Por favor, corrixa os erros de embaixo." - -#: contrib/admin/templates/admin/change_form.html:48 -msgid "Ordering" -msgstr "Orde" - -#: contrib/admin/templates/admin/change_form.html:51 -msgid "Order:" -msgstr "Orde:" - -#: contrib/admin/templates/admin/submit_line.html:4 -msgid "Save as new" -msgstr "Gardar coma novo" - -#: contrib/admin/templates/admin/submit_line.html:5 -msgid "Save and add another" -msgstr "Gardar e engadir outro" - -#: contrib/admin/templates/admin/submit_line.html:6 -msgid "Save and continue editing" -msgstr "Gardar e seguir editando" - -#: contrib/admin/templates/admin/submit_line.html:7 -msgid "Save" -msgstr "Gardar" - -#: contrib/admin/templates/registration/password_change_done.html:4 -#: contrib/admin/templates/registration/password_change_form.html:4 -#: contrib/admin/templates/registration/password_change_form.html:6 -#: contrib/admin/templates/registration/password_change_form.html:10 -msgid "Password change" -msgstr "Cambiar o contrasinal" - -#: contrib/admin/templates/registration/password_change_done.html:6 -#: contrib/admin/templates/registration/password_change_done.html:10 -msgid "Password change successful" -msgstr "O seu contrasinal cambiouse correctamente." - -#: contrib/admin/templates/registration/password_change_done.html:12 -msgid "Your password was changed." -msgstr "Cambiouse o seu contrasinal." - -#: contrib/admin/templates/registration/password_reset_form.html:4 -#: contrib/admin/templates/registration/password_reset_form.html:6 -#: contrib/admin/templates/registration/password_reset_form.html:10 -#: contrib/admin/templates/registration/password_reset_done.html:4 -msgid "Password reset" -msgstr "Recuperar o contrasinal" - -#: contrib/admin/templates/registration/password_reset_form.html:12 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll reset " -"your password and e-mail the new one to you." -msgstr "" -"Esqueceu o contrasinal? Introduza o seu enderezo de correo electrónico " -"embaixo e enviarémoslle un novo contrasinal." - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "E-mail address:" -msgstr "Enderezo de correo electrónico:" - -#: contrib/admin/templates/registration/password_reset_form.html:16 -msgid "Reset my password" -msgstr "Recuperar o meu contrasinal" - -#: contrib/admin/templates/registration/logged_out.html:8 -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Grazas polo tempo que dedicou ao sitio web." - -#: contrib/admin/templates/registration/logged_out.html:10 -msgid "Log in again" -msgstr "Entrar de novo" - -#: contrib/admin/templates/registration/password_reset_done.html:6 -#: contrib/admin/templates/registration/password_reset_done.html:10 -msgid "Password reset successful" -msgstr "O contrasinal foi recuperado correctamente" - -#: contrib/admin/templates/registration/password_reset_done.html:12 -msgid "" -"We've e-mailed a new password to the e-mail address you submitted. You " -"should be receiving it shortly." -msgstr "" -"Acabamos de enviarlle un novo contrasinal ao enderezo de correo indicado. " -"Debería recibilo en breve." - -#: contrib/admin/templates/registration/password_change_form.html:12 -msgid "" -"Please enter your old password, for security's sake, and then enter your new " -"password twice so we can verify you typed it in correctly." -msgstr "" -"Por razóns de seguridade, introduza o contrasinal actual. Despois introduza " -"dúas veces o contrasinal para verificarmos que o escribiu correctamente." - -#: contrib/admin/templates/registration/password_change_form.html:17 -msgid "Old password:" -msgstr "Contrasinal actual:" - -#: contrib/admin/templates/registration/password_change_form.html:19 -msgid "New password:" -msgstr "Contrasinal novo:" - -#: contrib/admin/templates/registration/password_change_form.html:21 -msgid "Confirm password:" -msgstr "Confirmar contrasinal:" - -#: contrib/admin/templates/registration/password_change_form.html:23 -msgid "Change my password" -msgstr "Cambiar o contrasinal" - -#: contrib/admin/templates/registration/password_reset_email.html:2 -msgid "You're receiving this e-mail because you requested a password reset" -msgstr "Recibe esta mensaxe porque solicitou recuperar o contrasinal" - -#: contrib/admin/templates/registration/password_reset_email.html:3 -#, python-format -msgid "for your user account at %(site_name)s" -msgstr "para a súa conta de usuario en %(site_name)s" - -#: contrib/admin/templates/registration/password_reset_email.html:5 -#, python-format -msgid "Your new password is: %(new_password)s" -msgstr "O seu novo contrasinal é: %(new_password)s" - -#: contrib/admin/templates/registration/password_reset_email.html:7 -msgid "Feel free to change this password by going to this page:" -msgstr "Pode cambiar este contrasinal visitando esta páxina:" - -#: contrib/admin/templates/registration/password_reset_email.html:11 -msgid "Your username, in case you've forgotten:" -msgstr "No caso de que o esquecese, o seu nome de usuario é:" - -#: contrib/admin/templates/registration/password_reset_email.html:13 -msgid "Thanks for using our site!" -msgstr "Grazas por usar o noso sitio web!" - -#: contrib/admin/templates/registration/password_reset_email.html:15 -#, python-format -msgid "The %(site_name)s team" -msgstr "O equipo de %(site_name)s" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:3 -msgid "Bookmarklets" -msgstr "Bookmarklets" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:5 -msgid "Documentation bookmarklets" -msgstr "Bookmarklets de documentación" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:9 -msgid "" -"\n" -"

                      To install bookmarklets, drag the link to your bookmarks\n" -"toolbar, or right-click the link and add it to your bookmarks. Now you can\n" -"select the bookmarklet from any page in the site. Note that some of these\n" -"bookmarklets require you to be viewing the site from a computer designated\n" -"as \"internal\" (talk to your system administrator if you aren't sure if\n" -"your computer is \"internal\").

                      \n" -msgstr "" -"\n" -"

                      Para instalar bookmarklets, arrastre a ligazón á súa\n" -"barra de favoritos ou marcadores, ou faga clic co botón dereito\n" -"e engádao aos marcadores. Agora pode usar o bookmarklet dende\n" -" calquera páxina do sitio web. Teña en conta que algúns destes\n" -"bookmarklets precisan que estea a visitar o sitio dende un ordenador\n" -"designado coma \"interno\" (fale co administrador do sistema se\n" -"non está seguro de que o seu ordenador é \"interno\" .

                      \n" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:19 -msgid "Documentation for this page" -msgstr "Documentación para esta páxina" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:20 -msgid "" -"Jumps you from any page to the documentation for the view that generates " -"that page." -msgstr "Salta á documentación para a vista que xera a páxina." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:22 -msgid "Show object ID" -msgstr "Amosar ID do obxecto" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:23 -msgid "" -"Shows the content-type and unique ID for pages that represent a single " -"object." -msgstr "" -"Amosa o tipo de contido e a ID única para páxinas que representan un obxecto " -"determinado." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:25 -msgid "Edit this object (current window)" -msgstr "Editar este obxecto (nesta fiestra)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:26 -msgid "Jumps to the admin page for pages that represent a single object." -msgstr "" -"Salta á páxina de administración para páxina que representan un obxecto " -"determinado." - -#: contrib/admin/templates/admin_doc/bookmarklets.html:28 -msgid "Edit this object (new window)" -msgstr "Editar este obxecto (nunha nova fiestra)" - -#: contrib/admin/templates/admin_doc/bookmarklets.html:29 -msgid "As above, but opens the admin page in a new window." -msgstr "Como enriba, pero abre a páxina de administración nunha nova fiestra." - -#: contrib/admin/templates/widget/date_time.html:3 -msgid "Date:" -msgstr "Data:" - -#: contrib/admin/templates/widget/date_time.html:4 -msgid "Time:" -msgstr "Hora" - -#: contrib/admin/templates/widget/file.html:2 -msgid "Currently:" -msgstr "Agora:" - -#: contrib/admin/templates/widget/file.html:3 -msgid "Change:" -msgstr "Modificar:" - -#: contrib/redirects/models.py:7 -msgid "redirect from" -msgstr "orixe da redirección" - -#: contrib/redirects/models.py:8 -msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" -"Debe ser unha ruta absoluta, sen o nome de dominio. Exemplo: '/events/" -"search/'" - -#: contrib/redirects/models.py:9 -msgid "redirect to" -msgstr "destino da redirección" - -#: contrib/redirects/models.py:10 -msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." -msgstr "" -"Pode ser unha ruta absoluta (coma a de enriba) ou un URL completo que empece " -"por 'http://'" - -#: contrib/redirects/models.py:12 -msgid "redirect" -msgstr "redirección" - -#: contrib/redirects/models.py:13 -msgid "redirects" -msgstr "redireccións" +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "tipos de contido" #: contrib/flatpages/models.py:8 msgid "" @@ -1111,11 +1597,11 @@ msgstr "nome da plantilla" #: contrib/flatpages/models.py:13 msgid "" -"Example: 'flatpages/contact_page'. If this isn't provided, the system will " -"use 'flatpages/default'." +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." msgstr "" -"Exemplo: 'flatpages/contact_page'. Se non se especifica, o sistema usará " -"'flatpages/default'." +"Exemplo: 'flatpages/contact_page.html'. Se non se especifica, o sistema usará " +"'flatpages/default.html'." #: contrib/flatpages/models.py:14 msgid "registration required" @@ -1133,154 +1619,594 @@ msgstr "páxina simple" msgid "flat pages" msgstr "páxinas simples" -#: contrib/auth/models.py:13 contrib/auth/models.py:26 -msgid "name" -msgstr "nome" +#: contrib/humanize/templatetags/humanize.py:17 +msgid "th" +msgstr "º" -#: contrib/auth/models.py:15 -msgid "codename" -msgstr "código" +#: contrib/humanize/templatetags/humanize.py:17 +msgid "st" +msgstr "º" -#: contrib/auth/models.py:17 -msgid "permission" -msgstr "permiso" +#: contrib/humanize/templatetags/humanize.py:17 +msgid "nd" +msgstr "º" -#: contrib/auth/models.py:18 contrib/auth/models.py:27 -msgid "permissions" -msgstr "permisos" +#: contrib/humanize/templatetags/humanize.py:17 +msgid "rd" +msgstr "º" -#: contrib/auth/models.py:29 -msgid "group" -msgstr "grupo" +#: contrib/humanize/templatetags/humanize.py:47 +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f millón" +msgstr[1] "%(value).1f millóns" -#: contrib/auth/models.py:30 contrib/auth/models.py:65 -msgid "groups" -msgstr "grupos" +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f mil millóns" +msgstr[1] "%(value).1f miles de millóns" -#: contrib/auth/models.py:55 -msgid "username" -msgstr "nome de usuario" +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f billón" +msgstr[1] "%(value).1f billóns" -#: contrib/auth/models.py:56 -msgid "first name" -msgstr "nome" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "one" +msgstr "un" -#: contrib/auth/models.py:57 -msgid "last name" -msgstr "apelidos" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "dous" -#: contrib/auth/models.py:58 -msgid "e-mail address" -msgstr "enderezo de correo electrónico" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "three" +msgstr "tres" -#: contrib/auth/models.py:59 -msgid "password" -msgstr "contrasinal" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "four" +msgstr "catro" -#: contrib/auth/models.py:59 -msgid "Use '[algo]$[salt]$[hexdigest]'" -msgstr "Use '[algo]$[salt]$[hexdigest]'" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "five" +msgstr "cinco" -#: contrib/auth/models.py:60 -msgid "staff status" -msgstr "membro do persoal" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "seis" -#: contrib/auth/models.py:60 -msgid "Designates whether the user can log into this admin site." -msgstr "Indica se o usuario pode entrar neste sitio de administración." +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "sete" -#: contrib/auth/models.py:61 -msgid "active" -msgstr "activo" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "oito" -#: contrib/auth/models.py:62 -msgid "superuser status" -msgstr "estado de superusuario" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "nine" +msgstr "nove" -#: contrib/auth/models.py:63 -msgid "last login" -msgstr "última sesión" +#: contrib/localflavor/au/forms.py:18 +msgid "Enter a 4 digit post code." +msgstr "Insira un código postal de 4 díxitos." -#: contrib/auth/models.py:64 -msgid "date joined" -msgstr "data de rexistro" +#: contrib/localflavor/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "Insira un código postal no formato XXXXX-XXX." -#: contrib/auth/models.py:66 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." msgstr "" -"Ademais dos permisos asignados manualmente, este usuario gozará de todos os " -"permisos concedidos a cada un dos grupos aos que pertence." +"Os números de teléfono deben estar no formato XX-XXXX-XXXX." -#: contrib/auth/models.py:67 -msgid "user permissions" -msgstr "permisos de usuario" +#: contrib/localflavor/br/forms.py:72 +msgid "This field requires only numbers." +msgstr "Este campo soamente admite números." -#: contrib/auth/models.py:70 -msgid "user" -msgstr "usuario" +#: contrib/localflavor/br/forms.py:74 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "Este campo acepta como máximo 11 díxitos ou 14 caracteres." -#: contrib/auth/models.py:71 -msgid "users" -msgstr "usuarios" +#: contrib/localflavor/br/forms.py:84 +msgid "Invalid CPF number." +msgstr "Número de CPF non válido." -#: contrib/auth/models.py:76 -msgid "Personal info" -msgstr "Información persoal" +#: contrib/localflavor/br/forms.py:106 +msgid "This field requires at least 14 digits" +msgstr "Este campo require polo menos 14 díxitos." -#: contrib/auth/models.py:77 -msgid "Permissions" -msgstr "Permisos" +#: contrib/localflavor/br/forms.py:116 +msgid "Invalid CNPJ number." +msgstr "Número de CNPJ non válido" -#: contrib/auth/models.py:78 -msgid "Important dates" -msgstr "Datas importantes" +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "Argovia" -#: contrib/auth/models.py:79 -msgid "Groups" -msgstr "Grupos" +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "Appenzell Interior" -#: contrib/auth/models.py:219 -msgid "message" -msgstr "mensaxe" +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "Appenzell Exterior" -#: contrib/auth/forms.py:30 +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "Basilea-Cidade" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "Basilea-Campo" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "Berna" + +#: contrib/localflavor/ch/ch_states.py:11 +msgid "Fribourg" +msgstr "Friburgo" + +#: contrib/localflavor/ch/ch_states.py:12 +msgid "Geneva" +msgstr "Xenebra" + +#: contrib/localflavor/ch/ch_states.py:13 +msgid "Glarus" +msgstr "Glarus" + +#: contrib/localflavor/ch/ch_states.py:14 +msgid "Graubuenden" +msgstr "Grisóns" + +#: contrib/localflavor/ch/ch_states.py:15 +msgid "Jura" +msgstr "Xura" + +#: contrib/localflavor/ch/ch_states.py:16 +msgid "Lucerne" +msgstr "Lucerna" + +#: contrib/localflavor/ch/ch_states.py:17 +msgid "Neuchatel" +msgstr "Neuchatel" + +#: contrib/localflavor/ch/ch_states.py:18 +msgid "Nidwalden" +msgstr "Nidwald" + +#: contrib/localflavor/ch/ch_states.py:19 +msgid "Obwalden" +msgstr "Obwald" + +#: contrib/localflavor/ch/ch_states.py:20 +msgid "Schaffhausen" +msgstr "Schaffhausen" + +#: contrib/localflavor/ch/ch_states.py:21 +msgid "Schwyz" +msgstr "Schwyz" + +#: contrib/localflavor/ch/ch_states.py:22 +msgid "Solothurn" +msgstr "Soleura" + +#: contrib/localflavor/ch/ch_states.py:23 +msgid "St. Gallen" +msgstr "San Galo" + +#: contrib/localflavor/ch/ch_states.py:24 +msgid "Thurgau" +msgstr "Turgovia" + +#: contrib/localflavor/ch/ch_states.py:25 +msgid "Ticino" +msgstr "Tesino" + +#: contrib/localflavor/ch/ch_states.py:26 +msgid "Uri" +msgstr "Uri" + +#: contrib/localflavor/ch/ch_states.py:27 +msgid "Valais" +msgstr "Valais" + +#: contrib/localflavor/ch/ch_states.py:28 +msgid "Vaud" +msgstr "Vaud" + +#: contrib/localflavor/ch/ch_states.py:29 +msgid "Zug" +msgstr "Zug" + +#: contrib/localflavor/ch/ch_states.py:30 +msgid "Zurich" +msgstr "Zurich" + +#: contrib/localflavor/ch/forms.py:18 contrib/localflavor/no/forms.py:15 +msgid "Enter a zip code in the format XXXX." +msgstr "Insira un código posttal no formato XXXX." + +#: contrib/localflavor/ch/forms.py:90 msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." -msgstr "Semella que o seu navegador non acepta 'cookies'. Requírense " -"'cookies' para iniciar sesión." +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "Insira un número válido de tarxeta de identidade ou pasaporte no " +"formato X1234567<0 ou 1234567890." -#: contrib/contenttypes/models.py:25 -msgid "python model class name" -msgstr "nome do módulo Python" +#: contrib/localflavor/cl/forms.py:21 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "Insira un RUT chileno válido. O formato é XX.XXX.XXX-X." -#: contrib/contenttypes/models.py:28 -msgid "content type" -msgstr "tipo de contido" +#: contrib/localflavor/cl/forms.py:26 +msgid "Enter valid a Chilean RUT" +msgstr "Insira un RUT chileno válido." -#: contrib/contenttypes/models.py:29 -msgid "content types" -msgstr "tipos de contido" +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "Baden-Württemberg" -#: contrib/sessions/models.py:35 +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "Baviera" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "Berlín" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "Brandemburgo" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "Bremen" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "Hamburgo" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "Hesse" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "Mecklemburgo-Pomerania Occidental" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "Baixa Saxonia" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "Renania do Norte-Westfalia" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "Renania-Palatinado" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "Sarre" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "Saxonia" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "Saxonia-Anhalt" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "Schleswig-Holstein" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "Turinxia" + +#: contrib/localflavor/de/forms.py:16 contrib/localflavor/fi/forms.py:14 +#: contrib/localflavor/fr/forms.py:17 +msgid "Enter a zip code in the format XXXXX." +msgstr "Insira un código postal no formato XXXXX" + +#: contrib/localflavor/de/forms.py:60 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "Insira un número válido de tarxeta de identidade alemá no formato " +"XXXXXXXXXXX-XXXXXXX-XXXXXXX-X." + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 +msgid "Enter a valid Finnish social security number." +msgstr "Insira un número válido de tarxeta da seguridade social finlandesa." + +#: contrib/localflavor/is_/forms.py:16 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "" +"Insira un número de identificación islandés válido. O formato é XXXXXX-XXXX." + +#: contrib/localflavor/is_/forms.py:30 +msgid "The Icelandic identification number is not valid." +msgstr "O número de identificación islandés non é válido." + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "Insira un código postal válido." + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "Insira un número da seguridade social válido." + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "Insira un número de IVE válido." + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "Insira un código postal no formato XXXXXXX ou XXX-XXXX." + +#: contrib/localflavor/jp/jp_prefectures.py:4 +msgid "Hokkaido" +msgstr "Hokkaidō" + +#: contrib/localflavor/jp/jp_prefectures.py:5 +msgid "Aomori" +msgstr "Aomori" + +#: contrib/localflavor/jp/jp_prefectures.py:6 +msgid "Iwate" +msgstr "Iwate" + +#: contrib/localflavor/jp/jp_prefectures.py:7 +msgid "Miyagi" +msgstr "Miyagi" + +#: contrib/localflavor/jp/jp_prefectures.py:8 +msgid "Akita" +msgstr "Akita" + +#: contrib/localflavor/jp/jp_prefectures.py:9 +msgid "Yamagata" +msgstr "Yamagata" + +#: contrib/localflavor/jp/jp_prefectures.py:10 +msgid "Fukushima" +msgstr "Fukushima" + +#: contrib/localflavor/jp/jp_prefectures.py:11 +msgid "Ibaraki" +msgstr "Ibaraki" + +#: contrib/localflavor/jp/jp_prefectures.py:12 +msgid "Tochigi" +msgstr "Tochigi" + +#: contrib/localflavor/jp/jp_prefectures.py:13 +msgid "Gunma" +msgstr "Gunma" + +#: contrib/localflavor/jp/jp_prefectures.py:14 +msgid "Saitama" +msgstr "Saitama" + +#: contrib/localflavor/jp/jp_prefectures.py:15 +msgid "Chiba" +msgstr "Chiba" + +#: contrib/localflavor/jp/jp_prefectures.py:16 +msgid "Tokyo" +msgstr "Toquio" + +#: contrib/localflavor/jp/jp_prefectures.py:17 +msgid "Kanagawa" +msgstr "Kanagawa" + +#: contrib/localflavor/jp/jp_prefectures.py:18 +msgid "Yamanashi" +msgstr "Yamanashi" + +#: contrib/localflavor/jp/jp_prefectures.py:19 +msgid "Nagano" +msgstr "Nagano" + +#: contrib/localflavor/jp/jp_prefectures.py:20 +msgid "Niigata" +msgstr "Niigata" + +#: contrib/localflavor/jp/jp_prefectures.py:21 +msgid "Toyama" +msgstr "Toyama" + +#: contrib/localflavor/jp/jp_prefectures.py:22 +msgid "Ishikawa" +msgstr "Ishikawa" + +#: contrib/localflavor/jp/jp_prefectures.py:23 +msgid "Fukui" +msgstr "Fukui" + +#: contrib/localflavor/jp/jp_prefectures.py:24 +msgid "Gifu" +msgstr "Gifu" + +#: contrib/localflavor/jp/jp_prefectures.py:25 +msgid "Shizuoka" +msgstr "Shizuoka" + +#: contrib/localflavor/jp/jp_prefectures.py:26 +msgid "Aichi" +msgstr "Aichi" + +#: contrib/localflavor/jp/jp_prefectures.py:27 +msgid "Mie" +msgstr "Mie" + +#: contrib/localflavor/jp/jp_prefectures.py:28 +msgid "Shiga" +msgstr "Shiga" + +#: contrib/localflavor/jp/jp_prefectures.py:29 +msgid "Kyoto" +msgstr "Kioto" + +#: contrib/localflavor/jp/jp_prefectures.py:30 +msgid "Osaka" +msgstr "Osaka" + +#: contrib/localflavor/jp/jp_prefectures.py:31 +msgid "Hyogo" +msgstr "Hyōgo" + +#: contrib/localflavor/jp/jp_prefectures.py:32 +msgid "Nara" +msgstr "Nara" + +#: contrib/localflavor/jp/jp_prefectures.py:33 +msgid "Wakayama" +msgstr "Wakayama" + +#: contrib/localflavor/jp/jp_prefectures.py:34 +msgid "Tottori" +msgstr "Tottori" + +#: contrib/localflavor/jp/jp_prefectures.py:35 +msgid "Shimane" +msgstr "Shimane" + +#: contrib/localflavor/jp/jp_prefectures.py:36 +msgid "Okayama" +msgstr "Okayama" + +#: contrib/localflavor/jp/jp_prefectures.py:37 +msgid "Hiroshima" +msgstr "Hiroshima" + +#: contrib/localflavor/jp/jp_prefectures.py:38 +msgid "Yamaguchi" +msgstr "Yamaguchi" + +#: contrib/localflavor/jp/jp_prefectures.py:39 +msgid "Tokushima" +msgstr "Tokushima" + +#: contrib/localflavor/jp/jp_prefectures.py:40 +msgid "Kagawa" +msgstr "Kagawa" + +#: contrib/localflavor/jp/jp_prefectures.py:41 +msgid "Ehime" +msgstr "Ehime" + +#: contrib/localflavor/jp/jp_prefectures.py:42 +msgid "Kochi" +msgstr "Kōchi" + +#: contrib/localflavor/jp/jp_prefectures.py:43 +msgid "Fukuoka" +msgstr "Fukuoka" + +#: contrib/localflavor/jp/jp_prefectures.py:44 +msgid "Saga" +msgstr "Saga" + +#: contrib/localflavor/jp/jp_prefectures.py:45 +msgid "Nagasaki" +msgstr "Nagasaki" + +#: contrib/localflavor/jp/jp_prefectures.py:46 +msgid "Kumamoto" +msgstr "Kumamoto" + +#: contrib/localflavor/jp/jp_prefectures.py:47 +msgid "Oita" +msgstr "Ōita" + +#: contrib/localflavor/jp/jp_prefectures.py:48 +msgid "Miyazaki" +msgstr "Miyazaki" + +#: contrib/localflavor/jp/jp_prefectures.py:49 +msgid "Kagoshima" +msgstr "Kagoshima" + +#: contrib/localflavor/jp/jp_prefectures.py:50 +msgid "Okinawa" +msgstr "Okinawa" + +#: contrib/localflavor/no/forms.py:36 +msgid "Enter a valid Norwegian social security number." +msgstr "Insira un número válida da seguridade social norueguesa." + +#: contrib/localflavor/uk/forms.py:18 +msgid "Enter a postcode. A space is required between the two postcode parts." +msgstr "Insira un código postal. Requírese un espazo entre as dúas partes do código postal." + +#: contrib/localflavor/us/forms.py:18 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "Insira un código postal no formato XXXXX ou XXXXX-XXXX." + +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "Insira un número válido da seguridade social dos Estados Unidos no formato XXX-XX-XXXX." + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "orixe da redirección" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"Debe ser unha ruta absoluta, sen o nome de dominio. Exemplo: '/events/" +"search/'" + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "destino da redirección" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"Pode ser unha ruta absoluta (coma a de enriba) ou un URL completo que empece " +"por 'http://'" + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "redirección" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "redireccións" + +#: contrib/sessions/models.py:68 msgid "session key" msgstr "clave da sesión" -#: contrib/sessions/models.py:36 +#: contrib/sessions/models.py:69 msgid "session data" msgstr "datos da sesión" -#: contrib/sessions/models.py:37 +#: contrib/sessions/models.py:70 msgid "expire date" msgstr "data de caducidade" -#: contrib/sessions/models.py:41 +#: contrib/sessions/models.py:74 msgid "session" msgstr "sesión" -#: contrib/sessions/models.py:42 +#: contrib/sessions/models.py:75 msgid "sessions" msgstr "sesións" @@ -1300,17 +2226,544 @@ msgstr "sitio" msgid "sites" msgstr "sitios" -#: utils/translation.py:360 -msgid "DATE_FORMAT" -msgstr "d-m-Y" +#: core/validators.py:65 +msgid "This value must contain only letters, numbers and underscores." +msgstr "Este valor soamente pode conter letras, números e guións baixos (_)." -#: utils/translation.py:361 -msgid "DATETIME_FORMAT" -msgstr "d-m-Y H:i" +#: core/validators.py:69 +msgid "" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "" +"Este valor soamente pode conter letras, números, guións baixos (_), guións " +"(-) e barras inclinadas (/)." -#: utils/translation.py:362 -msgid "TIME_FORMAT" -msgstr "H:i" +#: core/validators.py:73 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "" +"Este valor soamente pode conter letras, números, guións baixos (_) e guións." + +#: core/validators.py:77 +msgid "Uppercase letters are not allowed here." +msgstr "Non se permiten letras maiúsculas." + +#: core/validators.py:81 +msgid "Lowercase letters are not allowed here." +msgstr "Non se permiten letras minúsculas." + +#: core/validators.py:88 +msgid "Enter only digits separated by commas." +msgstr "Insira só díxitos separados por comas." + +#: core/validators.py:100 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Insira enderezos de correo elecrónico válidos separados por comas." + +#: core/validators.py:104 +msgid "Please enter a valid IP address." +msgstr "Insira un enderezo IP válido." + +#: core/validators.py:108 +msgid "Empty values are not allowed here." +msgstr "Non se permiten valores en branco." + +#: core/validators.py:112 +msgid "Non-numeric characters aren't allowed here." +msgstr "Non se permiten caracteres non númericos." + +#: core/validators.py:116 +msgid "This value can't be comprised solely of digits." +msgstr "Este valor non pode estar composto por díxitos soamente." + +#: core/validators.py:121 newforms/fields.py:135 +msgid "Enter a whole number." +msgstr "Insira un número enteiro." + +#: core/validators.py:125 +msgid "Only alphabetical characters are allowed here." +msgstr "Soamente se permiten caracteres do alfabeto." + +#: core/validators.py:140 +msgid "Year must be 1900 or later." +msgstr "O ano debe ser 1900 ou posterior." + +#: core/validators.py:144 +#, python-format +msgid "Invalid date: %s" +msgstr "Data non válida: %s" + +#: core/validators.py:149 db/models/fields/__init__.py:463 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Insira unha data válida en formato AAAA-MM-DD." + +#: core/validators.py:154 +msgid "Enter a valid time in HH:MM format." +msgstr "Insira unha hora válida en formato HH:MM." + +#: core/validators.py:158 db/models/fields/__init__.py:532 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "Insira unha data/hora válida en formato AAAA-MM-DD HH:MM." + +#: core/validators.py:163 newforms/fields.py:339 +msgid "Enter a valid e-mail address." +msgstr "Insira un enderezo de correo electrónico válido." + +#: core/validators.py:175 core/validators.py:453 oldforms/__init__.py:672 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Non se enviou ficheiro ningún. Comprobe o tipo de codificación do formulario." + +#: core/validators.py:179 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Suba unha imaxe válida. O ficheiro subido non era unha imaxe ou esta estaba " +"corrupta." + +#: core/validators.py:186 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "O URL %s non apunta a unha imaxe válida." + +#: core/validators.py:190 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" +"Os números de teléfono deben estar no formato XXX-XXX-XXXX. \"%s\" non é " +"válido." + +#: core/validators.py:198 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "O URL %s non apunta a unha vídeo QuickTime válido." + +#: core/validators.py:202 +msgid "A valid URL is required." +msgstr "Precísase un URL válido." + +#: core/validators.py:216 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Precísase HTML válido. Os erros específicos son estes:\n" +"%s" + +#: core/validators.py:223 +#, python-format +msgid "Badly formed XML: %s" +msgstr "XML mal formado: %s" + +#: core/validators.py:240 +#, python-format +msgid "Invalid URL: %s" +msgstr "URL non válido: %s" + +#: core/validators.py:245 core/validators.py:247 +#, python-format +msgid "The URL %s is a broken link." +msgstr "O URL %s é unha ligazón rota." + +#: core/validators.py:253 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Insira unha abreviatura estatal válida para os Estados Unidos." + +#: core/validators.py:267 +#, python-format +msgid "Watch your mouth! The word %s is not allowed here." +msgid_plural "Watch your mouth! The words %s are not allowed here." +msgstr[0] "Sen palabrotas, por favor! Aquí non se pode usar a palabra %s." +msgstr[1] "Sen palabrotas, por favor! Aquí non se poden usar as palabras %s." + +#: core/validators.py:274 +#, python-format +msgid "This field must match the '%s' field." +msgstr "Este campo ten que coincidir co campo '%s'." + +#: core/validators.py:293 +msgid "Please enter something for at least one field." +msgstr "Por favor, encha polo menos un campo." + +#: core/validators.py:302 core/validators.py:313 +msgid "Please enter both fields or leave them both empty." +msgstr "Por favor, encha os dous campos ou deixe ambos en branco." + +#: core/validators.py:321 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "Débese encher este campo se %(field)s é %(value)s" + +#: core/validators.py:334 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "Este campo débese encher se %(field)s non é %(value)s" + +#: core/validators.py:353 +msgid "Duplicate values are not allowed." +msgstr "Non se permiten valores duplicados." + +#: core/validators.py:368 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "Este valor ten que estar comprendido entre %(lower)s e %(upper)s." + +#: core/validators.py:370 +#, python-format +msgid "This value must be at least %s." +msgstr "Este valor ten que ser polo menos %s." + +#: core/validators.py:372 +#, python-format +msgid "This value must be no more than %s." +msgstr "Este valor non pode ser superior a %s." + +#: core/validators.py:408 +#, python-format +msgid "This value must be a power of %s." +msgstr "Este valor ten que ser unha potencia de %s." + +#: core/validators.py:417 +msgid "Please enter a valid decimal number." +msgstr "Insira un número decimal válido." + +#: core/validators.py:423 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." +msgid_plural "" +"Please enter a valid decimal number with at most %s total digits." +msgstr[0] "Insira un número decimal válido cun máximo de %s díxito en total." +msgstr[1] "Insira un número decimal válido cun máximo de %s díxitos en total." + +#: core/validators.py:426 +#, python-format +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr[0] "Insira un número decimal válido cunha parte enteira de como máximo %s díxito." +msgstr[1] "Insira un número decimal válido cunha parte enteira de como máximo %s díxitos." + +#: core/validators.py:429 +#, python-format +msgid "Please enter a valid decimal number with at most %s decimal place." +msgid_plural "" +"Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "Insira un número decimal válido cun máximo de %s lugar decimal." +msgstr[1] "Insira un número decimal válido cun máximo de %s lugares decimais." + +#: core/validators.py:437 +msgid "Please enter a valid floating point number." +msgstr "Insira un número de coma flotante válido." + +#: core/validators.py:446 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Verifique que o ficheiro subido ten un tamaño mínimo de %s bytes." + +#: core/validators.py:447 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "Verifique que o ficheiro subido ten un tamaño máximo de %s bytes." + +#: core/validators.py:464 +msgid "The format for this field is wrong." +msgstr "O formato deste campo é incorrecto." + +#: core/validators.py:479 +msgid "This field is invalid." +msgstr "Este campo non é válido." + +#: core/validators.py:515 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "Non se puido recibir ningún dato de %s." + +#: core/validators.py:518 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" +"O URL %(url)s devolveu a cabeceira Content-Type non válida '%(contenttype)s'." + +#: core/validators.py:551 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" +"Por favor, peche a etiqueta %(tag)s da liña %(line)s. (A liña comeza con \"%" +"(start)s\")." + +#: core/validators.py:555 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Algún texto a partir da liña %(line)s non é válido nese contexto. (A liña " +"comeza con \"%(start)s\")." + +#: core/validators.py:560 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"%(attr)s\" na liña %(line)s non é un atributo válido. (A liña comeza con " +"\"%(start)s\")." + +#: core/validators.py:565 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"\"<%(tag)s>\" na liña %(line)s non é unha etiqueta válida. (A liña comeza " +"con \"%(start)s\")." + +#: core/validators.py:569 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Falta un o máis dos atributos requiridos para unha etiqueta da liña %(line)" +"s. (A liña comeza con \"%(start)s\")." + +#: core/validators.py:574 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"O atributo \"%(attr)s\" na liña %(line)s contén un valor non válido. (A liña " +"comeza con \"%(start)s\")." + +#: db/models/manipulators.py:307 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" +"Xa existe un obxecto %(object)s con este %(type)s para o campo %(field)s." + +#: db/models/fields/__init__.py:46 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "Xa existe un/ha %(optname)s con este/a %(fieldname)s." + +#: db/models/fields/__init__.py:121 db/models/fields/__init__.py:278 +#: db/models/fields/__init__.py:675 db/models/fields/__init__.py:686 +#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:520 +#: newforms/fields.py:531 newforms/models.py:186 oldforms/__init__.py:357 +msgid "This field is required." +msgstr "Requírese este campo." + +#: db/models/fields/__init__.py:373 +msgid "This value must be an integer." +msgstr "Este valor ten que ser un número enteiro." + +#: db/models/fields/__init__.py:408 +msgid "This value must be either True or False." +msgstr "Este valor ten que verdadeiro ou falso." + +#: db/models/fields/__init__.py:429 +msgid "This field cannot be null." +msgstr "Este campo non pode ser nulo." + +#: db/models/fields/__init__.py:592 +msgid "This value must be a decimal number." +msgstr "Este valor ten que ser un número decimal." + +#: db/models/fields/__init__.py:695 +msgid "Enter a valid filename." +msgstr "Introduza un nome de ficheiro válido." + +#: db/models/fields/__init__.py:818 +msgid "This value must be either None, True or False." +msgstr "Este valor ten que verdadeiro, falso ou nulo." + +#: db/models/fields/related.py:53 +#, python-format +msgid "Please enter a valid %s." +msgstr "Insira un %s válido/a." + +#: db/models/fields/related.py:642 +msgid "Separate multiple IDs with commas." +msgstr "Separe varias IDs con comas." + +#: db/models/fields/related.py:644 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +" Para seleccionar máis dunha entrada, manteña premida a tecla \"Control\", " +"ou \"Comando\" nun Mac." + +#: db/models/fields/related.py:691 +#, python-format +msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid." +msgstr[0] "Insira IDs de %(self)s válidas. O valor %(value)r non é válido." +msgstr[1] "" +"Insira IDs de %(self)s válidas. Os valores %(value)r non son válidos." + +#: newforms/fields.py:110 newforms/fields.py:324 +#, python-format +msgid "Ensure this value has at most %d characters." +msgstr "Asegúrese de que este valor ten como máximo %d caracteres." + +#: newforms/fields.py:112 newforms/fields.py:326 +#, python-format +msgid "Ensure this value has at least %d characters." +msgstr "Asegúrese de que este valor ten polo menos %d caracteres." + +#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192 +#, python-format +msgid "Ensure this value is less than or equal to %s." +msgstr "Asegúrese de que este valor é menor ou igual a %s." + +#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194 +#, python-format +msgid "Ensure this value is greater than or equal to %s." +msgstr "Asegúrese de que este valor é maior ou igual a %s" + +#: newforms/fields.py:158 newforms/fields.py:186 +msgid "Enter a number." +msgstr "Insira un número." + +#: newforms/fields.py:196 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "Asegñurese de que non hai máis de %s díxitos en total." + +#: newforms/fields.py:198 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "Asegúrese de que non hai máis de %s lugares decimais." + +#: newforms/fields.py:200 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "Asegúrese de que no hai máis de %s díxitos antes do punto ou coma decimal." + +#: newforms/fields.py:233 +msgid "Enter a valid date." +msgstr "Insira unha data válida." + +#: newforms/fields.py:260 +msgid "Enter a valid time." +msgstr "Insira unha hora válida." + +#: newforms/fields.py:296 +msgid "Enter a valid date/time." +msgstr "Insira unha data/hora válida." + +#: newforms/fields.py:310 +msgid "Enter a valid value." +msgstr "Insira un valor válido." + +#: newforms/fields.py:357 newforms/fields.py:379 +msgid "Enter a valid URL." +msgstr "Insira un URL válido." + +#: newforms/fields.py:381 +msgid "This URL appears to be a broken link." +msgstr "Semella que este URL é unha ligazón rota." + +#: newforms/fields.py:432 newforms/models.py:173 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Escolla unha opción válida. Esta opción non se atopa entre as opcións dispoñíbeis" + +#: newforms/fields.py:448 newforms/fields.py:524 newforms/models.py:190 +msgid "Enter a list of values." +msgstr "Insira unha lista de valores." + +#: newforms/fields.py:457 newforms/models.py:196 +#, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Escolla unha opción válida. %s non se atopa entre as opcións dispoñíbeis." + +#: oldforms/__init__.py:392 +#, python-format +msgid "Ensure your text is less than %s character." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Asegúrese de que o seu texto contén menos de %s carácter." +msgstr[1] "Asegúrese de que o seu texto contén menos de %s caracteres." + +#: oldforms/__init__.py:397 +msgid "Line breaks are not allowed here." +msgstr "Aquí non se permiten saltos de liña." + +#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Elixa unha opción válida; '%(data)s' non está en %(choices)s." + +#: oldforms/__init__.py:674 +msgid "The submitted file is empty." +msgstr "O ficheiro enviado está baleiro." + +#: oldforms/__init__.py:730 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Insira un número enteiro entre -32.768 e 32.767." + +#: oldforms/__init__.py:740 +msgid "Enter a positive number." +msgstr "Insira un número positivo." + +#: oldforms/__init__.py:750 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Insira un número enteiro entre 0 e 32.767." + +#: template/defaultfilters.py:491 +msgid "yes,no,maybe" +msgstr "si,non,quizais" + +#: template/defaultfilters.py:520 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#: template/defaultfilters.py:522 +#, python-format +msgid "%.1f KB" +msgstr "%.1f KB" + +#: template/defaultfilters.py:524 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: template/defaultfilters.py:525 +#, python-format +msgid "%.1f GB" +msgstr "%.1f GB" + +#: utils/dateformat.py:40 +msgid "p.m." +msgstr "p.m." + +#: utils/dateformat.py:41 +msgid "a.m." +msgstr "a.m." + +#: utils/dateformat.py:46 +msgid "PM" +msgstr "PM" + +#: utils/dateformat.py:47 +msgid "AM" +msgstr "AM" + +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "medianoite" + +#: utils/dateformat.py:97 +msgid "noon" +msgstr "mediodía" #: utils/dates.py:6 msgid "Monday" @@ -1500,474 +2953,61 @@ msgid_plural "minutes" msgstr[0] "minuto" msgstr[1] "minutos" -#: conf/global_settings.py:37 -msgid "Bengali" -msgstr "bengalí" - -#: conf/global_settings.py:38 -msgid "Czech" -msgstr "checo" - -#: conf/global_settings.py:39 -msgid "Welsh" -msgstr "galés" - -#: conf/global_settings.py:40 -msgid "Danish" -msgstr "dinamarqués" - -#: conf/global_settings.py:41 -msgid "German" -msgstr "alemán" - -#: conf/global_settings.py:42 -msgid "Greek" -msgstr "grego" - -#: conf/global_settings.py:43 -msgid "English" -msgstr "inglés" - -#: conf/global_settings.py:44 -msgid "Spanish" -msgstr "español" - -#: conf/global_settings.py:45 -msgid "French" -msgstr "francés" - -#: conf/global_settings.py:46 -msgid "Galician" -msgstr "galego" - -#: conf/global_settings.py:47 -msgid "Hungarian" -msgstr "húngaro" - -#: conf/global_settings.py:48 -msgid "Hebrew" -msgstr "hebreo" - -#: conf/global_settings.py:49 -msgid "Icelandic" -msgstr "islandés" - -#: conf/global_settings.py:50 -msgid "Italian" -msgstr "italiano" - -#: conf/global_settings.py:51 -msgid "Japanese" -msgstr "xaponés" - -#: conf/global_settings.py:52 -msgid "Dutch" -msgstr "holandés" - -#: conf/global_settings.py:53 -msgid "Norwegian" -msgstr "noruegués" - -#: conf/global_settings.py:54 -msgid "Brazilian" -msgstr "brasileiro" - -#: conf/global_settings.py:55 -msgid "Romanian" -msgstr "romanés" - -#: conf/global_settings.py:56 -msgid "Russian" -msgstr "ruso" - -#: conf/global_settings.py:57 -msgid "Slovak" -msgstr "eslovaco" - -#: conf/global_settings.py:58 -msgid "Slovenian" -msgstr "esloveno" - -#: conf/global_settings.py:59 -msgid "Serbian" -msgstr "serbio" - -#: conf/global_settings.py:60 -msgid "Swedish" -msgstr "sueco" - -#: conf/global_settings.py:61 -msgid "Ukrainian" -msgstr "ucraíno" - -#: conf/global_settings.py:62 -msgid "Simplified Chinese" -msgstr "chinés simplificado" - -#: conf/global_settings.py:63 -msgid "Traditional Chinese" -msgstr "chinés tradicional" - -#: core/validators.py:60 -msgid "This value must contain only letters, numbers and underscores." -msgstr "Este valor soamente pode conter letras, números e guións baixos (_)." - -#: core/validators.py:64 -msgid "" -"This value must contain only letters, numbers, underscores, dashes or " -"slashes." -msgstr "" -"Este valor soamente pode conter letras, números, guións baixos (_), guións (-) e barras " -"inclinadas (/)." - -#: core/validators.py:72 -msgid "Uppercase letters are not allowed here." -msgstr "Non se permiten letras maiúsculas." - -#: core/validators.py:76 -msgid "Lowercase letters are not allowed here." -msgstr "Non se permiten letras minúsculas." - -#: core/validators.py:83 -msgid "Enter only digits separated by commas." -msgstr "Insira só díxitos separados por comas." - -#: core/validators.py:95 -msgid "Enter valid e-mail addresses separated by commas." -msgstr "Insira enderezos de correo elecrónico válidos separados por comas." - -#: core/validators.py:99 -msgid "Please enter a valid IP address." -msgstr "Insira un enderezo IP válido." - -#: core/validators.py:103 -msgid "Empty values are not allowed here." -msgstr "Non se permiten valores en branco." - -#: core/validators.py:107 -msgid "Non-numeric characters aren't allowed here." -msgstr "Non se permiten caracteres non númericos." - -#: core/validators.py:111 -msgid "This value can't be comprised solely of digits." -msgstr "Este valor non pode estar composto por díxitos soamente." - -#: core/validators.py:116 -msgid "Enter a whole number." -msgstr "Insira un número enteiro." - -#: core/validators.py:120 -msgid "Only alphabetical characters are allowed here." -msgstr "Soamente se permiten caracteres do alfabeto." - -#: core/validators.py:124 -msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Insira unha data válida en formato AAAA-MM-DD." - -#: core/validators.py:128 -msgid "Enter a valid time in HH:MM format." -msgstr "Insira unha hora válida en formato HH:MM." - -#: core/validators.py:132 db/models/fields/__init__.py:468 -msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "Insira unha data/hora válida en formato AAAA-MM-DD HH:MM." - -#: core/validators.py:136 -msgid "Enter a valid e-mail address." -msgstr "Insira un enderezo de correo electrónico válido." - -#: core/validators.py:148 -msgid "" -"Upload a valid image. The file you uploaded was either not an image or a " -"corrupted image." -msgstr "" -"Suba unha imaxe válida. O ficheiro subido non era unha imaxe ou esta estaba " -"corrupta." - -#: core/validators.py:155 +#: utils/timesince.py:40 #, python-format -msgid "The URL %s does not point to a valid image." -msgstr "O URL %s non apunta a unha imaxe válida." +msgid "%d milliseconds" +msgstr "%d milisegundos" -#: core/validators.py:159 +#: utils/timesince.py:41 #, python-format -msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "" -"Os números de teléfono deben estar no formato XXX-XXX-XXXX. \"%s\" non é " -"válido." +msgid "%(number)d %(type)s" +msgstr "%(number)d %(type)s" -#: core/validators.py:167 +#: utils/timesince.py:47 #, python-format -msgid "The URL %s does not point to a valid QuickTime video." -msgstr "O URL %s non apunta a unha vídeo QuickTime válido." +msgid ", %(number)d %(type)s" +msgstr ", %(number)d %(type)s" -#: core/validators.py:171 -msgid "A valid URL is required." -msgstr "Precísase un URL válido." +#: utils/translation/trans_real.py:358 +msgid "DATE_FORMAT" +msgstr "d-m-Y" -#: core/validators.py:185 +#: utils/translation/trans_real.py:359 +msgid "DATETIME_FORMAT" +msgstr "d-m-Y H:i" + +#: utils/translation/trans_real.py:360 +msgid "TIME_FORMAT" +msgstr "H:i" + +#: utils/translation/trans_real.py:376 +msgid "YEAR_MONTH_FORMAT" +msgstr "m Y" + +#: utils/translation/trans_real.py:377 +msgid "MONTH_DAY_FORMAT" +msgstr "d m" + +#: views/generic/create_update.py:43 #, python-format -msgid "" -"Valid HTML is required. Specific errors are:\n" -"%s" -msgstr "" -"Precísase HTML válido. Os erros específicos son estes:\n" -"%s" +msgid "The %(verbose_name)s was created successfully." +msgstr "Creouse correctamente o/a %(verbose_name)s ." -#: core/validators.py:192 +#: views/generic/create_update.py:117 #, python-format -msgid "Badly formed XML: %s" -msgstr "XML mal formado: %s" +msgid "The %(verbose_name)s was updated successfully." +msgstr "Actualizouse correctamente o/a %(verbose_name)s." -#: core/validators.py:202 +#: views/generic/create_update.py:184 #, python-format -msgid "Invalid URL: %s" -msgstr "URL non válido: %s" +msgid "The %(verbose_name)s was deleted." +msgstr "Eliminouse o/a %(verbose_name)s" -#: core/validators.py:206 core/validators.py:208 -#, python-format -msgid "The URL %s is a broken link." -msgstr "O URL %s é unha ligazón rota." +#~ msgid "Have you forgotten your password?" +#~ msgstr "Esqueceu o contrasinal?" -#: core/validators.py:214 -msgid "Enter a valid U.S. state abbreviation." -msgstr "Insira unha abreviatura estatal válida para un dos Estados Unidos." - -#: core/validators.py:229 -#, python-format -msgid "Watch your mouth! The word %s is not allowed here." -msgid_plural "Watch your mouth! The words %s are not allowed here." -msgstr[0] "Sen palabrotas, por favor! Non se pode usar a palabra %s aquí." -msgstr[1] "Sen palabrotas, por favor! Non se poden usar as palabras %s aquí." - -#: core/validators.py:236 -#, python-format -msgid "This field must match the '%s' field." -msgstr "Este campo ten que coincidir co campo '%s'." - -#: core/validators.py:255 -msgid "Please enter something for at least one field." -msgstr "Por favor, encha polo menos un campo." - -#: core/validators.py:264 core/validators.py:275 -msgid "Please enter both fields or leave them both empty." -msgstr "Por favor, encha os dous campos ou deixe ambos en branco." - -#: core/validators.py:282 -#, python-format -msgid "This field must be given if %(field)s is %(value)s" -msgstr "Débese encher este campo se %(field)s é %(value)s" - -#: core/validators.py:294 -#, python-format -msgid "This field must be given if %(field)s is not %(value)s" -msgstr "Este campo débese encher se %(field)s non é %(value)s" - -#: core/validators.py:313 -msgid "Duplicate values are not allowed." -msgstr "Non se permiten valores duplicados." - -#: core/validators.py:336 -#, python-format -msgid "This value must be a power of %s." -msgstr "Este valor ten que ser unha potencia de %s." - -#: core/validators.py:347 -msgid "Please enter a valid decimal number." -msgstr "Insira un número decimal válido." - -#: core/validators.py:349 -#, python-format -msgid "Please enter a valid decimal number with at most %s total digit." -msgid_plural "" -"Please enter a valid decimal number with at most %s total digits." -msgstr[0] "Insira un número decimal válido cun máximo de %s díxito en total." -msgstr[1] "Insira un número decimal válido cun máximo de %s díxitos en total." - -#: core/validators.py:352 -#, python-format -msgid "Please enter a valid decimal number with at most %s decimal place." -msgid_plural "" -"Please enter a valid decimal number with at most %s decimal places." -msgstr[0] "Insira un número decimal válido cun máximo de %s lugar decimal." -msgstr[1] "Insira un número decimal válido cun máximo de %s lugares decimais." - -#: core/validators.py:362 -#, python-format -msgid "Make sure your uploaded file is at least %s bytes big." -msgstr "Verifique que o ficheiro subido ten un tamaño mínimo de %s bytes." - -#: core/validators.py:363 -#, python-format -msgid "Make sure your uploaded file is at most %s bytes big." -msgstr "Verifique que o ficheiro subido ten un tamaño máximo de %s bytes." - -#: core/validators.py:376 -msgid "The format for this field is wrong." -msgstr "O formato deste campo é incorrecto." - -#: core/validators.py:391 -msgid "This field is invalid." -msgstr "Este campo non é válido." - -#: core/validators.py:426 -#, python-format -msgid "Could not retrieve anything from %s." -msgstr "Non se puido recibir ningún dato de %s." - -#: core/validators.py:429 -#, python-format -msgid "" -"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "" -"O URL %(url)s devolveu a cabeceira Content-Type non válida '%(contenttype)s'." - -#: core/validators.py:462 -#, python-format -msgid "" -"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " -"\"%(start)s\".)" -msgstr "" -"Por favor, peche a etiqueta %(tag)s da liña %(line)s. (A liña comeza con \"%" -"(start)s\")." - -#: core/validators.py:466 -#, python-format -msgid "" -"Some text starting on line %(line)s is not allowed in that context. (Line " -"starts with \"%(start)s\".)" -msgstr "" -"Algún texto a partir da liña %(line)s non é válido nese contexto. (A liña " -"comeza con \"%(start)s\")." - -#: core/validators.py:471 -#, python-format -msgid "" -"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" -"(start)s\".)" -msgstr "" -"\"%(attr)s\" na liña %(line)s non é un atributo válido. (A liña comeza con " -"\"%(start)s\")." - -#: core/validators.py:476 -#, python-format -msgid "" -"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" -"(start)s\".)" -msgstr "" -"\"<%(tag)s>\" na liña %(line)s non é unha etiqueta válida. (A liña comeza " -"con \"%(start)s\")." - -#: core/validators.py:480 -#, python-format -msgid "" -"A tag on line %(line)s is missing one or more required attributes. (Line " -"starts with \"%(start)s\".)" -msgstr "" -"Falta un o máis dos atributos requiridos para unha etiqueta da liña %(line)" -"s. (A liña comeza con \"%(start)s\")." - -#: core/validators.py:485 -#, python-format -msgid "" -"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " -"starts with \"%(start)s\".)" -msgstr "" -"O atributo \"%(attr)s\" na liña %(line)s contén un valor non válido. (A liña " -"comeza con \"%(start)s\")." - -#: db/models/manipulators.py:302 -#, python-format -msgid "%(object)s with this %(type)s already exists for the given %(field)s." -msgstr "Xa existe un obxecto %(object)s con este %(type)s para o campo %(field)s." - -#: db/models/fields/__init__.py:40 -#, python-format -msgid "%(optname)s with this %(fieldname)s already exists." -msgstr "Xa existe un/ha %(optname)s con este/a %(fieldname)s." - -#: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 -#: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 -#: forms/__init__.py:346 -msgid "This field is required." -msgstr "Requírese este campo." - -#: db/models/fields/__init__.py:337 -msgid "This value must be an integer." -msgstr "Este valor ten que ser un número enteiro." - -#: db/models/fields/__init__.py:369 -msgid "This value must be either True or False." -msgstr "Este valor ten que verdadeiro ou falso." - -#: db/models/fields/__init__.py:385 -msgid "This field cannot be null." -msgstr "Este campo non pode ser nulo." - -#: db/models/fields/__init__.py:562 -msgid "Enter a valid filename." -msgstr "Introduza un nome de ficheiro válido." - -#: db/models/fields/related.py:43 -#, python-format -msgid "Please enter a valid %s." -msgstr "Insira un %s válido/a." - -#: db/models/fields/related.py:579 -msgid "Separate multiple IDs with commas." -msgstr "Separe IDs múltiplas con comas." - -#: db/models/fields/related.py:581 -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" -" Para seleccionar máis dunha entrada, manteña premida a tecla \"Control\", " -"ou \"Comando\" nun Mac." - -#: db/models/fields/related.py:625 -#, python-format -msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." -msgid_plural "" -"Please enter valid %(self)s IDs. The values %(value)r are invalid." -msgstr[0] "Insira IDs de %(self)s válidas. O valor %(value)r non é válido." -msgstr[1] "" -"Insira IDs de %(self)s válidas. Os valores %(value)r non son válidos." - -#: forms/__init__.py:380 -#, python-format -msgid "Ensure your text is less than %s character." -msgid_plural "Ensure your text is less than %s characters." -msgstr[0] "Asegúrese de que o seu texto contén menos de %s carácter." -msgstr[1] "Asegúrese de que o seu texto contén menos de %s caracteres." - -#: forms/__init__.py:385 -msgid "Line breaks are not allowed here." -msgstr "Aquí non se permiten saltos de liña." - -#: forms/__init__.py:480 forms/__init__.py:551 forms/__init__.py:589 -#, python-format -msgid "Select a valid choice; '%(data)s' is not in %(choices)s." -msgstr "Elixa unha opción válida; '%(data)s' non está en %(choices)s." - -#: forms/__init__.py:645 -msgid "The submitted file is empty." -msgstr "O ficheiro enviado está baleiro." - -#: forms/__init__.py:699 -msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Insira un número enteiro entre -32.768 e 32.767." - -#: forms/__init__.py:708 -msgid "Enter a positive number." -msgstr "Insira un número positivo." - -#: forms/__init__.py:717 -msgid "Enter a whole number between 0 and 32,767." -msgstr "Insira un número enteiro entre 0 e 32.767." - -#: template/defaultfilters.py:379 -msgid "yes,no,maybe" -msgstr "si,non,quizais" +#~ msgid "Use '[algo]$[salt]$[hexdigest]'" +#~ msgstr "Use '[algo]$[salt]$[hexdigest]'" #~ msgid "Comment" #~ msgstr "Comentario" diff --git a/django/conf/locale/ja/LC_MESSAGES/django.mo b/django/conf/locale/ja/LC_MESSAGES/django.mo index 07d3994755..20eb7dbcd3 100644 Binary files a/django/conf/locale/ja/LC_MESSAGES/django.mo and b/django/conf/locale/ja/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ja/LC_MESSAGES/django.po b/django/conf/locale/ja/LC_MESSAGES/django.po index ab761254ae..56f1bf99da 100644 --- a/django/conf/locale/ja/LC_MESSAGES/django.po +++ b/django/conf/locale/ja/LC_MESSAGES/django.po @@ -1,13 +1,12 @@ # Translation of django.po to japanese. # Copyright (C) 2005,2006,2007 makoto tsuyuki # This file is distributed under the same license as the PACKAGE package. -# makoto tsuyuki , 2005,2006,2007. -# +# msgid "" msgstr "" "Project-Id-Version: Django 1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-03-26 22:51+0900\n" +"POT-Creation-Date: 2007-06-26 11:33+0900\n" "PO-Revision-Date: 2006-05-18 00:28+0900\n" "Last-Translator: makoto tsuyuki \n" "Language-Team: Japanese \n" @@ -24,150 +23,162 @@ msgid "Bengali" msgstr "ベンガル語" #: conf/global_settings.py:41 +msgid "Bulgarian" +msgstr "ブルガリア語" + +#: conf/global_settings.py:42 msgid "Catalan" msgstr "カタロニア語" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Czech" msgstr "チェコ語" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "Welsh" msgstr "ウェールズ語" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Danish" msgstr "デンマーク語" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "German" msgstr "ドイツ語" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Greek" msgstr "ギリシャ語" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "English" msgstr "英語" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Spanish" msgstr "スペイン語" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Argentinean Spanish" msgstr "アルゼンチンスペイン語" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 +msgid "Persian" +msgstr "ペルシア語" + +#: conf/global_settings.py:52 msgid "Finnish" msgstr "フィンランド語" -#: conf/global_settings.py:51 +#: conf/global_settings.py:53 msgid "French" msgstr "フランス語" -#: conf/global_settings.py:52 +#: conf/global_settings.py:54 msgid "Galician" msgstr "ガリシア語" -#: conf/global_settings.py:53 +#: conf/global_settings.py:55 msgid "Hungarian" msgstr "ハンガリー語" -#: conf/global_settings.py:54 +#: conf/global_settings.py:56 msgid "Hebrew" msgstr "ヘブライ語" -#: conf/global_settings.py:55 +#: conf/global_settings.py:57 msgid "Icelandic" msgstr "アイスランド語" -#: conf/global_settings.py:56 +#: conf/global_settings.py:58 msgid "Italian" msgstr "イタリア語" -#: conf/global_settings.py:57 +#: conf/global_settings.py:59 msgid "Japanese" msgstr "日本語" -#: conf/global_settings.py:58 +#: conf/global_settings.py:60 +msgid "Korean" +msgstr "韓国語" + +#: conf/global_settings.py:61 msgid "Kannada" msgstr "カンナダ語" -#: conf/global_settings.py:59 +#: conf/global_settings.py:62 msgid "Latvian" msgstr "ラトビア語" -#: conf/global_settings.py:60 +#: conf/global_settings.py:63 msgid "Macedonian" msgstr "マケドニア語" -#: conf/global_settings.py:61 +#: conf/global_settings.py:64 msgid "Dutch" msgstr "オランダ語" -#: conf/global_settings.py:62 +#: conf/global_settings.py:65 msgid "Norwegian" msgstr "ノルウェー語" -#: conf/global_settings.py:63 +#: conf/global_settings.py:66 msgid "Polish" msgstr "ポーランド語" -#: conf/global_settings.py:64 +#: conf/global_settings.py:67 msgid "Portugese" msgstr "ポルトガル語" -#: conf/global_settings.py:65 +#: conf/global_settings.py:68 msgid "Brazilian" msgstr "ブラジル語" -#: conf/global_settings.py:66 +#: conf/global_settings.py:69 msgid "Romanian" msgstr "ルーマニア語" -#: conf/global_settings.py:67 +#: conf/global_settings.py:70 msgid "Russian" msgstr "ロシア語" -#: conf/global_settings.py:68 +#: conf/global_settings.py:71 msgid "Slovak" msgstr "スロバキア語" -#: conf/global_settings.py:69 +#: conf/global_settings.py:72 msgid "Slovenian" msgstr "スロヴェニア語" -#: conf/global_settings.py:70 +#: conf/global_settings.py:73 msgid "Serbian" msgstr "セルビア語" -#: conf/global_settings.py:71 +#: conf/global_settings.py:74 msgid "Swedish" msgstr "スウェーデン語" -#: conf/global_settings.py:72 +#: conf/global_settings.py:75 msgid "Tamil" msgstr "タミル語" -#: conf/global_settings.py:73 +#: conf/global_settings.py:76 msgid "Telugu" msgstr "テルグ語" -#: conf/global_settings.py:74 +#: conf/global_settings.py:77 msgid "Turkish" msgstr "トルコ語" -#: conf/global_settings.py:75 +#: conf/global_settings.py:78 msgid "Ukrainian" msgstr "ウクライナ語" -#: conf/global_settings.py:76 +#: conf/global_settings.py:79 msgid "Simplified Chinese" msgstr "簡体字中国語" -#: conf/global_settings.py:77 +#: conf/global_settings.py:80 msgid "Traditional Chinese" msgstr "繁体字中国語" @@ -205,17 +216,17 @@ msgstr "今月" msgid "This year" msgstr "今年" -#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 newforms/widgets.py:181 #: oldforms/__init__.py:577 msgid "Yes" msgstr "はい" -#: contrib/admin/filterspecs.py:143 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:143 newforms/widgets.py:181 #: oldforms/__init__.py:577 msgid "No" msgstr "いいえ" -#: contrib/admin/filterspecs.py:150 newforms/widgets.py:170 +#: contrib/admin/filterspecs.py:150 newforms/widgets.py:181 #: oldforms/__init__.py:577 msgid "Unknown" msgstr "不明" @@ -781,17 +792,17 @@ msgstr "現在:" msgid "Change:" msgstr "変更:" -#: contrib/admin/templatetags/admin_list.py:247 +#: contrib/admin/templatetags/admin_list.py:249 msgid "All dates" msgstr "いつでも" -#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 +#: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:262 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." msgstr "%(name)s \"%(obj)s\" を追加しました。" -#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 -#: contrib/admin/views/main.py:347 +#: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:266 +#: contrib/admin/views/main.py:352 msgid "You may edit it again below." msgstr "続けて編集できます。" @@ -895,9 +906,9 @@ msgstr "%s の数" msgid "Fields on %s objects" msgstr "%s のフィールド" -#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310 +#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313 msgid "Integer" msgstr "整数" @@ -905,7 +916,7 @@ msgstr "整数" msgid "Boolean (Either True or False)" msgstr "ブール値 (真: True または偽: False)" -#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312 #, python-format msgid "String (up to %(maxlength)s)" msgstr "文字列 ( %(maxlength)s 字まで )" @@ -923,148 +934,152 @@ msgid "Date (with time)" msgstr "日時" #: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "メールアドレス" - -#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "ファイルの場所" - -#: contrib/admin/views/doc.py:300 msgid "Decimal number" msgstr "10 進数 (小数可)" -#: contrib/admin/views/doc.py:304 contrib/comments/models.py:85 +#: contrib/admin/views/doc.py:298 +msgid "E-mail address" +msgstr "メールアドレス" + +#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300 +#: contrib/admin/views/doc.py:303 +msgid "File path" +msgstr "ファイルの場所" + +#: contrib/admin/views/doc.py:301 +msgid "Floating point number" +msgstr "浮動小数点" + +#: contrib/admin/views/doc.py:305 contrib/comments/models.py:85 msgid "IP address" msgstr "IP アドレス" -#: contrib/admin/views/doc.py:306 +#: contrib/admin/views/doc.py:307 msgid "Boolean (Either True, False or None)" msgstr "ブール値 (真: True 、偽: False または None)" -#: contrib/admin/views/doc.py:307 +#: contrib/admin/views/doc.py:308 msgid "Relation to parent model" msgstr "親モデルへのリレーション" -#: contrib/admin/views/doc.py:308 +#: contrib/admin/views/doc.py:309 msgid "Phone number" msgstr "電話番号" -#: contrib/admin/views/doc.py:313 +#: contrib/admin/views/doc.py:314 msgid "Text" msgstr "テキスト" -#: contrib/admin/views/doc.py:314 +#: contrib/admin/views/doc.py:315 msgid "Time" msgstr "時刻" -#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 +#: contrib/admin/views/doc.py:316 contrib/flatpages/models.py:7 msgid "URL" msgstr "URL" -#: contrib/admin/views/doc.py:316 +#: contrib/admin/views/doc.py:317 msgid "U.S. state (two uppercase letters)" msgstr "アメリカの州 (大文字二文字で)" -#: contrib/admin/views/doc.py:317 +#: contrib/admin/views/doc.py:318 msgid "XML text" msgstr "XMLテキスト" -#: contrib/admin/views/doc.py:343 +#: contrib/admin/views/doc.py:344 #, python-format msgid "%s does not appear to be a urlpattern object" msgstr "%s はurlpatternオブジェクトでは無いようです" -#: contrib/admin/views/main.py:223 +#: contrib/admin/views/main.py:228 msgid "Site administration" msgstr "サイト管理" -#: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 +#: contrib/admin/views/main.py:276 contrib/admin/views/main.py:361 #, python-format msgid "You may add another %s below." msgstr "続けて別の %s を追加できます。" -#: contrib/admin/views/main.py:289 +#: contrib/admin/views/main.py:294 #, python-format msgid "Add %s" msgstr "%s を追加" -#: contrib/admin/views/main.py:335 +#: contrib/admin/views/main.py:340 #, python-format msgid "Added %s." msgstr "%s を追加しました。" -#: contrib/admin/views/main.py:335 contrib/admin/views/main.py:337 -#: contrib/admin/views/main.py:339 db/models/manipulators.py:308 +#: contrib/admin/views/main.py:340 contrib/admin/views/main.py:342 +#: contrib/admin/views/main.py:344 db/models/manipulators.py:308 msgid "and" msgstr "と" -#: contrib/admin/views/main.py:337 +#: contrib/admin/views/main.py:342 #, python-format msgid "Changed %s." msgstr "%s を変更しました。" -#: contrib/admin/views/main.py:339 +#: contrib/admin/views/main.py:344 #, python-format msgid "Deleted %s." msgstr "%s を削除しました。" -#: contrib/admin/views/main.py:342 +#: contrib/admin/views/main.py:347 msgid "No fields changed." msgstr "変更はありませんでした。" -#: contrib/admin/views/main.py:345 +#: contrib/admin/views/main.py:350 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." msgstr "%(name)s \"%(obj)s\" を変更しました。" -#: contrib/admin/views/main.py:353 +#: contrib/admin/views/main.py:358 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "%(name)s \"%(obj)s\" を追加しました。続けて編集できます。" -#: contrib/admin/views/main.py:391 +#: contrib/admin/views/main.py:396 #, python-format msgid "Change %s" msgstr "%s を変更" -#: contrib/admin/views/main.py:476 +#: contrib/admin/views/main.py:481 #, python-format msgid "One or more %(fieldname)s in %(name)s: %(obj)s" msgstr "%(name)s に %(fieldname)s が一つ以上あります: %(obj)s" -#: contrib/admin/views/main.py:481 +#: contrib/admin/views/main.py:486 #, python-format msgid "One or more %(fieldname)s in %(name)s:" msgstr "%(name)s に %(fieldname)s が一つ以上あります:" -#: contrib/admin/views/main.py:514 +#: contrib/admin/views/main.py:518 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." msgstr "%(name)s \"%(obj)s\" を削除しました。" -#: contrib/admin/views/main.py:517 +#: contrib/admin/views/main.py:521 msgid "Are you sure?" msgstr "よろしいですか?" -#: contrib/admin/views/main.py:539 +#: contrib/admin/views/main.py:543 #, python-format msgid "Change history: %s" msgstr "変更履歴: %s" -#: contrib/admin/views/main.py:573 +#: contrib/admin/views/main.py:577 #, python-format msgid "Select %s" msgstr "%s を選択" -#: contrib/admin/views/main.py:573 +#: contrib/admin/views/main.py:577 #, python-format msgid "Select %s to change" msgstr "変更する %s を選択" -#: contrib/admin/views/main.py:768 +#: contrib/admin/views/main.py:772 msgid "Database error" msgstr "データベースエラー" @@ -1088,7 +1103,7 @@ msgstr "" msgid "This account is inactive." msgstr "アカウントが無効です。" -#: contrib/auth/forms.py:85 +#: contrib/auth/forms.py:84 msgid "" "That e-mail address doesn't have an associated user account. Are you sure " "you've registered?" @@ -1102,35 +1117,35 @@ msgstr "新しいパスワード(確認用)が一致しません。" msgid "Your old password was entered incorrectly. Please enter it again." msgstr "元のパスワードが間違っています。もう一度入力してください。" -#: contrib/auth/models.py:38 contrib/auth/models.py:57 +#: contrib/auth/models.py:49 contrib/auth/models.py:69 msgid "name" msgstr "名前" -#: contrib/auth/models.py:40 +#: contrib/auth/models.py:51 msgid "codename" msgstr "コード名" -#: contrib/auth/models.py:42 +#: contrib/auth/models.py:54 msgid "permission" msgstr "パーミッション" -#: contrib/auth/models.py:43 contrib/auth/models.py:58 +#: contrib/auth/models.py:55 contrib/auth/models.py:70 msgid "permissions" msgstr "パーミッション" -#: contrib/auth/models.py:60 +#: contrib/auth/models.py:73 msgid "group" msgstr "グループ" -#: contrib/auth/models.py:61 contrib/auth/models.py:100 +#: contrib/auth/models.py:74 contrib/auth/models.py:114 msgid "groups" msgstr "グループ" -#: contrib/auth/models.py:90 +#: contrib/auth/models.py:104 msgid "username" msgstr "ユーザ名" -#: contrib/auth/models.py:90 +#: contrib/auth/models.py:104 msgid "" "Required. 30 characters or fewer. Alphanumeric characters only (letters, " "digits and underscores)." @@ -1138,23 +1153,23 @@ msgstr "" "この項目は必須です。半角アルファベット、半角数字、半角アンダーバーで30文字以" "下にしてください。" -#: contrib/auth/models.py:91 +#: contrib/auth/models.py:105 msgid "first name" msgstr "名" -#: contrib/auth/models.py:92 +#: contrib/auth/models.py:106 msgid "last name" msgstr "姓" -#: contrib/auth/models.py:93 +#: contrib/auth/models.py:107 msgid "e-mail address" msgstr "メールアドレス" -#: contrib/auth/models.py:94 +#: contrib/auth/models.py:108 msgid "password" msgstr "パスワード" -#: contrib/auth/models.py:94 +#: contrib/auth/models.py:108 msgid "" "Use '[algo]$[salt]$[hexdigest]' or use the change " "password form." @@ -1162,43 +1177,43 @@ msgstr "" "'[algo]$[salt]$[hexdigest]'形式か、パスワード変更フォー" "ムを使ってください。" -#: contrib/auth/models.py:95 +#: contrib/auth/models.py:109 msgid "staff status" msgstr "スタッフ権限" -#: contrib/auth/models.py:95 +#: contrib/auth/models.py:109 msgid "Designates whether the user can log into this admin site." msgstr "ユーザが管理サイトにログイン可能かどうかを示します。" -#: contrib/auth/models.py:96 +#: contrib/auth/models.py:110 msgid "active" msgstr "有効" -#: contrib/auth/models.py:96 +#: contrib/auth/models.py:110 msgid "" "Designates whether this user can log into the Django admin. Unselect this " "instead of deleting accounts." msgstr "ユーザが管理サイトにログイン可能かどうかを示します。" -#: contrib/auth/models.py:97 +#: contrib/auth/models.py:111 msgid "superuser status" msgstr "スーパーユーザ権限" -#: contrib/auth/models.py:97 +#: contrib/auth/models.py:111 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." msgstr "全ての権限を持っているとみなされます。" -#: contrib/auth/models.py:98 +#: contrib/auth/models.py:112 msgid "last login" msgstr "最終ログイン" -#: contrib/auth/models.py:99 +#: contrib/auth/models.py:113 msgid "date joined" msgstr "登録日" -#: contrib/auth/models.py:101 +#: contrib/auth/models.py:115 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." @@ -1206,39 +1221,43 @@ msgstr "" "手動で付与したパーミッションに加え、所属しているグループに付与された全ての" "パーミッションを獲得します。" -#: contrib/auth/models.py:102 +#: contrib/auth/models.py:116 msgid "user permissions" msgstr "ユーザパーミッション" -#: contrib/auth/models.py:105 +#: contrib/auth/models.py:120 msgid "user" msgstr "ユーザ" -#: contrib/auth/models.py:106 +#: contrib/auth/models.py:121 msgid "users" msgstr "ユーザ" -#: contrib/auth/models.py:111 +#: contrib/auth/models.py:127 msgid "Personal info" msgstr "個人情報" -#: contrib/auth/models.py:112 +#: contrib/auth/models.py:128 msgid "Permissions" msgstr "パーミッション" -#: contrib/auth/models.py:113 +#: contrib/auth/models.py:129 msgid "Important dates" msgstr "重要な日程" -#: contrib/auth/models.py:114 +#: contrib/auth/models.py:130 msgid "Groups" msgstr "グループ" -#: contrib/auth/models.py:258 +#: contrib/auth/models.py:272 msgid "message" msgstr "メッセージ" -#: contrib/auth/views.py:39 +#: contrib/auth/models.py:285 +msgid "AnonymousUser" +msgstr "非認証ユーザ" + +#: contrib/auth/views.py:40 msgid "Logged out" msgstr "ログアウト" @@ -1660,11 +1679,260 @@ msgstr "8" msgid "nine" msgstr "9" +#: contrib/localflavor/au/forms.py:18 +msgid "Enter a 4 digit post code." +msgstr "4桁でポストコードを入力してください。" + +#: contrib/localflavor/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "XXXXX-XXXの形式でZipコードを入力してください。" + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "電話番号は XX-XXXX-XXXX 形式で入力してください。" + +#: contrib/localflavor/br/forms.py:72 +msgid "This field requires only numbers." +msgstr "このフィールドは必須です(数値のみ)。" + +#: contrib/localflavor/br/forms.py:74 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "11桁の数字か14文字で入力してください。" + +#: contrib/localflavor/br/forms.py:84 +msgid "Invalid CPF number." +msgstr "ブラジル納税者番号が無効です。" + +#: contrib/localflavor/br/forms.py:106 +msgid "This field requires at least 14 digits" +msgstr "14桁以上で入力して下さい。" + +#: contrib/localflavor/br/forms.py:116 +msgid "Invalid CNPJ number." +msgstr "納税登録番号が正しくありません。" + +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "Aargau" + +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "Appenzell Innerrhoden" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "Appenzell Ausserrhoden" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "Basel-Stadt" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "Basel-Land" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "Berne" + +#: contrib/localflavor/ch/ch_states.py:11 +msgid "Fribourg" +msgstr "Fribourg" + +#: contrib/localflavor/ch/ch_states.py:12 +msgid "Geneva" +msgstr "Geneva" + +#: contrib/localflavor/ch/ch_states.py:13 +msgid "Glarus" +msgstr "Glarus" + +#: contrib/localflavor/ch/ch_states.py:14 +msgid "Graubuenden" +msgstr "Graubuenden" + +#: contrib/localflavor/ch/ch_states.py:15 +msgid "Jura" +msgstr "Jura" + +#: contrib/localflavor/ch/ch_states.py:16 +msgid "Lucerne" +msgstr "Lucerne" + +#: contrib/localflavor/ch/ch_states.py:17 +msgid "Neuchatel" +msgstr "Neuchatel" + +#: contrib/localflavor/ch/ch_states.py:18 +msgid "Nidwalden" +msgstr "Nidwalden" + +#: contrib/localflavor/ch/ch_states.py:19 +msgid "Obwalden" +msgstr "Obwalden" + +#: contrib/localflavor/ch/ch_states.py:20 +msgid "Schaffhausen" +msgstr "Schaffhausen" + +#: contrib/localflavor/ch/ch_states.py:21 +msgid "Schwyz" +msgstr "Schwyz" + +#: contrib/localflavor/ch/ch_states.py:22 +msgid "Solothurn" +msgstr "Solothurn" + +#: contrib/localflavor/ch/ch_states.py:23 +msgid "St. Gallen" +msgstr "St. Gallen" + +#: contrib/localflavor/ch/ch_states.py:24 +msgid "Thurgau" +msgstr "Thurgau" + +#: contrib/localflavor/ch/ch_states.py:25 +msgid "Ticino" +msgstr "Ticino" + +#: contrib/localflavor/ch/ch_states.py:26 +msgid "Uri" +msgstr "Uri" + +#: contrib/localflavor/ch/ch_states.py:27 +msgid "Valais" +msgstr "Valais" + +#: contrib/localflavor/ch/ch_states.py:28 +msgid "Vaud" +msgstr "Vaud" + +#: contrib/localflavor/ch/ch_states.py:29 +msgid "Zug" +msgstr "Zug" + +#: contrib/localflavor/ch/ch_states.py:30 +msgid "Zurich" +msgstr "Zurich" + +#: contrib/localflavor/ch/forms.py:18 contrib/localflavor/no/forms.py:15 +msgid "Enter a zip code in the format XXXX." +msgstr "XXXXの形式でZipコードを入力してください。" + +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "スイス アイデンティティかパスポート番号を X1234567<0 か 1234567890 の形式で入力して下さい。" + +#: contrib/localflavor/cl/forms.py:21 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "XX.XXX.XXX-Xの形式でチリ納税者番号を入力してください。" + +#: contrib/localflavor/cl/forms.py:26 +msgid "Enter valid a Chilean RUT" +msgstr "正しいチリ納税者番号を入力してください。" + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "Baden-Wuerttemberg" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "Bavaria" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "Berlin" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "Brandenburg" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "Bremen" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "Hamburg" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "Hessen" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "Mecklenburg-Western Pomerania" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "Lower Saxony" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "North Rhine-Westphalia" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "Rhineland-Palatinate" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "Saarland" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "Saxony" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "Saxony-Anhalt" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "Schleswig-Holstein" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "Thuringia" + +#: contrib/localflavor/de/forms.py:16 contrib/localflavor/fi/forms.py:14 #: contrib/localflavor/fr/forms.py:17 -#, fuzzy msgid "Enter a zip code in the format XXXXX." msgstr "XXXXXの形式でZipコードを入力してください。" +#: contrib/localflavor/de/forms.py:60 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "XXXXXXXXXXX-XXXXXXX-XXXXXXX-X の形式でドイツIDカード番号を入力して下さい。" + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 +msgid "Enter a valid Finnish social security number." +msgstr "フィンランド社会保証番号を正しく入力してください。" + +#: contrib/localflavor/is_/forms.py:16 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "XXXXXか、XXXXX-XXXXの形式でアイスランド納税者番号を入力してください。" + +#: contrib/localflavor/is_/forms.py:30 +msgid "The Icelandic identification number is not valid." +msgstr "アイスランド納税者番号を正しく入力して下さい。" + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "Zipコードを正しく入力してください。" + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "社会保障番号番号を正しく入力してください。" + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "VAT番号を正しく入力してください。" + #: contrib/localflavor/jp/forms.py:21 msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。" @@ -1857,14 +2125,24 @@ msgstr "鹿児島県" msgid "Okinawa" msgstr "沖縄県" +#: contrib/localflavor/no/forms.py:36 +msgid "Enter a valid Norwegian social security number." +msgstr "ノルウェー社会保障番号を正しく入力してください。" + #: contrib/localflavor/uk/forms.py:18 msgid "Enter a postcode. A space is required between the two postcode parts." -msgstr "ポスタルコードを入力してください。コードとコードの間は半角のスペースで区切ってください。" +msgstr "" +"ポスタルコードを入力してください。コードとコードの間は半角のスペースで区切っ" +"てください。" -#: contrib/localflavor/usa/forms.py:17 +#: contrib/localflavor/us/forms.py:18 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." msgstr "XXXXXか、XXXXX-XXXXの形式で郵便番号を入力してください。" +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "XXX-XX-XXXX の形式で、米国社会保障番号を入力して下さい。" + #: contrib/redirects/models.py:7 msgid "redirect from" msgstr "リダイレクト元" @@ -1929,92 +2207,92 @@ msgstr "サイト" msgid "sites" msgstr "サイト" -#: core/validators.py:64 +#: core/validators.py:65 msgid "This value must contain only letters, numbers and underscores." msgstr "半角の英数字およびアンダースコア以外は使用できません。" -#: core/validators.py:68 +#: core/validators.py:69 msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." msgstr "" "半角の英数字、アンダースコア、ダッシュ、スラッシュ以外は使用できません。" -#: core/validators.py:72 +#: core/validators.py:73 msgid "This value must contain only letters, numbers, underscores or hyphens." msgstr "半角の英数字、アンダースコア、ハイフン以外は使用できません。" -#: core/validators.py:76 +#: core/validators.py:77 msgid "Uppercase letters are not allowed here." msgstr "大文字はここでは使用できません。" -#: core/validators.py:80 +#: core/validators.py:81 msgid "Lowercase letters are not allowed here." msgstr "小文字はここでは使用できません。" -#: core/validators.py:87 +#: core/validators.py:88 msgid "Enter only digits separated by commas." msgstr "カンマ区切りの数字だけを入力してください。" -#: core/validators.py:99 +#: core/validators.py:100 msgid "Enter valid e-mail addresses separated by commas." msgstr "カンマ区切りの有効なメールアドレスを入力してください。" -#: core/validators.py:103 +#: core/validators.py:104 msgid "Please enter a valid IP address." msgstr "有効な IP アドレスを入力してください。" -#: core/validators.py:107 +#: core/validators.py:108 msgid "Empty values are not allowed here." msgstr "入力は必須です。" -#: core/validators.py:111 +#: core/validators.py:112 msgid "Non-numeric characters aren't allowed here." msgstr "数値以外は使用できません。" -#: core/validators.py:115 +#: core/validators.py:116 msgid "This value can't be comprised solely of digits." msgstr "数値だけの値にはできません。" -#: core/validators.py:120 newforms/fields.py:126 +#: core/validators.py:121 newforms/fields.py:135 msgid "Enter a whole number." msgstr "整数を入力してください。" -#: core/validators.py:124 +#: core/validators.py:125 msgid "Only alphabetical characters are allowed here." msgstr "半角アルファベット以外使用できません。" -#: core/validators.py:139 +#: core/validators.py:140 msgid "Year must be 1900 or later." msgstr "1900年以降を指定してください。" -#: core/validators.py:143 +#: core/validators.py:144 #, python-format msgid "Invalid date: %s" msgstr "無効な日付: %s" -#: core/validators.py:148 db/models/fields/__init__.py:457 +#: core/validators.py:149 db/models/fields/__init__.py:468 msgid "Enter a valid date in YYYY-MM-DD format." msgstr "YYYY-MM-DD形式で日付を入力してください。" -#: core/validators.py:153 +#: core/validators.py:154 msgid "Enter a valid time in HH:MM format." msgstr "HH:MM形式で時刻を入力してください。" -#: core/validators.py:157 db/models/fields/__init__.py:526 +#: core/validators.py:158 db/models/fields/__init__.py:537 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." msgstr "YYYY-MM-DD HH:MM形式で日時を入力してください。" -#: core/validators.py:162 newforms/fields.py:269 +#: core/validators.py:163 newforms/fields.py:339 msgid "Enter a valid e-mail address." msgstr "有効なメールアドレスを入力してください。" -#: core/validators.py:174 core/validators.py:445 oldforms/__init__.py:672 +#: core/validators.py:175 core/validators.py:453 oldforms/__init__.py:672 msgid "No file was submitted. Check the encoding type on the form." msgstr "" "ファイルが取得できませんでした。formのencoding typeを確認してください。" -#: core/validators.py:178 +#: core/validators.py:179 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." @@ -2022,26 +2300,26 @@ msgstr "" "画像をアップロードしてください。アップロードした画像は画像でないか、または壊" "れています。" -#: core/validators.py:185 +#: core/validators.py:186 #, python-format msgid "The URL %s does not point to a valid image." msgstr "URL ( %s ) は画像ではありません。" -#: core/validators.py:189 +#: core/validators.py:190 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "電話番号は XXX-XXX-XXXX 形式で入力してください。\"%s\" は無効です。" -#: core/validators.py:197 +#: core/validators.py:198 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "URL ( %s ) は QuickTime ビデオではありません。" -#: core/validators.py:201 +#: core/validators.py:202 msgid "A valid URL is required." msgstr "正しい URL を入力してください。" -#: core/validators.py:215 +#: core/validators.py:216 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" @@ -2050,86 +2328,86 @@ msgstr "" "有効な HTML を入力してください。エラー:\n" "%s" -#: core/validators.py:222 +#: core/validators.py:223 #, python-format msgid "Badly formed XML: %s" msgstr "不正な XML です: %s" -#: core/validators.py:239 +#: core/validators.py:240 #, python-format msgid "Invalid URL: %s" msgstr "無効なURL: %s" -#: core/validators.py:244 core/validators.py:246 +#: core/validators.py:245 core/validators.py:247 #, python-format msgid "The URL %s is a broken link." msgstr "URL ( %s ) はリンクが壊れています。" -#: core/validators.py:252 +#: core/validators.py:253 msgid "Enter a valid U.S. state abbreviation." msgstr "正しい米州略称を入力してください。" -#: core/validators.py:266 +#: core/validators.py:267 #, python-format msgid "Watch your mouth! The word %s is not allowed here." msgid_plural "Watch your mouth! The words %s are not allowed here." msgstr[0] "言葉使いに気を付けて! %s という言葉は使えません。" msgstr[1] "言葉使いに気を付けて! %s という言葉は使えません。" -#: core/validators.py:273 +#: core/validators.py:274 #, python-format msgid "This field must match the '%s' field." msgstr "このフィールドは '%s' フィールドと一致せねばなりません。" -#: core/validators.py:292 +#: core/validators.py:293 msgid "Please enter something for at least one field." msgstr "少なくとも一つのフィールドに何か入力してください。" -#: core/validators.py:301 core/validators.py:312 +#: core/validators.py:302 core/validators.py:313 msgid "Please enter both fields or leave them both empty." msgstr "両方のフィールドに入力するか、両方とも未入力にしてください。" -#: core/validators.py:320 +#: core/validators.py:321 #, python-format msgid "This field must be given if %(field)s is %(value)s" msgstr "" "%(field)s を %(value)s にするのなら、このフィールドに必ず入力してください。" -#: core/validators.py:333 +#: core/validators.py:334 #, python-format msgid "This field must be given if %(field)s is not %(value)s" msgstr "" "%(field)s を %(value)s にしないのなら、このフィールドに必ず入力してください。" -#: core/validators.py:352 +#: core/validators.py:353 msgid "Duplicate values are not allowed." msgstr "重複する値は認められません。" -#: core/validators.py:367 +#: core/validators.py:368 #, python-format msgid "This value must be between %(lower)s and %(upper)s." msgstr "この値は %(lower)s から %(upper)s の間でなければなりません。" -#: core/validators.py:369 +#: core/validators.py:370 #, python-format msgid "This value must be at least %s." msgstr "この値は %s 以上でなければなりません。" -#: core/validators.py:371 +#: core/validators.py:372 #, python-format msgid "This value must be no more than %s." msgstr "この値は %s より小さくなければなりません。" -#: core/validators.py:407 +#: core/validators.py:408 #, python-format msgid "This value must be a power of %s." msgstr "この値は %s の累乗でなければなりません。" -#: core/validators.py:418 +#: core/validators.py:417 msgid "Please enter a valid decimal number." msgstr "有効な 10 進数を入力してください。" -#: core/validators.py:422 +#: core/validators.py:423 #, python-format msgid "Please enter a valid decimal number with at most %s total digit." msgid_plural "" @@ -2137,7 +2415,7 @@ msgid_plural "" msgstr[0] "全体で %s 文字以下の数字を入力してください。" msgstr[1] "全体で %s 文字以下の数字を入力してください。" -#: core/validators.py:425 +#: core/validators.py:426 #, python-format msgid "" "Please enter a valid decimal number with a whole part of at most %s digit." @@ -2146,7 +2424,7 @@ msgid_plural "" msgstr[0] "整数部は %s 文字以下の数字を入力してください。" msgstr[1] "整数部は %s 文字以下の数字を入力してください。" -#: core/validators.py:428 +#: core/validators.py:429 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." msgid_plural "" @@ -2154,37 +2432,41 @@ msgid_plural "" msgstr[0] "小数部は %s 文字以下の数字を入力してください。" msgstr[1] "小数部は %s 文字以下の数字を入力してください。" -#: core/validators.py:438 +#: core/validators.py:437 +msgid "Please enter a valid floating point number." +msgstr "有効な 小数 を入力してください。" + +#: core/validators.py:446 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." msgstr "アップロードするファイルの大きさは %s バイト以上にしてください。" -#: core/validators.py:439 +#: core/validators.py:447 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." msgstr "アップロードするファイルの大きさは %s 最大バイトまでです。" -#: core/validators.py:456 +#: core/validators.py:464 msgid "The format for this field is wrong." msgstr "フィールドの形式が正しくありません。" -#: core/validators.py:471 +#: core/validators.py:479 msgid "This field is invalid." msgstr "このフィールドは無効です。" -#: core/validators.py:507 +#: core/validators.py:515 #, python-format msgid "Could not retrieve anything from %s." msgstr "%s から何も検索できませんでした。" -#: core/validators.py:510 +#: core/validators.py:518 #, python-format msgid "" "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." msgstr "" "URL %(url)s は無効なコンテンツタイプヘッダ '%(contenttype)s' を返しました。" -#: core/validators.py:543 +#: core/validators.py:551 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " @@ -2193,7 +2475,7 @@ msgstr "" "%(line)s 行目から始まる %(tag)s タグを閉じてください (\"%(start)s\" で始まる" "行です)。" -#: core/validators.py:547 +#: core/validators.py:555 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " @@ -2202,7 +2484,7 @@ msgstr "" "%(line)s 行目から始まるテキストはこのコンテキストでは使えません。 (\"%(start)" "s\" で始まる行です)。" -#: core/validators.py:552 +#: core/validators.py:560 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" @@ -2211,7 +2493,7 @@ msgstr "" "%(line)s 行目の \"%(attr)s\" は無効なアトリビュートです (\"%(start)s\" で始ま" "る行です)。" -#: core/validators.py:557 +#: core/validators.py:565 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" @@ -2220,7 +2502,7 @@ msgstr "" "%(line)s 行目の \"<%(tag)s>\" は無効なタグです( \"%(start)s\" で始まる行で" "す)。" -#: core/validators.py:561 +#: core/validators.py:569 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " @@ -2229,7 +2511,7 @@ msgstr "" "%(line)s 行目のタグは必須アトリビュートが未入力です( \"%(start)s\" で始まる行" "です)。" -#: core/validators.py:566 +#: core/validators.py:574 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " @@ -2244,55 +2526,59 @@ msgid "%(object)s with this %(type)s already exists for the given %(field)s." msgstr "" "%(field)s に入力されたものは、この %(type)s の %(object)s に既に存在します。" -#: db/models/fields/__init__.py:42 +#: db/models/fields/__init__.py:46 #, python-format msgid "%(optname)s with this %(fieldname)s already exists." msgstr "%(fieldname)s に %(optname)s は既に存在します。" -#: db/models/fields/__init__.py:117 db/models/fields/__init__.py:274 -#: db/models/fields/__init__.py:610 db/models/fields/__init__.py:621 -#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450 -#: newforms/fields.py:461 newforms/models.py:177 oldforms/__init__.py:357 +#: db/models/fields/__init__.py:126 db/models/fields/__init__.py:283 +#: db/models/fields/__init__.py:680 db/models/fields/__init__.py:691 +#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:522 +#: newforms/fields.py:533 newforms/models.py:185 oldforms/__init__.py:357 msgid "This field is required." msgstr "このフィールドは必須です。" -#: db/models/fields/__init__.py:367 +#: db/models/fields/__init__.py:378 msgid "This value must be an integer." msgstr "値は整数でなければなりません。" -#: db/models/fields/__init__.py:402 +#: db/models/fields/__init__.py:413 msgid "This value must be either True or False." msgstr "値は真: True または偽: False でなければなりません。" -#: db/models/fields/__init__.py:423 +#: db/models/fields/__init__.py:434 msgid "This field cannot be null." msgstr "このフィールドには NULL を指定できません。" -#: db/models/fields/__init__.py:630 +#: db/models/fields/__init__.py:597 +msgid "This value must be a decimal number." +msgstr "値は整数でなければなりません。" + +#: db/models/fields/__init__.py:700 msgid "Enter a valid filename." msgstr "正しいファイル名を入力してください。" -#: db/models/fields/__init__.py:751 +#: db/models/fields/__init__.py:824 msgid "This value must be either None, True or False." msgstr "値は、空: None、真: True または偽: False でなければなりません。" -#: db/models/fields/related.py:53 +#: db/models/fields/related.py:54 #, python-format msgid "Please enter a valid %s." msgstr "正しい %s を入力してください。" -#: db/models/fields/related.py:642 +#: db/models/fields/related.py:640 msgid "Separate multiple IDs with commas." msgstr "複数の ID はカンマで区切ってください。" -#: db/models/fields/related.py:644 +#: db/models/fields/related.py:642 msgid "" "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "複数選択するときには Control キーを押したまま選択してください。Mac は " "Command キーを使ってください" -#: db/models/fields/related.py:691 +#: db/models/fields/related.py:689 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." msgid_plural "" @@ -2300,59 +2586,78 @@ msgid_plural "" msgstr[0] "正しい %(self)s IDを入力してください。 %(value)r は無効です。" msgstr[1] "正しい %(self)s IDを入力してください。 %(value)r は無効です。" -#: newforms/fields.py:101 newforms/fields.py:254 +#: newforms/fields.py:110 newforms/fields.py:324 #, python-format msgid "Ensure this value has at most %d characters." msgstr "%d 字以下で入力してください。" -#: newforms/fields.py:103 newforms/fields.py:256 +#: newforms/fields.py:112 newforms/fields.py:326 #, python-format msgid "Ensure this value has at least %d characters." msgstr "%d 字以上で入力してください。" -#: newforms/fields.py:128 +#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192 #, python-format msgid "Ensure this value is less than or equal to %s." msgstr "この値は %s 以下でなければなりません。" -#: newforms/fields.py:130 +#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194 #, python-format msgid "Ensure this value is greater than or equal to %s." msgstr "この値は %s 以上でなければなりません。" -#: newforms/fields.py:163 +#: newforms/fields.py:158 newforms/fields.py:186 +msgid "Enter a number." +msgstr "整数を入力してください。" + +#: newforms/fields.py:196 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "整数部と少数部を併せて %s 桁までで入力して下さい。" + +#: newforms/fields.py:198 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "少数部は %s 桁までで入力して下さい。" + +#: newforms/fields.py:200 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "整数部は %s 桁までで入力して下さい。" + +#: newforms/fields.py:233 newforms/fields.py:566 msgid "Enter a valid date." msgstr "日付を正しく入力してください。" -#: newforms/fields.py:190 +#: newforms/fields.py:260 newforms/fields.py:568 msgid "Enter a valid time." msgstr "時間を正しく入力してください。" -#: newforms/fields.py:226 +#: newforms/fields.py:296 msgid "Enter a valid date/time." msgstr "日付/時間を正しく入力してください。" -#: newforms/fields.py:240 +#: newforms/fields.py:310 msgid "Enter a valid value." msgstr "値を正しく入力してください。" -#: newforms/fields.py:287 newforms/fields.py:309 +#: newforms/fields.py:357 newforms/fields.py:379 msgid "Enter a valid URL." msgstr "URLを正しく入力してください。" -#: newforms/fields.py:311 +#: newforms/fields.py:381 msgid "This URL appears to be a broken link." msgstr "このURLはリンクが壊れています。" -#: newforms/fields.py:360 newforms/models.py:164 +#: newforms/fields.py:432 newforms/models.py:172 msgid "Select a valid choice. That choice is not one of the available choices." msgstr "正しく選択してください。選択したものは候補にありません。" -#: newforms/fields.py:378 newforms/fields.py:454 newforms/models.py:181 +#: newforms/fields.py:448 newforms/fields.py:526 newforms/models.py:189 msgid "Enter a list of values." msgstr "リストを入力してください。" -#: newforms/fields.py:387 newforms/models.py:187 +#: newforms/fields.py:457 newforms/models.py:195 #, python-format msgid "Select a valid choice. %s is not one of the available choices." msgstr "正しく選択してください。 %s は候補にありません。" @@ -2393,6 +2698,28 @@ msgstr "0 から 32,767 までの整数を入力してください。" msgid "yes,no,maybe" msgstr "はい,いいえ,たぶん" +#: template/defaultfilters.py:520 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#: template/defaultfilters.py:522 +#, python-format +msgid "%.1f KB" +msgstr "%.1f KB" + +#: template/defaultfilters.py:524 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: template/defaultfilters.py:525 +#, python-format +msgid "%.1f GB" +msgstr "%.1f GB" + #: utils/dateformat.py:40 msgid "p.m." msgstr "p.m." @@ -2605,23 +2932,38 @@ msgid_plural "minutes" msgstr[0] "分" msgstr[1] "分" -#: utils/translation/trans_real.py:362 +#: utils/timesince.py:40 +#, python-format +msgid "%d milliseconds" +msgstr "%d ミリ秒" + +#: utils/timesince.py:41 +#, python-format +msgid "%(number)d %(type)s" +msgstr "%(number)d %(type)s" + +#: utils/timesince.py:47 +#, python-format +msgid ", %(number)d %(type)s" +msgstr ", %(number)d %(type)s" + +#: utils/translation/trans_real.py:358 msgid "DATE_FORMAT" msgstr "Y/m/d" -#: utils/translation/trans_real.py:363 +#: utils/translation/trans_real.py:359 msgid "DATETIME_FORMAT" msgstr "Y/m/d H:i" -#: utils/translation/trans_real.py:364 +#: utils/translation/trans_real.py:360 msgid "TIME_FORMAT" msgstr "H:i" -#: utils/translation/trans_real.py:380 +#: utils/translation/trans_real.py:376 msgid "YEAR_MONTH_FORMAT" msgstr "Y/m/d" -#: utils/translation/trans_real.py:381 +#: utils/translation/trans_real.py:377 msgid "MONTH_DAY_FORMAT" msgstr "m/d" diff --git a/django/conf/locale/pl/LC_MESSAGES/django.mo b/django/conf/locale/pl/LC_MESSAGES/django.mo index 1aa7e08dd4..798f8d72c4 100644 Binary files a/django/conf/locale/pl/LC_MESSAGES/django.mo and b/django/conf/locale/pl/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/pl/LC_MESSAGES/django.po b/django/conf/locale/pl/LC_MESSAGES/django.po index 7e7ccb850f..0fa18ce80c 100644 --- a/django/conf/locale/pl/LC_MESSAGES/django.po +++ b/django/conf/locale/pl/LC_MESSAGES/django.po @@ -28,7 +28,8 @@ msgstr "To pole jest wymagane." msgid "Ensure your text is less than %s character." msgid_plural "Ensure your text is less than %s characters." msgstr[0] "Upewnij się, że tekst ma mniej niż %s znak." -msgstr[1] "Upewnij się, że tekst ma mniej niż %s znaków." +msgstr[1] "Upewnij się, że tekst ma mniej niż %s znaki." +msgstr[2] "Upewnij się, że tekst ma mniej niż %s znaków." #: oldforms/__init__.py:397 msgid "Line breaks are not allowed here." @@ -75,7 +76,7 @@ msgid "Enter a whole number between 0 and 32,767." msgstr "Proszę wpisać liczbę całkowitą z zakresu od 0 do 32 767" #: db/models/manipulators.py:307 -#, fuzzy, python-format +#, python-format msgid "%(object)s with this %(type)s already exists for the given %(field)s." msgstr "%(object)s z %(type)s już istnieje dla %(field)s." @@ -85,7 +86,7 @@ msgid "and" msgstr "i" #: db/models/fields/__init__.py:42 -#, fuzzy, python-format +#, python-format msgid "%(optname)s with this %(fieldname)s already exists." msgstr "Już istnieje %(optname)s z %(fieldname)s." @@ -142,6 +143,9 @@ msgstr[0] "" msgstr[1] "" "Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są " "niepoprawne." +msgstr[2] "" +"Proszę podać poprawne identyfikatory %(self)s. Wartości %(value)r są " +"niepoprawne." #: conf/global_settings.py:39 msgid "Arabic" @@ -370,7 +374,7 @@ msgstr "Niepoprawna data: %s" #: core/validators.py:153 msgid "Enter a valid time in HH:MM format." -msgstr "Proszę wpisać poprawną godzinę w formacie GG:MM." +msgstr "Proszę wpisać poprawną godzinę w formacie HH:MM." #: core/validators.py:162 newforms/fields.py:271 msgid "Enter a valid e-mail address." @@ -439,6 +443,7 @@ msgid "Watch your mouth! The word %s is not allowed here." msgid_plural "Watch your mouth! The words %s are not allowed here." msgstr[0] "Nie wolno przeklinać! Słowo %s nie jest dozwolone." msgstr[1] "Nie wolno przeklinać! Słowa %s nie są dozwolone." +msgstr[2] "Nie wolno przeklinać! Słowa %s nie są dozwolone." #: core/validators.py:273 #, python-format @@ -497,13 +502,15 @@ msgid "Please enter a valid decimal number with at most %s total digit." msgid_plural "Please enter a valid decimal number with at most %s total digits." msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrze." msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrach." +msgstr[2] "Proszę wpisać poprawną liczbę dziesiętną o nie więcej niż %s cyfrach." #: core/validators.py:425 #, python-format msgid "Please enter a valid decimal number with a whole part of at most %s digit." msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits." -msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfry." -msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfr." +msgstr[0] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfrę." +msgstr[1] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfry." +msgstr[2] "Proszę wpisać poprawną liczbę dziesiętną zawierającą nie więcej niż %s cyfr." #: core/validators.py:428 #, python-format @@ -515,6 +522,9 @@ msgstr[0] "" msgstr[1] "" "Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsc po " "przecinku." +msgstr[2] "" +"Proszę wpisać poprawną liczbę dziesiętną z dokładnością do %s miejsc po " +"przecinku." #: core/validators.py:438 #, python-format @@ -668,7 +678,7 @@ msgstr "Wpisz poprawny URL." #: newforms/fields.py:313 msgid "This URL appears to be a broken link." -msgstr "Odnośnik %s jest nieprawidłowy." +msgstr "Ten odnośnik jest nieprawidłowy." #: contrib/humanize/templatetags/humanize.py:17 msgid "th" @@ -691,21 +701,24 @@ msgstr "-ci" msgid "%(value).1f million" msgid_plural "%(value).1f million" msgstr[0] "%(value).1f milion" -msgstr[1] "%(value).1f milionów" +msgstr[1] "%(value).1f miliony" +msgstr[2] "%(value).1f milionów" #: contrib/humanize/templatetags/humanize.py:50 #, python-format msgid "%(value).1f billion" msgid_plural "%(value).1f billion" msgstr[0] "%(value).1f miliard" -msgstr[1] "%(value).1f miliardów" +msgstr[1] "%(value).1f miliardy" +msgstr[2] "%(value).1f miliardów" #: contrib/humanize/templatetags/humanize.py:53 #, python-format msgid "%(value).1f trillion" msgid_plural "%(value).1f trillion" msgstr[0] "%(value).1f bilion" -msgstr[1] "%(value).1f bilionów" +msgstr[1] "%(value).1f biliony" +msgstr[2] "%(value).1f bilionów" #: contrib/humanize/templatetags/humanize.py:68 msgid "one" @@ -987,6 +1000,15 @@ msgstr[0] "" "\n" "%(text)s" msgstr[1] "" +"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" +"(count)s komentarze:\n" +"\n" +"%(text)s" +msgstr[2] "" +"Ten komentarz został wysłany przez użytkownika, który wysłał mniej niż %" +"(count)s komentarzy:\n" +"\n" +"%(text)s" #: contrib/comments/views/comments.py:116 #, python-format @@ -1574,7 +1596,8 @@ msgstr "Szukaj" msgid "1 result" msgid_plural "%(counter)s results" msgstr[0] "1 wynik" -msgstr[1] "%(counter)s wyników" +msgstr[1] "%(counter)s wyniki" +msgstr[2] "%(counter)s wyników" #: contrib/admin/templates/admin/search_form.html:10 #, python-format @@ -1681,6 +1704,7 @@ msgid "Please correct the error below." msgid_plural "Please correct the errors below." msgstr[0] "Proszę popraw poniższy błąd" msgstr[1] "Proszę popraw poniższe błędy" +msgstr[2] "Proszę popraw poniższe błędy" #: contrib/admin/templates/admin/change_form.html:50 msgid "Ordering" @@ -2077,7 +2101,6 @@ msgstr "" msgid "user permissions" msgstr "uprawnienia użytkownika" -# kurwa #: contrib/auth/models.py:115 msgid "user" msgstr "użytkownik" @@ -2831,37 +2854,43 @@ msgstr "Gru." msgid "year" msgid_plural "years" msgstr[0] "rok" -msgstr[1] "lat" +msgstr[1] "lata" +msgstr[2] "lat" #: utils/timesince.py:13 msgid "month" msgid_plural "months" msgstr[0] "miesiąc" -msgstr[1] "miesięcy" +msgstr[1] "miesięce" +msgstr[2] "miesięcy" #: utils/timesince.py:14 msgid "week" msgid_plural "weeks" msgstr[0] "tydzień" -msgstr[1] "tygodni" +msgstr[1] "tygodnie" +msgstr[2] "tygodni" #: utils/timesince.py:15 msgid "day" msgid_plural "days" msgstr[0] "dzień" msgstr[1] "dni" +msgstr[2] "dni" #: utils/timesince.py:16 msgid "hour" msgid_plural "hours" msgstr[0] "godzina" -msgstr[1] "godzin" +msgstr[1] "godziny" +msgstr[2] "godzin" #: utils/timesince.py:17 msgid "minute" msgid_plural "minutes" msgstr[0] "minuta" -msgstr[1] "minut" +msgstr[1] "minuty" +msgstr[2] "minut" #: utils/timesince.py:40 #, python-format @@ -2880,7 +2909,7 @@ msgstr ", %(number)d %(type)s" #: utils/dateformat.py:40 msgid "p.m." -msgstr "popołudniu" +msgstr "po południu" #: utils/dateformat.py:41 msgid "a.m." @@ -2888,7 +2917,7 @@ msgstr "rano" #: utils/dateformat.py:46 msgid "PM" -msgstr "popołudniu" +msgstr "po południu" #: utils/dateformat.py:47 msgid "AM" @@ -2931,13 +2960,13 @@ msgstr "tak,nie,może" msgid "%(size)d byte" msgid_plural "%(size)d bytes" msgstr[0] "%(size)d bajt" -msgstr[1] "%(size)d bajtów" -msgstr[2] "" +msgstr[1] "%(size)d bajty" +msgstr[2] "%(size)d bajtów" #: template/defaultfilters.py:522 #, python-format msgid "%.1f KB" -msgstr "%.1f kB" +msgstr "%.1f KB" #: template/defaultfilters.py:524 #, python-format diff --git a/django/conf/locale/pl/LC_MESSAGES/djangojs.mo b/django/conf/locale/pl/LC_MESSAGES/djangojs.mo index 752211a454..eb162ab3a1 100644 Binary files a/django/conf/locale/pl/LC_MESSAGES/djangojs.mo and b/django/conf/locale/pl/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/pl/LC_MESSAGES/djangojs.po b/django/conf/locale/pl/LC_MESSAGES/djangojs.po index 8b929f309d..17af50f2ae 100644 --- a/django/conf/locale/pl/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/pl/LC_MESSAGES/djangojs.po @@ -40,7 +40,6 @@ msgid "Chosen %s" msgstr "Wybrano %s" #: contrib/admin/media/js/SelectFilter2.js:54 -#, fuzzy msgid "Select your choice(s) and click " msgstr "Zaznacz swój wybór i kliknij " diff --git a/django/conf/locale/ro/LC_MESSAGES/django.mo b/django/conf/locale/ro/LC_MESSAGES/django.mo index ffac5d5f9e..9b46b6c6d6 100644 Binary files a/django/conf/locale/ro/LC_MESSAGES/django.mo and b/django/conf/locale/ro/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ro/LC_MESSAGES/django.po b/django/conf/locale/ro/LC_MESSAGES/django.po index 293e428c71..09494d7b4e 100644 --- a/django/conf/locale/ro/LC_MESSAGES/django.po +++ b/django/conf/locale/ro/LC_MESSAGES/django.po @@ -23,13 +23,13 @@ msgstr "id obiect" #: contrib/comments/models.py:68 msgid "headline" -msgstr "" +msgstr "titlu" #: contrib/comments/models.py:69 contrib/comments/models.py:90 #: contrib/comments/models.py:167 #, fuzzy msgid "comment" -msgstr "conţinut" +msgstr "comentariu" #: contrib/comments/models.py:70 msgid "rating #1" @@ -69,20 +69,19 @@ msgstr "" #: contrib/comments/models.py:83 contrib/comments/models.py:169 msgid "date/time submitted" -msgstr "" +msgstr "data/ora crearii" #: contrib/comments/models.py:84 contrib/comments/models.py:170 msgid "is public" -msgstr "" +msgstr "public" #: contrib/comments/models.py:85 contrib/admin/views/doc.py:289 -#, fuzzy msgid "IP address" -msgstr "adresa email" +msgstr "adresa ip" #: contrib/comments/models.py:86 msgid "is removed" -msgstr "" +msgstr "sters" #: contrib/comments/models.py:86 msgid "" @@ -122,7 +121,7 @@ msgstr "adresa email" #: contrib/comments/models.py:173 msgid "approved by staff" -msgstr "" +msgstr "aprobat de echipa" #: contrib/comments/models.py:176 #, fuzzy @@ -282,9 +281,8 @@ msgid "Password:" msgstr "Parola:" #: contrib/comments/templates/comments/form.html:6 -#, fuzzy msgid "Forgotten your password?" -msgstr "Schimbă-mi parola" +msgstr "Ai uitat parola?" #: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/object_history.html:3 @@ -338,9 +336,8 @@ msgid "Preview comment" msgstr "permite comentarii" #: contrib/comments/templates/comments/freeform.html:4 -#, fuzzy msgid "Your name:" -msgstr "nume utilizator" +msgstr "numele dumneavoastra" #: contrib/admin/filterspecs.py:40 #, python-format @@ -352,41 +349,39 @@ msgstr "" #: contrib/admin/filterspecs.py:70 contrib/admin/filterspecs.py:88 #: contrib/admin/filterspecs.py:143 msgid "All" -msgstr "" +msgstr "tot" #: contrib/admin/filterspecs.py:109 msgid "Any date" -msgstr "" +msgstr "orice data" #: contrib/admin/filterspecs.py:110 -#, fuzzy msgid "Today" -msgstr "Luni" +msgstr "Astazi" #: contrib/admin/filterspecs.py:113 msgid "Past 7 days" -msgstr "" +msgstr "Ultimele 7 zile" #: contrib/admin/filterspecs.py:115 msgid "This month" -msgstr "" +msgstr "Luna aceasta" #: contrib/admin/filterspecs.py:117 msgid "This year" -msgstr "" +msgstr "Anul acesta" #: contrib/admin/filterspecs.py:143 msgid "Yes" -msgstr "" +msgstr "Da" #: contrib/admin/filterspecs.py:143 -#, fuzzy msgid "No" -msgstr "Noi." +msgstr "Nu" #: contrib/admin/filterspecs.py:150 msgid "Unknown" -msgstr "" +msgstr "Necunoscut" #: contrib/admin/models.py:16 msgid "action time" @@ -418,7 +413,7 @@ msgstr "intrări log" #: contrib/admin/templatetags/admin_list.py:228 msgid "All dates" -msgstr "" +msgstr "Toate datele" #: contrib/admin/views/decorators.py:9 contrib/auth/forms.py:36 #: contrib/auth/forms.py:41 @@ -426,6 +421,8 @@ msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." msgstr "" +"Va rugam sa introduceti username-ul si parola corecta. Aveti grija deoarece" +"casutele sunt case sensitive." #: contrib/admin/views/decorators.py:23 #: contrib/admin/templates/admin/login.html:25 @@ -437,16 +434,21 @@ msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." msgstr "" +"Va rugam sa va inregistrati din nou, deoarece sesiunea a expirat. Nu va " +"faceti griji datele au fost salvate." #: contrib/admin/views/decorators.py:68 msgid "" "Looks like your browser isn't configured to accept cookies. Please enable " "cookies, reload this page, and try again." msgstr "" +"Se pare ca browserul dumneavostra nu este configurat sa accepte cookies. Va " +"rugam sa va setati browserul sa accepte cookies, dati un reload la pagina si " +"incercati din nou." #: contrib/admin/views/decorators.py:82 msgid "Usernames cannot contain the '@' character." -msgstr "" +msgstr "Username-ul nu are voie sa contina caracterul '@'." #: contrib/admin/views/decorators.py:84 #, python-format @@ -461,61 +463,62 @@ msgstr "Administrare Django" #: contrib/admin/views/main.py:260 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "" +msgstr "%(name)s \"%(obj)s\" a fost inserat cu succes." #: contrib/admin/views/main.py:264 contrib/admin/views/main.py:348 msgid "You may edit it again below." -msgstr "" +msgstr "Va puteti edita datele din nou mai jos." #: contrib/admin/views/main.py:272 contrib/admin/views/main.py:357 #, python-format msgid "You may add another %s below." -msgstr "" +msgstr "Mai puteti adauga un alt %s mai jos." #: contrib/admin/views/main.py:290 -#, fuzzy, python-format +#, python-format msgid "Add %s" -msgstr "Adaugă" +msgstr "Adaugă %s" #: contrib/admin/views/main.py:336 #, python-format msgid "Added %s." -msgstr "" +msgstr "Adaugat %s." #: contrib/admin/views/main.py:336 contrib/admin/views/main.py:338 #: contrib/admin/views/main.py:340 msgid "and" -msgstr "" +msgstr "si" #: contrib/admin/views/main.py:338 -#, fuzzy, python-format +#, python-format msgid "Changed %s." -msgstr "Schimbă" +msgstr "Schimbă %s." #: contrib/admin/views/main.py:340 #, python-format msgid "Deleted %s." -msgstr "" +msgstr "Am sters %s." #: contrib/admin/views/main.py:343 msgid "No fields changed." -msgstr "" +msgstr "Nu s-a facut nicio schimbare." #: contrib/admin/views/main.py:346 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "" +msgstr "%(name)s \"%(obj)s\" au fost modificate cu succes." #: contrib/admin/views/main.py:354 #, python-format msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "" +"%(name)s \"%(obj)s\" au fost adaugate cu succes. Le puteti edita mai jos." #: contrib/admin/views/main.py:392 -#, fuzzy, python-format +#, python-format msgid "Change %s" -msgstr "Schimbă" +msgstr "Schimbă %s" #: contrib/admin/views/main.py:470 #, python-format @@ -530,16 +533,16 @@ msgstr "" #: contrib/admin/views/main.py:508 #, python-format msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "" +msgstr "%(name)s \"%(obj)s\" au fost sterse cu succes." #: contrib/admin/views/main.py:511 msgid "Are you sure?" -msgstr "" +msgstr "Sunteti sigur?" #: contrib/admin/views/main.py:533 -#, fuzzy, python-format +#, python-format msgid "Change history: %s" -msgstr "Schimbă parola" +msgstr "Schimbari facute: %s" #: contrib/admin/views/main.py:565 #, python-format @@ -549,13 +552,13 @@ msgstr "" #: contrib/admin/views/main.py:565 #, python-format msgid "Select %s to change" -msgstr "" +msgstr "Selecteaza %s pentru schimbare" #: contrib/admin/views/doc.py:277 contrib/admin/views/doc.py:286 #: contrib/admin/views/doc.py:288 contrib/admin/views/doc.py:294 #: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:297 msgid "Integer" -msgstr "" +msgstr "Intreg" #: contrib/admin/views/doc.py:278 msgid "Boolean (Either True or False)" @@ -564,26 +567,23 @@ msgstr "" #: contrib/admin/views/doc.py:279 contrib/admin/views/doc.py:296 #, python-format msgid "String (up to %(maxlength)s)" -msgstr "" +msgstr "String (pana la %(maxlength)s caractere)" #: contrib/admin/views/doc.py:280 msgid "Comma-separated integers" msgstr "" #: contrib/admin/views/doc.py:281 -#, fuzzy msgid "Date (without time)" -msgstr "timp acţiune" +msgstr "Data (fara ora)" #: contrib/admin/views/doc.py:282 -#, fuzzy msgid "Date (with time)" -msgstr "Dată/oră" +msgstr "Data (cu ora)" #: contrib/admin/views/doc.py:283 -#, fuzzy msgid "E-mail address" -msgstr "Adresa email:" +msgstr "Adresa email" #: contrib/admin/views/doc.py:284 contrib/admin/views/doc.py:287 msgid "File path" @@ -603,9 +603,8 @@ msgid "Relation to parent model" msgstr "" #: contrib/admin/views/doc.py:293 -#, fuzzy msgid "Phone number" -msgstr "Introduceţi un număr întreg." +msgstr "Numar de telefon" #: contrib/admin/views/doc.py:298 msgid "Text" @@ -613,7 +612,7 @@ msgstr "" #: contrib/admin/views/doc.py:299 msgid "Time" -msgstr "" +msgstr "Timp" #: contrib/admin/views/doc.py:300 contrib/flatpages/models.py:7 msgid "URL" @@ -636,7 +635,7 @@ msgstr "" #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Documentation" -msgstr "" +msgstr "Documentatie" #: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 @@ -770,9 +769,9 @@ msgid "None available" msgstr "Indisponibil" #: contrib/admin/templates/admin/change_list.html:11 -#, fuzzy, python-format +#, python-format msgid "Add %(name)s" -msgstr "Adaugă" +msgstr "Adaugă %(name)s" #: contrib/admin/templates/admin/login.html:22 msgid "Have you forgotten your password?" @@ -785,7 +784,7 @@ msgstr "Bine ai venit," #: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/submit_line.html:3 msgid "Delete" -msgstr "" +msgstr "Sterge" #: contrib/admin/templates/admin/delete_confirmation.html:14 #, python-format @@ -814,7 +813,7 @@ msgstr "Da, sînt sigur" #: contrib/admin/templates/admin/filter.html:2 #, python-format msgid " By %(title)s " -msgstr "" +msgstr " Dupa %(title)s " #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" @@ -827,33 +826,32 @@ msgstr "" #: contrib/admin/templates/admin/change_form.html:30 msgid "Please correct the error below." msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Va rugam sa corectati eroarea de mai jos" +msgstr[1] "Va rugam sa corectati erorile de mai jos" #: contrib/admin/templates/admin/change_form.html:48 msgid "Ordering" -msgstr "" +msgstr "Ordonate dupa" #: contrib/admin/templates/admin/change_form.html:51 msgid "Order:" -msgstr "" +msgstr "Ordonare:" #: contrib/admin/templates/admin/submit_line.html:4 msgid "Save as new" -msgstr "" +msgstr "Salvati ca nou" #: contrib/admin/templates/admin/submit_line.html:5 msgid "Save and add another" -msgstr "" +msgstr "Salvati si adaugati altul" #: contrib/admin/templates/admin/submit_line.html:6 msgid "Save and continue editing" -msgstr "" +msgstr "Salvati si continuati" #: contrib/admin/templates/admin/submit_line.html:7 -#, fuzzy msgid "Save" -msgstr "activ" +msgstr "Salveaza" #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_change_form.html:4 @@ -1133,24 +1131,20 @@ msgid "codename" msgstr "nume cod" #: contrib/auth/models.py:17 -#, fuzzy msgid "permission" -msgstr "Permisiune" +msgstr "permisiune" #: contrib/auth/models.py:18 contrib/auth/models.py:27 -#, fuzzy msgid "permissions" -msgstr "Permisiuni" +msgstr "permisiuni" #: contrib/auth/models.py:29 -#, fuzzy msgid "group" -msgstr "Grup" +msgstr "grup" #: contrib/auth/models.py:30 contrib/auth/models.py:65 -#, fuzzy msgid "groups" -msgstr "Grupuri" +msgstr "grupuri" #: contrib/auth/models.py:55 msgid "username" @@ -1209,19 +1203,16 @@ msgstr "" "permisiunile alocate fiecărui grup din care el/ea face parte." #: contrib/auth/models.py:67 -#, fuzzy msgid "user permissions" -msgstr "Permisiuni" +msgstr "permisiuni utilizator" #: contrib/auth/models.py:70 -#, fuzzy msgid "user" -msgstr "Utilizator" +msgstr "utilizator" #: contrib/auth/models.py:71 -#, fuzzy msgid "users" -msgstr "Utilizatori" +msgstr "utilizatori" #: contrib/auth/models.py:76 msgid "Personal info" @@ -1240,15 +1231,16 @@ msgid "Groups" msgstr "Grupuri" #: contrib/auth/models.py:219 -#, fuzzy msgid "message" -msgstr "Mesaj" +msgstr "mesaj" #: contrib/auth/forms.py:30 msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." msgstr "" +"Se pare ca browserul dumneavoastra nu suporta cookies. Aveti nevoie de un " +"browser care suporta cookies ca sa va logati." #: contrib/contenttypes/models.py:25 #, fuzzy @@ -1277,7 +1269,7 @@ msgstr "data expirare" #: contrib/sessions/models.py:41 msgid "session" -msgstr "seiune" +msgstr "sesiune" #: contrib/sessions/models.py:42 msgid "sessions" @@ -1389,7 +1381,7 @@ msgstr "Decembrie" #: utils/dates.py:19 msgid "jan" -msgstr "" +msgstr "ian" #: utils/dates.py:19 msgid "feb" @@ -1404,17 +1396,16 @@ msgid "apr" msgstr "" #: utils/dates.py:19 -#, fuzzy msgid "may" -msgstr "Mai" +msgstr "mai" #: utils/dates.py:19 msgid "jun" -msgstr "" +msgstr "iun" #: utils/dates.py:20 msgid "jul" -msgstr "" +msgstr "iul" #: utils/dates.py:20 msgid "aug" @@ -1430,7 +1421,7 @@ msgstr "" #: utils/dates.py:20 msgid "nov" -msgstr "" +msgstr "noi" #: utils/dates.py:20 msgid "dec" @@ -1467,40 +1458,38 @@ msgstr "Dec." #: utils/timesince.py:12 msgid "year" msgid_plural "years" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "an" +msgstr[1] "ani" #: utils/timesince.py:13 msgid "month" msgid_plural "months" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "luna" +msgstr[1] "luni" #: utils/timesince.py:14 msgid "week" msgid_plural "weeks" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "saptamana" +msgstr[1] "saptamani" #: utils/timesince.py:15 -#, fuzzy msgid "day" msgid_plural "days" -msgstr[0] "Mai" -msgstr[1] "Mai" +msgstr[0] "zi" +msgstr[1] "zile" #: utils/timesince.py:16 msgid "hour" msgid_plural "hours" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ora" +msgstr[1] "ore" #: utils/timesince.py:17 -#, fuzzy msgid "minute" msgid_plural "minutes" -msgstr[0] "sit" -msgstr[1] "sit" +msgstr[0] "minut" +msgstr[1] "minute" #: conf/global_settings.py:37 msgid "Bengali" @@ -1545,7 +1534,7 @@ msgstr "Galiciană" #: conf/global_settings.py:47 msgid "Hungarian" -msgstr "" +msgstr "Ungara" #: conf/global_settings.py:48 msgid "Hebrew" @@ -1577,7 +1566,7 @@ msgstr "Braziliană" #: conf/global_settings.py:55 msgid "Romanian" -msgstr "" +msgstr "Romana" #: conf/global_settings.py:56 msgid "Russian" @@ -1750,7 +1739,7 @@ msgstr[1] "Îngrijiţi-vă limbajul! Cuvintele %s nu sînt permise aici." #: core/validators.py:236 #, python-format msgid "This field must match the '%s' field." -msgstr "" +msgstr "Acest camp trebuie sa fie identic cu '%s'." #: core/validators.py:255 #, fuzzy @@ -1897,9 +1886,8 @@ msgstr "" #: db/models/fields/__init__.py:114 db/models/fields/__init__.py:265 #: db/models/fields/__init__.py:542 db/models/fields/__init__.py:553 #: forms/__init__.py:346 -#, fuzzy msgid "This field is required." -msgstr "Cîmpul este invalid." +msgstr "Campul acesta trebuie completat obligatoriu." #: db/models/fields/__init__.py:337 #, fuzzy @@ -1917,14 +1905,13 @@ msgid "This field cannot be null." msgstr "Cîmpul este invalid." #: db/models/fields/__init__.py:562 -#, fuzzy msgid "Enter a valid filename." -msgstr "Introduceţi o adresă de email validă." +msgstr "Introduceti un nume de fisier valid." #: db/models/fields/related.py:43 -#, fuzzy, python-format +#, python-format msgid "Please enter a valid %s." -msgstr "Introduceţi vă rog o adresă IP validă." +msgstr "Introduceti va rog un %s valid." #: db/models/fields/related.py:579 #, fuzzy @@ -1953,6 +1940,7 @@ msgid "Ensure your text is less than %s character." msgid_plural "Ensure your text is less than %s characters." msgstr[0] "" msgstr[1] "" +"Va rugam asigurati-va ca textul dumneavoastra are mai putin de %s caractere." #: forms/__init__.py:385 #, fuzzy @@ -1966,7 +1954,7 @@ msgstr "" #: forms/__init__.py:645 msgid "The submitted file is empty." -msgstr "" +msgstr "Fisierul uploadat este gol" #: forms/__init__.py:699 #, fuzzy @@ -1985,7 +1973,7 @@ msgstr "Introduceţi un număr întreg." #: template/defaultfilters.py:379 msgid "yes,no,maybe" -msgstr "" +msgstr "da,nu,poate" #, fuzzy #~ msgid "Comments" diff --git a/django/conf/locale/ro/LC_MESSAGES/djangojs.mo b/django/conf/locale/ro/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..1db40df910 Binary files /dev/null and b/django/conf/locale/ro/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/ro/LC_MESSAGES/djangojs.po b/django/conf/locale/ro/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..4084313848 --- /dev/null +++ b/django/conf/locale/ro/LC_MESSAGES/djangojs.po @@ -0,0 +1,118 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:32 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "" diff --git a/django/conf/locale/sk/LC_MESSAGES/django.mo b/django/conf/locale/sk/LC_MESSAGES/django.mo index 2789e1518f..9c8cfd3cd6 100644 Binary files a/django/conf/locale/sk/LC_MESSAGES/django.mo and b/django/conf/locale/sk/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/sk/LC_MESSAGES/django.po b/django/conf/locale/sk/LC_MESSAGES/django.po index f1a3cd77a2..98cc44579c 100644 --- a/django/conf/locale/sk/LC_MESSAGES/django.po +++ b/django/conf/locale/sk/LC_MESSAGES/django.po @@ -1,72 +1,77 @@ -# -# -# +# translation of django.po to Slovak +# +# +# msgid "" msgstr "" -"Project-Id-Version: Django\n" +"Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-03-31 14:02+0200\n" -"PO-Revision-Date: 2007-04-03 21:49+0200\n" -"Last-Translator: <>\n" -"Language-Team: Slovak\n" +"POT-Creation-Date: 2007-06-23 18:09-0400\n" +"PO-Revision-Date: 2007-06-22 20:54-0400\n" +"Last-Translator: Vlado \n" +"Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" -#: oldforms/__init__.py:357 db/models/fields/__init__.py:117 -#: db/models/fields/__init__.py:274 db/models/fields/__init__.py:610 -#: db/models/fields/__init__.py:621 newforms/models.py:178 -#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450 -#: newforms/fields.py:461 +#: oldforms/__init__.py:361 db/models/fields/__init__.py:121 +#: db/models/fields/__init__.py:278 db/models/fields/__init__.py:675 +#: db/models/fields/__init__.py:686 newforms/models.py:185 +#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:520 +#: newforms/fields.py:531 msgid "This field is required." msgstr "Toto pole je povinné." -#: oldforms/__init__.py:392 +#: oldforms/__init__.py:396 #, python-format msgid "Ensure your text is less than %s character." -msgstr "Uisite sa, že text je kratší ako %s znakov." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Uisite sa, že text je kratší ako %s znak." +msgstr[1] "Uisite sa, že text je kratší ako %s znakov." -#: oldforms/__init__.py:397 +#: oldforms/__init__.py:401 msgid "Line breaks are not allowed here." msgstr "Zalomenia riadkov nie sú povolené." -#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610 +#: oldforms/__init__.py:502 oldforms/__init__.py:575 oldforms/__init__.py:614 #, python-format msgid "Select a valid choice; '%(data)s' is not in %(choices)s." msgstr "Vyberte platnú možnosť; '%(data)s' nie je v %(choices)s." -#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: oldforms/__init__.py:581 newforms/widgets.py:182 #: contrib/admin/filterspecs.py:150 msgid "Unknown" msgstr "Neznámy" -#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: oldforms/__init__.py:581 newforms/widgets.py:182 #: contrib/admin/filterspecs.py:143 msgid "Yes" msgstr "Áno" -#: oldforms/__init__.py:577 newforms/widgets.py:170 +#: oldforms/__init__.py:581 newforms/widgets.py:182 #: contrib/admin/filterspecs.py:143 msgid "No" msgstr "Nie" -#: oldforms/__init__.py:672 core/validators.py:174 core/validators.py:445 +#: oldforms/__init__.py:676 core/validators.py:175 core/validators.py:453 msgid "No file was submitted. Check the encoding type on the form." -msgstr "Súbor nebol odoslaný. Skontrolujte atribút 'enctype' encoding vo formulári." +msgstr "" +"Súbor nebol odoslaný. Skontrolujte atribút 'enctype' encoding vo formulári." -#: oldforms/__init__.py:674 +#: oldforms/__init__.py:678 msgid "The submitted file is empty." msgstr "Odoslaný súbor je prázdný." -#: oldforms/__init__.py:730 +#: oldforms/__init__.py:734 msgid "Enter a whole number between -32,768 and 32,767." msgstr "Zadajte celé číslo s hodnotou medzi -32768 a 32767." -#: oldforms/__init__.py:740 +#: oldforms/__init__.py:744 msgid "Enter a positive number." msgstr "Zadajte celé kladné číslo." -#: oldforms/__init__.py:750 +#: oldforms/__init__.py:754 msgid "Enter a whole number between 0 and 32,767." msgstr "Zadajte celé číslo s hodnotou medzi 0 a 32767." @@ -80,38 +85,42 @@ msgstr "%(object)s s %(type)s už existuje pre prvok %(field)s." msgid "and" msgstr "a" -#: db/models/fields/__init__.py:42 +#: db/models/fields/__init__.py:46 #, python-format msgid "%(optname)s with this %(fieldname)s already exists." msgstr "%(optname)s s %(fieldname)s už existuje." -#: db/models/fields/__init__.py:367 +#: db/models/fields/__init__.py:373 msgid "This value must be an integer." msgstr "Táto hodnota musí byť celé číslo." -#: db/models/fields/__init__.py:402 +#: db/models/fields/__init__.py:408 msgid "This value must be either True or False." msgstr "Táto hodnota musí byť True alebo False." -#: db/models/fields/__init__.py:423 +#: db/models/fields/__init__.py:429 msgid "This field cannot be null." msgstr "Toto pole nemôže obsahovať null." -#: db/models/fields/__init__.py:457 core/validators.py:148 +#: db/models/fields/__init__.py:463 core/validators.py:149 msgid "Enter a valid date in YYYY-MM-DD format." msgstr "Zadajte platný dátum vo formáte RRRR-MM-DD." -#: db/models/fields/__init__.py:526 core/validators.py:157 +#: db/models/fields/__init__.py:532 core/validators.py:158 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." msgstr "Zadajte platný dátum a čas vo formáte RRRR-MM-DD HH:MM." -#: db/models/fields/__init__.py:630 +#: db/models/fields/__init__.py:592 +msgid "This value must be a decimal number." +msgstr "Táto hodnota musí byť desiatkove číslo." + +#: db/models/fields/__init__.py:695 msgid "Enter a valid filename." msgstr "Zadajte platný názov súboru." -#: db/models/fields/__init__.py:751 +#: db/models/fields/__init__.py:818 msgid "This value must be either None, True or False." -msgstr "Táto hodnota musí byť None, True alebo False." +msgstr "Táto hodnota musí byť buď None, True alebo False." #: db/models/fields/related.py:53 #, python-format @@ -125,13 +134,17 @@ msgstr "Oddeľte viacnásobné ID čiarkami." #: db/models/fields/related.py:644 msgid "" "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "Ak chcete vybrať viacero možností, podržte \"Control\" alebo \"Command\" na Mac-u." +msgstr "" +"Ak chcete vybrať viacero možností, podržte \"Control\" alebo \"Command\" na " +"Mac-u." #: db/models/fields/related.py:691 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." +msgid_plural "" "Please enter valid %(self)s IDs. The values %(value)r are invalid." -msgstr "Prosím, vložte platné %(self)s ID-čka. Hodnota %(value)r je neplatná." +msgstr[0] "Prosím, vložte platné %(self)s ID. Hodnota %(value)r je neplatná." +msgstr[1] "" "Prosím, vložte platné %(self)s ID-čka. Hodnoty %(value)r sú neplatné." #: conf/global_settings.py:39 @@ -143,428 +156,463 @@ msgid "Bengali" msgstr "Bengálsky" #: conf/global_settings.py:41 +msgid "Bulgarian" +msgstr "Bulharský" + +#: conf/global_settings.py:42 msgid "Catalan" msgstr "Katalánsky" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Czech" msgstr "Česky" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "Welsh" msgstr "Welšsky" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Danish" msgstr "Dánsky" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "German" msgstr "Nemecky" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Greek" msgstr "Grécky" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "English" msgstr "Anglicky" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Spanish" msgstr "Španielsky" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Argentinean Spanish" msgstr "Argentínska španielčina" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Finnish" msgstr "Fínsky" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "French" msgstr "Francúzsky" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Galician" msgstr "Galicijsky" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Hungarian" msgstr "Maďarsky" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Hebrew" msgstr "Hebrejsky" -#: conf/global_settings.py:55 +#: conf/global_settings.py:56 msgid "Icelandic" msgstr "Islandsky" -#: conf/global_settings.py:56 +#: conf/global_settings.py:57 msgid "Italian" msgstr "Taliansky" -#: conf/global_settings.py:57 +#: conf/global_settings.py:58 msgid "Japanese" msgstr "Japonsky" -#: conf/global_settings.py:58 +#: conf/global_settings.py:59 +msgid "Korean" +msgstr "Korejský" + +#: conf/global_settings.py:60 msgid "Kannada" msgstr "Kannada" -#: conf/global_settings.py:59 +#: conf/global_settings.py:61 msgid "Latvian" msgstr "Lotyšsky" -#: conf/global_settings.py:60 +#: conf/global_settings.py:62 msgid "Macedonian" msgstr "Mecedónsky" -#: conf/global_settings.py:61 +#: conf/global_settings.py:63 msgid "Dutch" msgstr "Holandsky" -#: conf/global_settings.py:62 +#: conf/global_settings.py:64 msgid "Norwegian" msgstr "Nórsky" -#: conf/global_settings.py:63 +#: conf/global_settings.py:65 msgid "Polish" msgstr "Poľsky" -#: conf/global_settings.py:64 +#: conf/global_settings.py:66 msgid "Portugese" msgstr "Portugalsky" -#: conf/global_settings.py:65 +#: conf/global_settings.py:67 msgid "Brazilian" msgstr "Brazílsky" -#: conf/global_settings.py:66 +#: conf/global_settings.py:68 msgid "Romanian" msgstr "Rumunsky" -#: conf/global_settings.py:67 +#: conf/global_settings.py:69 msgid "Russian" msgstr "Rusky" -#: conf/global_settings.py:68 +#: conf/global_settings.py:70 msgid "Slovak" msgstr "Slovensky" -#: conf/global_settings.py:69 +#: conf/global_settings.py:71 msgid "Slovenian" msgstr "Slovinsky" -#: conf/global_settings.py:70 +#: conf/global_settings.py:72 msgid "Serbian" msgstr "Srbsky" -#: conf/global_settings.py:71 +#: conf/global_settings.py:73 msgid "Swedish" msgstr "Švédsky" -#: conf/global_settings.py:72 +#: conf/global_settings.py:74 msgid "Tamil" msgstr "Tamilsky" -#: conf/global_settings.py:73 +#: conf/global_settings.py:75 msgid "Telugu" msgstr "Telugu" -#: conf/global_settings.py:74 +#: conf/global_settings.py:76 msgid "Turkish" msgstr "Turecky" -#: conf/global_settings.py:75 +#: conf/global_settings.py:77 msgid "Ukrainian" msgstr "Ukrajinsky" -#: conf/global_settings.py:76 +#: conf/global_settings.py:78 msgid "Simplified Chinese" msgstr "Čínsky (zjednodušene)" -#: conf/global_settings.py:77 +#: conf/global_settings.py:79 msgid "Traditional Chinese" msgstr "Čínsky (tradične)" -#: core/validators.py:64 +#: core/validators.py:65 msgid "This value must contain only letters, numbers and underscores." msgstr "Táto hodnota môže obsahovať len písmená, číslice a podčiarkovníky." -#: core/validators.py:68 +#: core/validators.py:69 msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." -msgstr "Táto hodnota môže obsahovať len písmena, číslice, podčiarkovniky, pomlčky a lomítka." +msgstr "" +"Táto hodnota môže obsahovať len písmena, číslice, podčiarkovniky, pomlčky a " +"lomítka." -#: core/validators.py:72 +#: core/validators.py:73 msgid "This value must contain only letters, numbers, underscores or hyphens." -msgstr "Táto hodnota môže obsahovať len písmená, číslice, počiarkovníky a pomlčky." +msgstr "" +"Táto hodnota môže obsahovať len písmená, číslice, počiarkovníky a pomlčky." -#: core/validators.py:76 +#: core/validators.py:77 msgid "Uppercase letters are not allowed here." msgstr "Veľké písmená nie sú povolené." -#: core/validators.py:80 +#: core/validators.py:81 msgid "Lowercase letters are not allowed here." msgstr "Malé písmena nie sú povolené." -#: core/validators.py:87 +#: core/validators.py:88 msgid "Enter only digits separated by commas." msgstr "Zadávajte len číslice oddelené čiarkami." -#: core/validators.py:99 +#: core/validators.py:100 msgid "Enter valid e-mail addresses separated by commas." msgstr "Zadajte platné e-mailové adresy oddelené čiarkami." -#: core/validators.py:103 +#: core/validators.py:104 msgid "Please enter a valid IP address." msgstr "Prosím, zadajte platnú IP adresu." -#: core/validators.py:107 +#: core/validators.py:108 msgid "Empty values are not allowed here." msgstr "Prázdne hodnoty tu nie sú povolené." -#: core/validators.py:111 +#: core/validators.py:112 msgid "Non-numeric characters aren't allowed here." msgstr "Iné ako numerické znaky tu nie sú povolené." -#: core/validators.py:115 +#: core/validators.py:116 msgid "This value can't be comprised solely of digits." msgstr "Táto hodnota nemôže byť čisto numerická." -#: core/validators.py:120 newforms/fields.py:126 +#: core/validators.py:121 newforms/fields.py:135 msgid "Enter a whole number." msgstr "Zadajte celé číslo." -#: core/validators.py:124 +#: core/validators.py:125 msgid "Only alphabetical characters are allowed here." msgstr "Tu sú povolené len alfanumerické znaky." -#: core/validators.py:139 +#: core/validators.py:140 msgid "Year must be 1900 or later." msgstr "Rok musí byť 1900 alebo neskôr." -#: core/validators.py:143 +#: core/validators.py:144 #, python-format msgid "Invalid date: %s" msgstr "Neplatný dátum: %s" -#: core/validators.py:153 +#: core/validators.py:154 msgid "Enter a valid time in HH:MM format." msgstr "Zadajte platný čas vo formáte HH:MM." -#: core/validators.py:162 newforms/fields.py:269 +#: core/validators.py:163 newforms/fields.py:339 msgid "Enter a valid e-mail address." msgstr "Zadajte platnú e-mailovú adresu." -#: core/validators.py:178 +#: core/validators.py:179 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "Nahrajte platný obrázok. Súbor, ktorý ste odoslali nebol obrázkový formát alebo bol poškodený." +msgstr "" +"Nahrajte platný obrázok. Súbor, ktorý ste odoslali nebol obrázkový formát " +"alebo bol poškodený." -#: core/validators.py:185 +#: core/validators.py:186 #, python-format msgid "The URL %s does not point to a valid image." msgstr "URL %s neodkazuje na platný obrázok." -#: core/validators.py:189 +#: core/validators.py:190 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." -msgstr "Telefónne číslo musí mať formát XXX-XXX-XXXX. Číslo \"%s\" je neplatné." +msgstr "" +"Telefónne číslo musí mať formát XXX-XXX-XXXX. Číslo \"%s\" je neplatné." -#: core/validators.py:197 +#: core/validators.py:198 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "URL %s neodkazuje na platné QuickTime video." -#: core/validators.py:201 +#: core/validators.py:202 msgid "A valid URL is required." msgstr "Je požadovaná platná adresa URL." -#: core/validators.py:215 +#: core/validators.py:216 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" "%s" -msgstr "HTML kód musí zodpovedať špecifikácii. Zistené chyby sú:\n" +msgstr "" +"HTML kód musí zodpovedať špecifikácii. Zistené chyby sú:\n" "%s" -#: core/validators.py:222 +#: core/validators.py:223 #, python-format msgid "Badly formed XML: %s" msgstr "Chybné XML nezodpovedajúce definícii: %s" -#: core/validators.py:239 +#: core/validators.py:240 #, python-format msgid "Invalid URL: %s" msgstr "Neplatná adresa URL: %s" -#: core/validators.py:244 core/validators.py:246 +#: core/validators.py:245 core/validators.py:247 #, python-format msgid "The URL %s is a broken link." msgstr "Odkaz na URL %s je neplatný." -#: core/validators.py:252 +#: core/validators.py:253 msgid "Enter a valid U.S. state abbreviation." msgstr "Zadajte platnú skratku štátu USA." -#: core/validators.py:266 +#: core/validators.py:267 #, python-format msgid "Watch your mouth! The word %s is not allowed here." -msgstr "Vyjadrujte sa slušne! Slovo %s tu nie je dovolené použivať." +msgid_plural "Watch your mouth! The words %s are not allowed here." +msgstr[0] "Vyjadrujte sa slušne! Slovo %s tu nie je dovolené použivať." +msgstr[1] "Vyjadrujte sa slušne! Slová %s tu nie je dovolené použivať." -#: core/validators.py:273 +#: core/validators.py:274 #, python-format msgid "This field must match the '%s' field." msgstr "Toto pole sa musí zhodovať s poľom '%s'. " -#: core/validators.py:292 +#: core/validators.py:293 msgid "Please enter something for at least one field." msgstr "Prosím, vyplňte aspoň jedno pole." -#: core/validators.py:301 core/validators.py:312 +#: core/validators.py:302 core/validators.py:313 msgid "Please enter both fields or leave them both empty." msgstr "Prosím, vyplňte buď obidve polia, alebo ich nechajte prázdne." -#: core/validators.py:320 +#: core/validators.py:321 #, python-format msgid "This field must be given if %(field)s is %(value)s" msgstr "Toto pole musí byť vyplnené ak, %(field)s je %(value)s" -#: core/validators.py:333 +#: core/validators.py:334 #, python-format msgid "This field must be given if %(field)s is not %(value)s" msgstr "Toto pole musí byť vyplnené, ak %(field)s nie je %(value)s" -#: core/validators.py:352 +#: core/validators.py:353 msgid "Duplicate values are not allowed." msgstr "Duplicitné hodnoty nie sú povolené." -#: core/validators.py:367 +#: core/validators.py:368 #, python-format msgid "This value must be between %(lower)s and %(upper)s." msgstr "Táto hodnota musí byť medzi %(lower)s a %(upper)s." -#: core/validators.py:369 +#: core/validators.py:370 #, python-format msgid "This value must be at least %s." msgstr "Táto hodnota musí byť prinajmenšom %s." -#: core/validators.py:371 +#: core/validators.py:372 #, python-format msgid "This value must be no more than %s." msgstr "Táto hodnota musí byť väčšia ako %s." -#: core/validators.py:407 +#: core/validators.py:408 #, python-format msgid "This value must be a power of %s." msgstr "Táto hodnota musí byť mocninou %s." -#: core/validators.py:418 +#: core/validators.py:417 msgid "Please enter a valid decimal number." msgstr "Prosím, vložte platné desatinné číslo. " -#: core/validators.py:422 +#: core/validators.py:423 #, python-format msgid "Please enter a valid decimal number with at most %s total digit." +msgid_plural "" "Please enter a valid decimal number with at most %s total digits." -msgstr "Prosím vlož platné desatinné číslo s najviac %s číslicou." -"Prosím vlož platné desatinné číslo s najviac %s číslicami." +msgstr[0] "Prosím, vložte platné desatinné číslo. " +msgstr[1] "Prosím, vložte platné desatinné čísla. " -#: core/validators.py:425 +#: core/validators.py:426 #, python-format msgid "" "Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" "Please enter a valid decimal number with a whole part of at most %s digits." -msgstr "Prosím, zadajte platné desatinné číslo s najviac %s číslicou pred desatinnou čiarkou." -"Prosím, zadajte platné desatinné číslo s najviac %s číslicami pred desatinnou čiarkou." +msgstr[0] "Prosím vlož platné desatinné číslo s najviac %s číslicou. " +msgstr[1] "Prosím vlož platné desatinné číslo s najviac %s číslicami." -#: core/validators.py:428 +#: core/validators.py:429 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." +msgid_plural "" "Please enter a valid decimal number with at most %s decimal places." -msgstr "Prosím, zadajte platné desatinné číslo s najviac %s desatinným miestom." -"Prosím, zadajte platné desatinné číslo s najviac %s desatinnými miestami." +msgstr[0] "" +"Prosím, vložte platné desatinné číslo s najviac %s desatinným miestom. " +msgstr[1] "" +"Prosím, vložte platné desatinné číslo s najviac %s desatinnými miestamy. " -#: core/validators.py:438 +#: core/validators.py:437 +msgid "Please enter a valid floating point number." +msgstr "Prosím, vložte platné číslo s pohyblivou desatinnou čiarkou. " + +#: core/validators.py:446 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." msgstr "Uistite sa, že posielaný súbor nemá menej ako %s bajtov." -#: core/validators.py:439 +#: core/validators.py:447 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." msgstr "Uistite sa, že posielaný súbor nemá viac ako %s bajtov." -#: core/validators.py:456 +#: core/validators.py:464 msgid "The format for this field is wrong." msgstr "Formát pre toto pole je chybný." -#: core/validators.py:471 +#: core/validators.py:479 msgid "This field is invalid." msgstr "Toto pole nie je platné." -#: core/validators.py:507 +#: core/validators.py:515 #, python-format msgid "Could not retrieve anything from %s." msgstr "Z %s nič neprišlo." -#: core/validators.py:510 +#: core/validators.py:518 #, python-format msgid "" "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "Adresa URL %(url)s vrátila v hlavičke neplatný Content-Type '%(contenttype)s'." +msgstr "" +"Adresa URL %(url)s vrátila v hlavičke neplatný Content-Type '%(contenttype)" +"s'." -#: core/validators.py:543 +#: core/validators.py:551 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " "\"%(start)s\".)" -msgstr "Prosím, uzatvorte tag %(tag)s na riadku %(line)s. (Riadok začína " -"s \"%(start)s\".)" +msgstr "" +"Prosím, uzatvorte tag %(tag)s na riadku %(line)s. (Riadok začína s \"%(start)" +"s\".)" -#: core/validators.py:547 +#: core/validators.py:555 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " "starts with \"%(start)s\".)" -msgstr "Text začínajúci na riadku %(line)s nie je povolený v tomto kontexte. (Riadok začína s \"%(start)s\".)" +msgstr "" +"Text začínajúci na riadku %(line)s nie je povolený v tomto kontexte. (Riadok " +"začína s \"%(start)s\".)" -#: core/validators.py:552 +#: core/validators.py:560 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" "(start)s\".)" -msgstr "\"%(attr)s\" na riadku %(line)s je neplatný atribút. (Riadok začína s \"%" +msgstr "" +"\"%(attr)s\" na riadku %(line)s je neplatný atribút. (Riadok začína s \"%" "(start)s\".)" -#: core/validators.py:557 +#: core/validators.py:565 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" "(start)s\".)" -msgstr "\"<%(tag)s>\" na riadku %(line)s je neplatný tag. (Riadok začína s \"%" -"(start)s\".)" +msgstr "" +"\"<%(tag)s>\" na riadku %(line)s je neplatný tag. (Riadok začína s \"%(start)" +"s\".)" -#: core/validators.py:561 +#: core/validators.py:569 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " "starts with \"%(start)s\".)" -msgstr "V tagu na riadku %(line)s chýba jeden alebo viac atribútov. (Riadok " -"začína s \"%(start)s\".)" +msgstr "" +"V tagu na riadku %(line)s chýba jeden alebo viac atribútov. (Riadok začína s " +"\"%(start)s\".)" -#: core/validators.py:566 +#: core/validators.py:574 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " "starts with \"%(start)s\".)" -msgstr "Atribút \"%(attr)s\" na riadku %(line)s má neplatnú hodnotu. (Riadok začína " +msgstr "" +"Atribút \"%(attr)s\" na riadku %(line)s má neplatnú hodnotu. (Riadok začína " "s \"%(start)s\".)" #: views/generic/create_update.py:43 @@ -582,60 +630,79 @@ msgstr "Objekt %(verbose_name)s bol úspešne zmenený." msgid "The %(verbose_name)s was deleted." msgstr "Objekt %(verbose_name)s bol zmazaný." -#: newforms/models.py:165 newforms/fields.py:360 +#: newforms/models.py:172 newforms/fields.py:432 msgid "Select a valid choice. That choice is not one of the available choices." msgstr "Vyberte platnú možnosť. Vybraná položka nepatrí medzi platné možnosti." -#: newforms/models.py:182 newforms/fields.py:378 newforms/fields.py:454 +#: newforms/models.py:189 newforms/fields.py:448 newforms/fields.py:524 msgid "Enter a list of values." msgstr "Vložte zoznam hodnôt." -#: newforms/models.py:188 newforms/fields.py:387 +#: newforms/models.py:195 newforms/fields.py:457 #, python-format msgid "Select a valid choice. %s is not one of the available choices." msgstr "Vyberte platnú možnost. %s nepatrí medzi dostupné možnosti." -#: newforms/fields.py:101 newforms/fields.py:254 +#: newforms/fields.py:110 newforms/fields.py:324 #, python-format msgid "Ensure this value has at most %d characters." msgstr "Uistite sa, že hodnota má najviac %d znakov." -#: newforms/fields.py:103 newforms/fields.py:256 +#: newforms/fields.py:112 newforms/fields.py:326 #, python-format msgid "Ensure this value has at least %d characters." msgstr "Uistite sa, že zadaná hodnota má menej ako %d znakov." -#: newforms/fields.py:128 +#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192 #, python-format msgid "Ensure this value is less than or equal to %s." msgstr "Uistite sa, že táto hodnota je menšia alebo rovná %s." -#: newforms/fields.py:130 +#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194 #, python-format msgid "Ensure this value is greater than or equal to %s." msgstr "Uistite sa, že hodnota je väčšia alebo rovná %s." -#: newforms/fields.py:163 +#: newforms/fields.py:158 newforms/fields.py:186 +msgid "Enter a number." +msgstr "Zadajte číslo." + +#: newforms/fields.py:196 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "" + +#: newforms/fields.py:198 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "Zabezpečte aby nebolo viac ako %s desatinných miest." + +#: newforms/fields.py:200 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "Zabezpečte aby nebolo viac ako %s číslic pred desatinnou bodkou." + +#: newforms/fields.py:233 msgid "Enter a valid date." msgstr "Zadajte platný dátum." -#: newforms/fields.py:190 +#: newforms/fields.py:260 msgid "Enter a valid time." msgstr "Zadajte platný čas." -#: newforms/fields.py:226 +#: newforms/fields.py:296 msgid "Enter a valid date/time." msgstr "Zadajte platný dátum a čas." -#: newforms/fields.py:240 +#: newforms/fields.py:310 msgid "Enter a valid value." msgstr "Zadajte platnú hodnotu." -#: newforms/fields.py:287 newforms/fields.py:309 +#: newforms/fields.py:357 newforms/fields.py:379 msgid "Enter a valid URL." msgstr "Zadajte platnú adresu URL." -#: newforms/fields.py:311 +#: newforms/fields.py:381 msgid "This URL appears to be a broken link." msgstr "Odkaz na URL neexistuje." @@ -658,17 +725,23 @@ msgstr "rd" #: contrib/humanize/templatetags/humanize.py:47 #, python-format msgid "%(value).1f million" -msgstr "%(value).1f milión" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f milión" +msgstr[1] "%(value).1f milión" #: contrib/humanize/templatetags/humanize.py:50 #, python-format msgid "%(value).1f billion" -msgstr "%(value).1f miliarda" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miliarda" +msgstr[1] "%(value).1f miliarda" #: contrib/humanize/templatetags/humanize.py:53 #, python-format msgid "%(value).1f trillion" -msgstr "%(value).1f bilión" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f bilión" +msgstr[1] "%(value).1f bilión" #: contrib/humanize/templatetags/humanize.py:68 msgid "one" @@ -714,7 +787,9 @@ msgstr "presmerovať z" msgid "" "This should be an absolute path, excluding the domain name. Example: '/" "events/search/'." -msgstr "Tu by sa mala použiť absolútna cesta bez názvu domény. Napríklad: '/events/search/'." +msgstr "" +"Tu by sa mala použiť absolútna cesta bez názvu domény. Napríklad: '/events/" +"search/'." #: contrib/redirects/models.py:9 msgid "redirect to" @@ -724,7 +799,9 @@ msgstr "presmerovať na " msgid "" "This can be either an absolute path (as above) or a full URL starting with " "'http://'." -msgstr "Tu môže byť buď absolútna cesta (ako je uvedené vyššie) alebo úplná adresa URL začínajúca s 'http://'." +msgstr "" +"Tu môže byť buď absolútna cesta (ako je uvedené vyššie) alebo úplná adresa " +"URL začínajúca s 'http://'." #: contrib/redirects/models.py:13 msgid "redirect" @@ -791,7 +868,7 @@ msgstr "dátum a čas odoslania" msgid "is public" msgstr "je verejný" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:305 msgid "IP address" msgstr "IP adresa" @@ -803,7 +880,9 @@ msgstr "je vymazaný" msgid "" "Check this box if the comment is inappropriate. A \"This comment has been " "removed\" message will be displayed instead." -msgstr "Zaškrtnite toto pole, ak je komentár nevhodný. Správa \"Tento komenár bol zmazaný\" sa bude zobrazovať namiesto neho." +msgstr "" +"Zaškrtnite toto pole, ak je komentár nevhodný. Správa \"Tento komenár bol " +"zmazaný\" sa bude zobrazovať namiesto neho." #: contrib/comments/models.py:91 msgid "comments" @@ -838,7 +917,7 @@ msgstr "ip adresa" #: contrib/comments/models.py:173 msgid "approved by staff" -msgstr "je zamestnancom" +msgstr "schválený zamestnancom" #: contrib/comments/models.py:176 msgid "free comment" @@ -875,13 +954,14 @@ msgid "" "This comment was flagged by %(user)s:\n" "\n" "%(text)s" -msgstr "Tento komentár bol označený užívateľom %(user)s:\n" +msgstr "" +"Tento komentár bol označený užívateľom %(user)s:\n" "\n" "%(text)s" #: contrib/comments/models.py:265 msgid "flag date" -msgstr "dátumové príznak" +msgstr "označený dátum" #: contrib/comments/models.py:268 msgid "user flag" @@ -937,18 +1017,18 @@ msgid "" "comment:\n" "\n" "%(text)s" +msgid_plural "" "This comment was posted by a user who has posted fewer than %(count)s " "comments:\n" "\n" "%(text)s" -msgstr "" -"Tento komentár je od užívateľa, ktorý doteraz poslal menej ako %(count)s " -"komentár:\n" -"\n" +msgstr[0] "" +"Tento komentár je od užívateľa, ktorý poslal menej ako %(count)s " +"príspevok\n" "%(text)s" -"Tento komentár je od užívateľa, ktorý doteraz poslal menej ako %(count)s " -"komentárov:\n" -"\n" +msgstr[1] "" +"Tento komentár je od užívateľa, ktorý poslal menej ako %(count)s " +"príspevkov .\n" "%(text)s" #: contrib/comments/views/comments.py:116 @@ -957,7 +1037,8 @@ msgid "" "This comment was posted by a sketchy user:\n" "\n" "%(text)s" -msgstr "Tento komentár je od užívateľa, ktorý sa rád vyjadruje v náznakoch:\n" +msgstr "" +"Tento komentár je od užívateľa, ktorý sa rád vyjadruje v náznakoch:\n" "\n" "%(text)s" @@ -974,7 +1055,8 @@ msgstr "Jedno alebo viac povinných polí nebolo vložených" #: contrib/comments/views/comments.py:196 #: contrib/comments/views/comments.py:286 msgid "Somebody tampered with the comment form (security violation)" -msgstr "Niekto sa pokúšal manipulovať s formulárom komentára (porušenie bezpečnosti)" +msgstr "" +"Niekto sa pokúšal manipulovať s formulárom komentára (porušenie bezpečnosti)" #: contrib/comments/views/comments.py:206 #: contrib/comments/views/comments.py:292 @@ -987,7 +1069,22 @@ msgstr "" #: contrib/comments/views/comments.py:257 #: contrib/comments/views/comments.py:321 msgid "The comment form didn't provide either 'preview' or 'post'" -msgstr "Formulár komentára neobsahuje ani jednu z možností 'náhľad' alebo 'odoslať'." +msgstr "" +"Formulár komentára neobsahuje ani jednu z možností 'náhľad' alebo 'odoslať'." + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Tvoje meno:" + +#: contrib/comments/templates/comments/freeform.html:5 +#: contrib/comments/templates/comments/form.html:28 +msgid "Comment:" +msgstr "Komentár:" + +#: contrib/comments/templates/comments/freeform.html:10 +#: contrib/comments/templates/comments/form.html:35 +msgid "Preview comment" +msgstr "Náhľad komentára" #: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:8 @@ -996,24 +1093,24 @@ msgid "Username:" msgstr "Meno:" #: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/view_detail.html:4 #: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 #: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 #: contrib/admin/templates/admin_doc/missing_docutils.html:4 #: contrib/admin/templates/admin_doc/view_index.html:5 #: contrib/admin/templates/admin_doc/model_detail.html:3 #: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/model_index.html:5 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 msgid "Log out" msgstr "Odhlásenie" @@ -1044,20 +1141,6 @@ msgstr "Nepovinné" msgid "Post a photo" msgstr "Pošli foto" -#: contrib/comments/templates/comments/form.html:28 -#: contrib/comments/templates/comments/freeform.html:5 -msgid "Comment:" -msgstr "Komentár:" - -#: contrib/comments/templates/comments/form.html:35 -#: contrib/comments/templates/comments/freeform.html:10 -msgid "Preview comment" -msgstr "Náhľad komentára" - -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Tvoje meno:" - #: contrib/sites/models.py:10 msgid "domain name" msgstr "názov domény" @@ -1090,7 +1173,7 @@ msgstr "Všetko" #: contrib/admin/filterspecs.py:109 msgid "Any date" -msgstr "Všetky dátumy" +msgstr "Lubovoľný dátum" #: contrib/admin/filterspecs.py:110 msgid "Today" @@ -1136,10 +1219,48 @@ msgstr "záznam priebehu" msgid "log entries" msgstr "záznamy priebehu" -#: contrib/admin/templatetags/admin_list.py:247 +#: contrib/admin/templatetags/admin_list.py:249 msgid "All dates" msgstr "Všetky dátumy" +#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Prosím, zadajte užívateľské meno a heslo. Rešpektujte malé a veľké písmená." + +#: contrib/admin/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Prihlásenie" + +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Vaša session vypršala. Prosím, príhlaste sa znovu. Nemusíte sa obávať, vaše " +"údaje boli uchované." + +#: contrib/admin/views/decorators.py:69 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Vyzerá to tak, že váš prehliadač nemá povolené cookies. Prosím, povoľte si " +"cookies a skúste znova načítať stránku." + +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Užívateľské meno nemože obsahovať znak '@'." + +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Vaša e-mailová adresa nie je užívateľským menom. Skúste použiť meno '%s'." + #: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." @@ -1252,43 +1373,10 @@ msgstr "Ktorý %s sa má zmeniť?" msgid "Database error" msgstr "Chyba databázy" -#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60 -msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." -msgstr "" -"Prosím, zadajte užívateľské meno a heslo. Pozor na malé a veľké písmená." - -#: contrib/admin/views/decorators.py:24 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Prihlásenie" - -#: contrib/admin/views/decorators.py:62 -msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." -msgstr "Vaša session vypršala. Prosím, príhlaste sa znovu. Nemusíte sa obávať, vaše údaje boli uchované." - -#: contrib/admin/views/decorators.py:69 -msgid "" -"Looks like your browser isn't configured to accept cookies. Please enable " -"cookies, reload this page, and try again." -msgstr "Vyzerá to tak, že váš prehliadač nemá povolené cookies. Prosím, povoľte si cookies a skúste znova načítať stránku." - -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "Užívateľské meno nemože obsahovať znak '@'." - -#: contrib/admin/views/decorators.py:85 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "Vaša e-mailová adresa nie je užívateľským menom. Skúste použiť meno '%s'." - #: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 #: contrib/admin/views/doc.py:50 msgid "tag:" -msgstr "" +msgstr "označovač:" #: contrib/admin/views/doc.py:77 contrib/admin/views/doc.py:79 #: contrib/admin/views/doc.py:81 @@ -1298,7 +1386,7 @@ msgstr "" #: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 #: contrib/admin/views/doc.py:139 msgid "view:" -msgstr "" +msgstr "prehľad:" #: contrib/admin/views/doc.py:164 #, python-format @@ -1340,9 +1428,9 @@ msgstr "počet %s" msgid "Fields on %s objects" msgstr "Polia objektu %s" -#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310 +#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313 msgid "Integer" msgstr "Celé číslo" @@ -1350,7 +1438,7 @@ msgstr "Celé číslo" msgid "Boolean (Either True or False)" msgstr "Logická hodnota (True alebo False)" -#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312 #, python-format msgid "String (up to %(maxlength)s)" msgstr "Dĺžka reťazca (maximálne do %(maxlength)s znakov)" @@ -1368,51 +1456,55 @@ msgid "Date (with time)" msgstr "Dátum (a čas)" #: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "E-mailová adresa" - -#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "Cesta k súboru" - -#: contrib/admin/views/doc.py:300 msgid "Decimal number" msgstr "Desatinné číslo" -#: contrib/admin/views/doc.py:306 +#: contrib/admin/views/doc.py:298 +msgid "E-mail address" +msgstr "E-mailová adresa" + +#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300 +#: contrib/admin/views/doc.py:303 +msgid "File path" +msgstr "Cesta k súboru" + +#: contrib/admin/views/doc.py:301 +msgid "Floating point number" +msgstr "Císlo s pohyblivou čiarkou" + +#: contrib/admin/views/doc.py:307 msgid "Boolean (Either True, False or None)" msgstr "Logická hodnota (True, False alebo None)" -#: contrib/admin/views/doc.py:307 +#: contrib/admin/views/doc.py:308 msgid "Relation to parent model" msgstr "Má vzťah k nadradenému modelu" -#: contrib/admin/views/doc.py:308 +#: contrib/admin/views/doc.py:309 msgid "Phone number" msgstr "Číslo telefónu" -#: contrib/admin/views/doc.py:313 +#: contrib/admin/views/doc.py:314 msgid "Text" msgstr "Text" -#: contrib/admin/views/doc.py:314 +#: contrib/admin/views/doc.py:315 msgid "Time" msgstr "Čas" -#: contrib/admin/views/doc.py:315 contrib/flatpages/models.py:7 +#: contrib/admin/views/doc.py:316 contrib/flatpages/models.py:7 msgid "URL" msgstr "URL" -#: contrib/admin/views/doc.py:316 +#: contrib/admin/views/doc.py:317 msgid "U.S. state (two uppercase letters)" msgstr "Štát USA (dve veľké písmena)" -#: contrib/admin/views/doc.py:317 +#: contrib/admin/views/doc.py:318 msgid "XML text" msgstr "XML text" -#: contrib/admin/views/doc.py:343 +#: contrib/admin/views/doc.py:344 #, python-format msgid "%s does not appear to be a urlpattern object" msgstr "%s nie je urlpattern objekt" @@ -1433,11 +1525,11 @@ msgstr "Dátum:" msgid "Time:" msgstr "Čas:" -#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 @@ -1445,36 +1537,36 @@ msgstr "Čas:" msgid "Documentation" msgstr "Dokumentácia" -#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/object_history.html:3 +#: contrib/admin/templates/admin/change_list.html:5 #: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/base.html:25 +#: contrib/admin/templates/admin/delete_confirmation.html:3 #: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/admin/auth/user/change_password.html:15 #: contrib/admin/templates/admin/auth/user/change_password.html:46 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/view_detail.html:4 #: contrib/admin/templates/admin_doc/bookmarklets.html:4 -#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/view_detail.html:4 #: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/template_detail.html:4 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 #: contrib/admin/templates/admin_doc/missing_docutils.html:4 #: contrib/admin/templates/admin_doc/view_index.html:5 #: contrib/admin/templates/admin_doc/model_detail.html:3 #: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/model_index.html:5 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 msgid "Change password" msgstr "Zmeniť heslo" -#: contrib/admin/templates/admin/change_list.html:6 #: contrib/admin/templates/admin/object_history.html:5 +#: contrib/admin/templates/admin/change_list.html:6 #: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/invalid_setup.html:4 #: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/admin/delete_confirmation.html:6 #: contrib/admin/templates/admin/base.html:30 +#: contrib/admin/templates/admin/delete_confirmation.html:6 #: contrib/admin/templates/admin/auth/user/change_password.html:12 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 @@ -1485,16 +1577,6 @@ msgstr "Zmeniť heslo" msgid "Home" msgstr "Začiatok" -#: contrib/admin/templates/admin/change_list.html:12 -#, python-format -msgid "Add %(name)s" -msgstr "Pridať %(name)s" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr "Podľa %(filter_title)s " - #: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/change_form.html:21 msgid "History" @@ -1521,7 +1603,50 @@ msgid "" "This object doesn't have a change history. It probably wasn't added via this " "admin site." msgstr "" -"Tento object nemá históriu vykonaných zmien. Možno nebol pridaný prostredníctvom tohoto administračného rozhrania." +"Tento object nemá históriu vykonaných zmien. Možno nebol pridaný " +"prostredníctvom tohoto administračného rozhrania." + +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Pridať %(name)s" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr "Podľa %(filter_title)s " + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Chyba servera" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Chyba servera (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Chyba servera (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Vznikla neočakávaná chyba. Prostredníctvom e-mailu bol o nej informovaný " +"správca a dá sa predpokladať, že bude v krátkej dobe odstránená. Ďakujeme za " +"pochopenie." + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"S inštaláciou alebo nastavením vašej databázy nie je niečo v poriadku. " +"Uistite sa, že ste vytvorili potrebné databázové tabuľky. Taktiež " +"skontrolujte, či má systémový užívateľ, pod ktorým beží aplikácia, právo na " +"prístup k databáze a čítanie súborov databázy." #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" @@ -1530,7 +1655,9 @@ msgstr "Choď" #: contrib/admin/templates/admin/search_form.html:10 #, python-format msgid "1 result" -msgstr "1 výsledok" +msgid_plural "%(counter)s results" +msgstr[0] "1 výsledok" +msgstr[1] "%(counter)s výsledkov" #: contrib/admin/templates/admin/search_form.html:10 #, python-format @@ -1549,30 +1676,18 @@ msgstr "Django administrácia" msgid "Django administration" msgstr "Administrácia Django" -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Chyba servera" +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filter" -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Chyba servera (500)" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Stránka nebola nájdená" -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Chyba servera (500)" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "Vznikla neočakávaná chyba. Prostredníctvom e-mailu bol o nej informovaný správca a dá sa predpokladať, že bude v krátkej dobe odstránená. Ďakujeme za pochopenie." - -#: contrib/admin/templates/admin/invalid_setup.html:8 -msgid "" -"Something's wrong with your database installation. Make sure the appropriate " -"database tables have been created, and make sure the database is readable by " -"the appropriate user." -msgstr "S inštaláciou alebo nastavením vašej databázy nie je niečo v poriadku. Uistite sa, že ste vytvorili potrebné databázové tabuľky. Taktiež skontrolujte, či má systémový užívateľ, pod ktorým beží aplikácia, právo na prístup k databáze a čítanie súborov databázy." +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Ľutujeme, ale požadovaná stránka nebola nájdená." #: contrib/admin/templates/admin/index.html:17 #, python-format @@ -1609,19 +1724,6 @@ msgstr "Moje udalosti" msgid "None available" msgstr "Nedostupné" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Stránka nebola nájdená" - -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Ľutujeme, ale požadovaná stránka nebola nájdená." - -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "Filter" - #: contrib/admin/templates/admin/change_form.html:22 msgid "View on site" msgstr "Pozrieť na stránke" @@ -1629,7 +1731,9 @@ msgstr "Pozrieť na stránke" #: contrib/admin/templates/admin/change_form.html:32 #: contrib/admin/templates/admin/auth/user/change_password.html:24 msgid "Please correct the error below." -msgstr "Prosím, opravte chyby uvedené nižšie." +msgid_plural "Please correct the errors below." +msgstr[0] "Prosím, opravte chybu uvedenú nižšie." +msgstr[1] "Prosím, opravte chyby uvedené nižšie." #: contrib/admin/templates/admin/change_form.html:50 msgid "Ordering" @@ -1639,6 +1743,10 @@ msgstr "Radenie" msgid "Order:" msgstr "Poradie:" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Vitajte," + #: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/submit_line.html:3 msgid "Delete" @@ -1650,24 +1758,24 @@ msgid "" "Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" -msgstr "Zmazanie objektu %(object_name)s '%(escaped_object)s' by spôsobilo zmazanie súvisiacich objektov, avšak vaše užívateľské práva vám neumožňujú zmazať nasledujúce typy objektov:" +msgstr "" +"Zmazanie objektu %(object_name)s '%(escaped_object)s' by spôsobilo zmazanie " +"súvisiacich objektov, avšak vaše užívateľské práva vám neumožňujú zmazať " +"nasledujúce typy objektov:" #: contrib/admin/templates/admin/delete_confirmation.html:21 #, python-format msgid "" "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " "All of the following related items will be deleted:" -msgstr "Ste si istý, že chcete zmazať objekt %(object_name)s \"%(escaped_object)s\"? " +msgstr "" +"Ste si istý, že chcete zmazať objekt %(object_name)s \"%(escaped_object)s\"? " "Zmazané budú aj všetky tieto súvisiace objekty:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" msgstr "Áno, som si istý" -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "Vitajte," - #: contrib/admin/templates/admin/submit_line.html:4 msgid "Save as new" msgstr "Uložiť ako nový" @@ -1708,7 +1816,9 @@ msgstr "Znova zadajte heslo kvôli overeniu." msgid "" "First, enter a username and password. Then, you'll be able to edit more user " "options." -msgstr "Najskôr zadajte užívateľské meno a heslo. Neskôr budete môcť upraviť ostatné užívateľské nastavnia." +msgstr "" +"Najskôr zadajte užívateľské meno a heslo. Neskôr budete môcť upraviť ostatné " +"užívateľské nastavnia." #: contrib/admin/templates/admin/auth/user/add_form.html:12 msgid "Username" @@ -1741,7 +1851,9 @@ msgstr "Obnovenie hesla" msgid "" "Forgotten your password? Enter your e-mail address below, and we'll reset " "your password and e-mail the new one to you." -msgstr "Zabudli ste svoje heslo? Zadajte svoju e-mailovú adresu, na ktorú vám bude zaslané nové heslo." +msgstr "" +"Zabudli ste svoje heslo? Zadajte svoju e-mailovú adresu, na ktorú vám bude " +"zaslané nové heslo." #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "E-mail address:" @@ -1768,13 +1880,17 @@ msgstr "Heslo bolo úspešne obnovené" msgid "" "We've e-mailed a new password to the e-mail address you submitted. You " "should be receiving it shortly." -msgstr "Bolo vám zaslané nové heslo na uvedenú adresu. Mali by ste ho obdržať v najbližšej dobe." +msgstr "" +"Bolo vám zaslané nové heslo na uvedenú adresu. Mali by ste ho obdržať v " +"najbližšej dobe." #: contrib/admin/templates/registration/password_change_form.html:12 msgid "" "Please enter your old password, for security's sake, and then enter your new " "password twice so we can verify you typed it in correctly." -msgstr "Z bezpečnostných dôvodov zadajte najskôr staré heslo a potom dva krát nové heslo, tak aby sa mohlo overiť, či nevznikol preklep." +msgstr "" +"Z bezpečnostných dôvodov zadajte najskôr staré heslo a potom dva krát nové " +"heslo, tak aby sa mohlo overiť, či nevznikol preklep." #: contrib/admin/templates/registration/password_change_form.html:17 msgid "Old password:" @@ -1840,10 +1956,16 @@ msgid "" "bookmarklets require you to be viewing the site from a computer designated\n" "as \"internal\" (talk to your system administrator if you aren't sure if\n" "your computer is \"internal\").

                      \n" -msgstr "\n" -"

                      Ak chete nainštalovať záložky, pretiahnite linku do vášho panela so záložkami\n" -"alebo kliknite pravým tlačidlom myši na linku a pridajte ju do svojich záložiek.\n" -"Následne môžete záložky použiť na stránkach. Všimnite si, že použitie niektorých záložiek vyžaduje, aby bol váš počítač pridaný do zoznamu INTERNAL_IPS. Ak nie ste si istý, že ste v tomto zozname, oslovte vášho administrátora.

                      \n" +msgstr "" +"\n" +"

                      Ak chete nainštalovať záložky, pretiahnite linku do vášho " +"panela so záložkami\n" +"alebo kliknite pravým tlačidlom myši na linku a pridajte ju do svojich " +"záložiek.\n" +"Následne môžete záložky použiť na stránkach. Všimnite si, že použitie " +"niektorých záložiek vyžaduje, aby bol váš počítač pridaný do zoznamu " +"INTERNAL_IPS. Ak nie ste si istý, že ste v tomto zozname, oslovte vášho " +"administrátora.

                      \n" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "Documentation for this page" @@ -1854,7 +1976,8 @@ msgid "" "Jumps you from any page to the documentation for the view that generates " "that page." msgstr "" -"Skočte z ľubovoľnej stránky do dokumentácie, kde je popísané, ako sa táto stránka generuje." +"Skočte z ľubovoľnej stránky do dokumentácie, kde je popísané, ako sa táto " +"stránka generuje." #: contrib/admin/templates/admin_doc/bookmarklets.html:22 msgid "Show object ID" @@ -1894,140 +2017,155 @@ msgstr "typ obsahu" msgid "content types" msgstr "typy obsahu" -#: contrib/auth/views.py:39 +#: contrib/auth/views.py:40 msgid "Logged out" msgstr "Odhlásený" -#: contrib/auth/models.py:38 contrib/auth/models.py:57 +#: contrib/auth/models.py:44 contrib/auth/models.py:64 msgid "name" msgstr "meno" -#: contrib/auth/models.py:40 +#: contrib/auth/models.py:46 msgid "codename" msgstr "codename" -#: contrib/auth/models.py:42 +#: contrib/auth/models.py:49 msgid "permission" msgstr "povolenie" -#: contrib/auth/models.py:43 contrib/auth/models.py:58 +#: contrib/auth/models.py:50 contrib/auth/models.py:65 msgid "permissions" msgstr "práva" -#: contrib/auth/models.py:60 +#: contrib/auth/models.py:68 msgid "group" msgstr "skupina" -#: contrib/auth/models.py:61 contrib/auth/models.py:100 +#: contrib/auth/models.py:69 contrib/auth/models.py:109 msgid "groups" msgstr "skupiny" -#: contrib/auth/models.py:90 +#: contrib/auth/models.py:99 msgid "username" msgstr "užívateľské meno" -#: contrib/auth/models.py:90 +#: contrib/auth/models.py:99 msgid "" "Required. 30 characters or fewer. Alphanumeric characters only (letters, " "digits and underscores)." -msgstr "Povinná položka s dĺžkou 30 znakov alebo menej. Povolené sú len alfanumerické znaky (písmená, čísla a podtržník)." +msgstr "" +"Povinná položka s dĺžkou 30 znakov alebo menej. Povolené sú len " +"alfanumerické znaky (písmená, čísla a podtržník)." -#: contrib/auth/models.py:91 +#: contrib/auth/models.py:100 msgid "first name" msgstr "krstné meno" -#: contrib/auth/models.py:92 +#: contrib/auth/models.py:101 msgid "last name" msgstr "priezvisko" -#: contrib/auth/models.py:93 +#: contrib/auth/models.py:102 msgid "e-mail address" msgstr "e-mailová adresa" -#: contrib/auth/models.py:94 +#: contrib/auth/models.py:103 msgid "password" msgstr "heslo" -#: contrib/auth/models.py:94 +#: contrib/auth/models.py:103 msgid "" "Use '[algo]$[salt]$[hexdigest]' or use the change " "password form." -msgstr "Použite '[algo]$[salt]$[hexdigest]' alebo formulár na zmenu hesla." +msgstr "" +"Použite '[algo]$[salt]$[hexdigest]' alebo formulár na " +"zmenu hesla." -#: contrib/auth/models.py:95 +#: contrib/auth/models.py:104 msgid "staff status" msgstr "zamestnanec" -#: contrib/auth/models.py:95 +#: contrib/auth/models.py:104 msgid "Designates whether the user can log into this admin site." -msgstr "Určuje, či má užívateľ oprávnenie prihlásiť sa do administračnej časti." +msgstr "" +"Určuje, či má užívateľ oprávnenie prihlásiť sa do administračnej časti." -#: contrib/auth/models.py:96 +#: contrib/auth/models.py:105 msgid "active" msgstr "aktívny" -#: contrib/auth/models.py:96 +#: contrib/auth/models.py:105 msgid "" "Designates whether this user can log into the Django admin. Unselect this " "instead of deleting accounts." -msgstr "Určuje, či je účet aktívny. Odškrtnite, ak chcete deaktivovať užívateľský účet." +msgstr "" +"Určuje, či je účet aktívny. Odškrtnite, ak chcete deaktivovať užívateľský " +"účet." -#: contrib/auth/models.py:97 +#: contrib/auth/models.py:106 msgid "superuser status" msgstr "superužívateľ" -#: contrib/auth/models.py:97 +#: contrib/auth/models.py:106 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." -msgstr "Určuje, či užívateľ získava automaticky všetky práva aj bez priameho priradenia." +msgstr "" +"Určuje, či užívateľ získava automaticky všetky práva aj bez priameho " +"priradenia." -#: contrib/auth/models.py:98 +#: contrib/auth/models.py:107 msgid "last login" msgstr "naposledy prihlásený" -#: contrib/auth/models.py:99 +#: contrib/auth/models.py:108 msgid "date joined" msgstr "dátum registrácie" -#: contrib/auth/models.py:101 +#: contrib/auth/models.py:110 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." -msgstr "Okrem ručne zadaných práv bude mať užívateľ aj všetky práva prislúchajúce skupinám, v ktorých sa nachádza." +msgstr "" +"Okrem ručne zadaných práv bude mať užívateľ aj všetky práva prislúchajúce " +"skupinám, v ktorých sa nachádza." -#: contrib/auth/models.py:102 +#: contrib/auth/models.py:111 msgid "user permissions" msgstr "užívateľské práva" -#: contrib/auth/models.py:105 +#: contrib/auth/models.py:115 msgid "user" msgstr "uživateľ" -#: contrib/auth/models.py:106 +#: contrib/auth/models.py:116 msgid "users" msgstr "užívatelia" -#: contrib/auth/models.py:111 +#: contrib/auth/models.py:122 msgid "Personal info" msgstr "Osobné údaje" -#: contrib/auth/models.py:112 +#: contrib/auth/models.py:123 msgid "Permissions" msgstr "Práva" -#: contrib/auth/models.py:113 +#: contrib/auth/models.py:124 msgid "Important dates" msgstr "Dôležité dátumy" -#: contrib/auth/models.py:114 +#: contrib/auth/models.py:125 msgid "Groups" msgstr "Skupiny" -#: contrib/auth/models.py:258 +#: contrib/auth/models.py:269 msgid "message" msgstr "správa" +#: contrib/auth/models.py:282 +msgid "AnonymousUser" +msgstr "Neregistrovaný užívateľ" + #: contrib/auth/forms.py:17 contrib/auth/forms.py:138 msgid "The two password fields didn't match." msgstr "Pole hesla a jeho potvrdenie sa nezhodujú." @@ -2040,17 +2178,21 @@ msgstr "Užívateľ s týmto užívateľským menom už existuje." msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." -msgstr "Váš prehliadač nemá povolené cookies. Cookies sú potrebné pre úspešné prihlásenie." +msgstr "" +"Váš prehliadač nemá povolené cookies. Cookies sú potrebné pre úspešné " +"prihlásenie." #: contrib/auth/forms.py:62 msgid "This account is inactive." msgstr "Účet je deaktivovaný." -#: contrib/auth/forms.py:85 +#: contrib/auth/forms.py:84 msgid "" "That e-mail address doesn't have an associated user account. Are you sure " "you've registered?" -msgstr "K danej e-mailovej adrese neexistuje užívateľský účet. Ste si istý, že ste sa zaregistrovali?" +msgstr "" +"K danej e-mailovej adrese neexistuje užívateľský účet. Ste si istý, že ste " +"sa zaregistrovali?" #: contrib/auth/forms.py:117 msgid "The two 'new password' fields didn't match." @@ -2062,17 +2204,129 @@ msgstr "Vaše staré heslo nebolo zadané správne. Prosím, zadajte heslo znova #: contrib/localflavor/uk/forms.py:18 msgid "Enter a postcode. A space is required between the two postcode parts." -msgstr "Zadajte britský poštový kód (PSČ). Medzera medzi dvomi časťami kódu je povinná." +msgstr "" +"Zadajte britský poštový kód (PSČ). Medzera medzi dvomi časťami kódu je " +"povinná." -#: contrib/localflavor/fr/forms.py:17 contrib/localflavor/it/forms.py:15 +#: contrib/localflavor/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "Vložte poštové smerovacie číslo v tvare XXXXX-XXX." + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "Telefónne číslo musí mať formát XX-XXXX-XXXX. " + +#: contrib/localflavor/br/forms.py:72 +msgid "This field requires only numbers." +msgstr "Toto pole je môže obsahovať len čísla." + +#: contrib/localflavor/br/forms.py:74 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "Toto pole môže mať najviac 11 čisiel alebo 14 písmen." + +#: contrib/localflavor/br/forms.py:84 +msgid "Invalid CPF number." +msgstr "Chybné CPF číslo." + +#: contrib/localflavor/br/forms.py:106 +msgid "This field requires at least 14 digits" +msgstr "Toto pole vyžaduje minimale 14 číslic." + +#: contrib/localflavor/br/forms.py:116 +msgid "Invalid CNPJ number." +msgstr "Chybné CNJP číslo." + +#: contrib/localflavor/au/forms.py:18 +msgid "Enter a 4 digit post code." +msgstr "Vložte 4 čísla poštového smerovacieho čísla." + +#: contrib/localflavor/fr/forms.py:17 contrib/localflavor/de/forms.py:16 #: contrib/localflavor/fi/forms.py:14 msgid "Enter a zip code in the format XXXXX." msgstr "Vložte poštové smerovacie číslo v tvare XXXXX." -#: contrib/localflavor/usa/forms.py:17 +#: contrib/localflavor/us/forms.py:18 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." msgstr "Zadajte americký poštový kód (ZIP) vo formáte XXXXX alebo XXXXX-XXXX." +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "Vložte platné U.S. číslo sociálneho poistenia vo formáte XXX-XX-XXXX." + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "Bavórsko" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "Berlín" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "" + +#: contrib/localflavor/de/forms.py:60 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "" + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "Zadajte poštové smerovacie číslo v tvare XXXXXXX alebo XXX-XXXX." + #: contrib/localflavor/jp/jp_prefectures.py:4 msgid "Hokkaido" msgstr "" @@ -2261,21 +2515,158 @@ msgstr "" msgid "Okinawa" msgstr "" -#: contrib/localflavor/jp/forms.py:21 -msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." -msgstr "Zadajte poštové smerovacie číslo v tvare XXXXXXX alebo XXX-XXXX." +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "" -#: contrib/localflavor/no/forms.py:15 +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:11 +msgid "Fribourg" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:12 +msgid "Geneva" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:13 +msgid "Glarus" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:14 +msgid "Graubuenden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:15 +msgid "Jura" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:16 +msgid "Lucerne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:17 +msgid "Neuchatel" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:18 +msgid "Nidwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:19 +msgid "Obwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:20 +msgid "Schaffhausen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:21 +msgid "Schwyz" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:22 +msgid "Solothurn" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:23 +msgid "St. Gallen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:24 +msgid "Thurgau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:25 +msgid "Ticino" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:26 +msgid "Uri" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:27 +msgid "Valais" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:28 +msgid "Vaud" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:29 +msgid "Zug" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:30 +msgid "Zurich" +msgstr "" + +#: contrib/localflavor/ch/forms.py:18 contrib/localflavor/no/forms.py:15 msgid "Enter a zip code in the format XXXX." msgstr "Vložte poštové smerovacie číslo v tvare XXXX." +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "" + +#: contrib/localflavor/is_/forms.py:16 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "Zadajte platné Islanské číslo v tvare XXXXXX-XXXX." + +#: contrib/localflavor/is_/forms.py:30 +msgid "The Icelandic identification number is not valid." +msgstr "" + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "Zadajte platné poštové smerovacie číslo." + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "Vložte platné číslo sociálneho poistenia ." + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "Zadajte platné VAT číslo." + #: contrib/localflavor/no/forms.py:36 msgid "Enter a valid Norwegian social security number." -msgstr "Vložte platné nórske číslo sociálneho poistenia (social security number)." +msgstr "" +"Vložte platné nórske číslo sociálneho poistenia (social security number)." -#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:46 +#: contrib/localflavor/cl/forms.py:21 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "" + +#: contrib/localflavor/cl/forms.py:26 +msgid "Enter valid a Chilean RUT" +msgstr "" + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 msgid "Enter a valid Finnish social security number." -msgstr "Vložte platné fínske číslo sociálneho poistenia (social security number)." +msgstr "" +"Vložte platné fínske číslo sociálneho poistenia (social security number)." #: contrib/sessions/models.py:68 msgid "session key" @@ -2301,7 +2692,8 @@ msgstr "sessions" msgid "" "Example: '/about/contact/'. Make sure to have leading and trailing slashes." msgstr "" -"Príklad: '/about/contact/'. Uistite sa, že adresa obsahuje na začiatku a na konci.lomítka." +"Príklad: '/about/contact/'. Uistite sa, že adresa obsahuje na začiatku a na " +"konci.lomítka." #: contrib/flatpages/models.py:9 msgid "title" @@ -2324,8 +2716,8 @@ msgid "" "Example: 'flatpages/contact_page.html'. If this isn't provided, the system " "will use 'flatpages/default.html'." msgstr "" -"Príklad: 'flatpages/contact_page'. Ak táto šablóna neexistuje, systém použije " -"'flatpages/default'." +"Príklad: 'flatpages/contact_page'. Ak táto šablóna neexistuje, systém " +"použije 'flatpages/default'." #: contrib/flatpages/models.py:14 msgid "registration required" @@ -2497,27 +2889,54 @@ msgstr "Dec." #: utils/timesince.py:12 msgid "year" -msgstr "rok" +msgid_plural "years" +msgstr[0] "rok" +msgstr[1] "roky" #: utils/timesince.py:13 msgid "month" -msgstr "mesiac" +msgid_plural "months" +msgstr[0] "mesiac" +msgstr[1] "mesiacov" #: utils/timesince.py:14 msgid "week" -msgstr "týždeň" +msgid_plural "weeks" +msgstr[0] "týždeň" +msgstr[1] "týždňov" #: utils/timesince.py:15 msgid "day" -msgstr "deň" +msgid_plural "days" +msgstr[0] "deň" +msgstr[1] "dni" #: utils/timesince.py:16 msgid "hour" -msgstr "hodina" +msgid_plural "hours" +msgstr[0] "hodina" +msgstr[1] "hodín" #: utils/timesince.py:17 msgid "minute" -msgstr "minúta" +msgid_plural "minutes" +msgstr[0] "minúta" +msgstr[1] "minúty" + +#: utils/timesince.py:40 +#, python-format +msgid "%d milliseconds" +msgstr "" + +#: utils/timesince.py:41 +#, python-format +msgid "%(number)d %(type)s" +msgstr "" + +#: utils/timesince.py:47 +#, python-format +msgid ", %(number)d %(type)s" +msgstr "" #: utils/dateformat.py:40 msgid "p.m." @@ -2543,23 +2962,23 @@ msgstr "polnoc" msgid "noon" msgstr "poludnie" -#: utils/translation/trans_real.py:362 +#: utils/translation/trans_real.py:358 msgid "DATE_FORMAT" msgstr "" -#: utils/translation/trans_real.py:363 +#: utils/translation/trans_real.py:359 msgid "DATETIME_FORMAT" msgstr "" -#: utils/translation/trans_real.py:364 +#: utils/translation/trans_real.py:360 msgid "TIME_FORMAT" msgstr "" -#: utils/translation/trans_real.py:380 +#: utils/translation/trans_real.py:376 msgid "YEAR_MONTH_FORMAT" msgstr "" -#: utils/translation/trans_real.py:381 +#: utils/translation/trans_real.py:377 msgid "MONTH_DAY_FORMAT" msgstr "" @@ -2567,3 +2986,24 @@ msgstr "" msgid "yes,no,maybe" msgstr "áno,nie,možno" +#: template/defaultfilters.py:520 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "" +msgstr[1] "" + +#: template/defaultfilters.py:522 +#, python-format +msgid "%.1f KB" +msgstr "" + +#: template/defaultfilters.py:524 +#, python-format +msgid "%.1f MB" +msgstr "" + +#: template/defaultfilters.py:525 +#, python-format +msgid "%.1f GB" +msgstr "" diff --git a/django/conf/locale/sv/LC_MESSAGES/django.mo b/django/conf/locale/sv/LC_MESSAGES/django.mo index cd91c18cb7..5654541a4e 100644 Binary files a/django/conf/locale/sv/LC_MESSAGES/django.mo and b/django/conf/locale/sv/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/sv/LC_MESSAGES/django.po b/django/conf/locale/sv/LC_MESSAGES/django.po index befde10e77..db542460e6 100644 --- a/django/conf/locale/sv/LC_MESSAGES/django.po +++ b/django/conf/locale/sv/LC_MESSAGES/django.po @@ -2,17 +2,13 @@ # Copyright (C) 2005 # This file is distributed under the same license as the Django package. # -# -# Robin Sonefors , 2005. -# Ludvig Ericson , 2007. -# Mikko Hellsing , 2007. msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2007-03-06 00:17+0100\n" +"POT-Creation-Date: 2007-06-15 17:35+0200\n" "PO-Revision-Date: 2007-03-06 10:30+0100\n" -"Last-Translator: Mikko Hellsing \n" +"Last-Translator: Ludvig Ericson \n" "Language-Team: Django I18N \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,62 +17,62 @@ msgstr "" "X-Poedit-Language: Swedish\n" "X-Poedit-Country: SWEDEN\n" -#: oldforms/__init__.py:352 db/models/fields/__init__.py:116 -#: db/models/fields/__init__.py:273 db/models/fields/__init__.py:609 -#: db/models/fields/__init__.py:620 newforms/models.py:177 -#: newforms/fields.py:78 newforms/fields.py:374 newforms/fields.py:450 -#: newforms/fields.py:461 +#: oldforms/__init__.py:357 db/models/fields/__init__.py:121 +#: db/models/fields/__init__.py:278 db/models/fields/__init__.py:675 +#: db/models/fields/__init__.py:686 newforms/models.py:185 +#: newforms/fields.py:87 newforms/fields.py:444 newforms/fields.py:520 +#: newforms/fields.py:531 msgid "This field is required." -msgstr "Detta fältet är obligatoriskt." +msgstr "Det här fältet är obligatoriskt." -#: oldforms/__init__.py:387 +#: oldforms/__init__.py:392 #, python-format msgid "Ensure your text is less than %s character." msgid_plural "Ensure your text is less than %s characters." msgstr[0] "Se till att din text är kortare än %s tecken." msgstr[1] "Se till att din text är kortare än %s tecken." -#: oldforms/__init__.py:392 +#: oldforms/__init__.py:397 msgid "Line breaks are not allowed here." msgstr "Radbrytningar är inte tillåtna här." -#: oldforms/__init__.py:493 oldforms/__init__.py:566 oldforms/__init__.py:605 +#: oldforms/__init__.py:498 oldforms/__init__.py:571 oldforms/__init__.py:610 #, python-format msgid "Select a valid choice; '%(data)s' is not in %(choices)s." msgstr "Välj ett giltigt alternativ. '%(data)s' finns inte bland %(choices)s." -#: oldforms/__init__.py:572 newforms/widgets.py:170 +#: oldforms/__init__.py:577 newforms/widgets.py:182 #: contrib/admin/filterspecs.py:150 msgid "Unknown" msgstr "Okänt" -#: oldforms/__init__.py:572 newforms/widgets.py:170 +#: oldforms/__init__.py:577 newforms/widgets.py:182 #: contrib/admin/filterspecs.py:143 msgid "Yes" msgstr "Ja" -#: oldforms/__init__.py:572 newforms/widgets.py:170 +#: oldforms/__init__.py:577 newforms/widgets.py:182 #: contrib/admin/filterspecs.py:143 msgid "No" msgstr "Nej" -#: oldforms/__init__.py:667 core/validators.py:173 core/validators.py:444 +#: oldforms/__init__.py:672 core/validators.py:175 core/validators.py:453 msgid "No file was submitted. Check the encoding type on the form." -msgstr "Ingen fil skickad. Kontrollera enkodningen i form taggen." +msgstr "Ingen fil skickades. Kontrollera kodningnstypen i formen." -#: oldforms/__init__.py:669 +#: oldforms/__init__.py:674 msgid "The submitted file is empty." msgstr "Den insända filen är tom." -#: oldforms/__init__.py:725 +#: oldforms/__init__.py:730 msgid "Enter a whole number between -32,768 and 32,767." msgstr "Fyll i ett heltal mellan -32768 och 32767." -#: oldforms/__init__.py:735 +#: oldforms/__init__.py:740 msgid "Enter a positive number." msgstr "Fyll i ett positivt heltal." -#: oldforms/__init__.py:745 +#: oldforms/__init__.py:750 msgid "Enter a whole number between 0 and 32,767." msgstr "Fyll i ett heltal mellan 0 och 32767." @@ -90,35 +86,45 @@ msgstr "%(object)s med typen %(type)s finns redan för %(field)s." msgid "and" msgstr "och" -#: db/models/fields/__init__.py:42 +#: db/models/fields/__init__.py:46 #, python-format msgid "%(optname)s with this %(fieldname)s already exists." msgstr "%(optname)s med det här %(fieldname)s finns redan." -#: db/models/fields/__init__.py:366 +#: db/models/fields/__init__.py:373 msgid "This value must be an integer." msgstr "Det här värdet måste vara ett heltal." -#: db/models/fields/__init__.py:401 +#: db/models/fields/__init__.py:408 msgid "This value must be either True or False." msgstr "Det här värdet måste vara True eller False" -#: db/models/fields/__init__.py:422 +#: db/models/fields/__init__.py:429 msgid "This field cannot be null." -msgstr "Det här fältet får inte vara null." +msgstr "Det här fältet kan inte vara null." -#: db/models/fields/__init__.py:456 core/validators.py:147 +#: db/models/fields/__init__.py:463 core/validators.py:149 msgid "Enter a valid date in YYYY-MM-DD format." -msgstr "Fyll i ett giltigt datum i formatet ÅÅÅÅ-MM-DD." +msgstr "Fyll i ett giltigt datum i ÅÅÅÅ-MM-DD format." -#: db/models/fields/__init__.py:525 core/validators.py:156 +#: db/models/fields/__init__.py:532 core/validators.py:158 msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." -msgstr "Fyll i en giltig tidpunkt i formatet ÅÅÅÅ-MM-DD HH:MM" +msgstr "Fyll i en giltig tidpunkt i ÅÅÅÅ-MM-DD HH:MM format" -#: db/models/fields/__init__.py:629 +#: db/models/fields/__init__.py:592 +#, fuzzy +msgid "This value must be a decimal number." +msgstr "Det här värdet måste vara ett heltal." + +#: db/models/fields/__init__.py:695 msgid "Enter a valid filename." msgstr "Fyll i ett giltigt filnamn." +#: db/models/fields/__init__.py:818 +#, fuzzy +msgid "This value must be either None, True or False." +msgstr "Det här värdet måste vara antingen True eller False." + #: db/models/fields/related.py:53 #, python-format msgid "Please enter a valid %s." @@ -129,15 +135,20 @@ msgid "Separate multiple IDs with commas." msgstr "Separera flera ID:n med kommatecken." #: db/models/fields/related.py:644 -msgid "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "Håll ner \"Control\", eller \"Command\" på en Mac, för att välja mer än en." +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "" +"Håll ner \"Control\", eller \"Command\" på en Mac, för att välja mer än en." #: db/models/fields/related.py:691 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." -msgid_plural "Please enter valid %(self)s IDs. The values %(value)r are invalid." -msgstr[0] "Var god och fyll giltiga %(self)s ID-nummer. Värdet %(value)r är ogiltigt." -msgstr[1] "Var god och fyll giltiga %(self)s ID-nummer. Värdena %(value)r är ogiltiga." +msgid_plural "" +"Please enter valid %(self)s IDs. The values %(value)r are invalid." +msgstr[0] "" +"Var god och fyll giltiga %(self)s ID-nummer. Värdet %(value)r är ogiltigt." +msgstr[1] "" +"Var god och fyll giltiga %(self)s ID-nummer. Värdena %(value)r är ogiltiga." #: conf/global_settings.py:39 msgid "Arabic" @@ -148,150 +159,167 @@ msgid "Bengali" msgstr "Bengaliska" #: conf/global_settings.py:41 +#, fuzzy +msgid "Bulgarian" +msgstr "Ungerska" + +#: conf/global_settings.py:42 msgid "Catalan" msgstr "Katalanska" -#: conf/global_settings.py:42 +#: conf/global_settings.py:43 msgid "Czech" msgstr "Tjeckiska" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "Welsh" msgstr "Walesiska" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Danish" msgstr "Danska" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "German" msgstr "Tyska" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Greek" msgstr "Grekiska" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "English" msgstr "Engelska" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Spanish" msgstr "Spanska" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Argentinean Spanish" msgstr "Argentisk Spanska" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "Finnish" msgstr "Finska" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "French" msgstr "Franska" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "Galician" msgstr "Galisiska" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Hungarian" msgstr "Ungerska" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Hebrew" msgstr "Hebreiska" -#: conf/global_settings.py:55 +#: conf/global_settings.py:56 msgid "Icelandic" msgstr "Isländska" -#: conf/global_settings.py:56 +#: conf/global_settings.py:57 msgid "Italian" msgstr "Italienska" -#: conf/global_settings.py:57 +#: conf/global_settings.py:58 msgid "Japanese" msgstr "Japanska" -#: conf/global_settings.py:58 +#: conf/global_settings.py:59 +msgid "Korean" +msgstr "Koreanska" + +#: conf/global_settings.py:60 msgid "Kannada" msgstr "Kannada" -#: conf/global_settings.py:59 +#: conf/global_settings.py:61 msgid "Latvian" msgstr "Lettiska" -#: conf/global_settings.py:60 +#: conf/global_settings.py:62 msgid "Macedonian" msgstr "Makedonska" -#: conf/global_settings.py:61 +#: conf/global_settings.py:63 msgid "Dutch" msgstr "Holländska" -#: conf/global_settings.py:62 +#: conf/global_settings.py:64 msgid "Norwegian" msgstr "Norska" -#: conf/global_settings.py:63 +#: conf/global_settings.py:65 msgid "Polish" msgstr "Polska" -#: conf/global_settings.py:64 +#: conf/global_settings.py:66 +msgid "Portugese" +msgstr "Portugisiska" + +#: conf/global_settings.py:67 msgid "Brazilian" msgstr "Brasilianska" -#: conf/global_settings.py:65 +#: conf/global_settings.py:68 msgid "Romanian" msgstr "Rumänska" -#: conf/global_settings.py:66 +#: conf/global_settings.py:69 msgid "Russian" msgstr "Ryska" -#: conf/global_settings.py:67 +#: conf/global_settings.py:70 msgid "Slovak" msgstr "Slovakiska" -#: conf/global_settings.py:68 +#: conf/global_settings.py:71 msgid "Slovenian" msgstr "Slovenska" -#: conf/global_settings.py:69 +#: conf/global_settings.py:72 msgid "Serbian" msgstr "Serbiska" -#: conf/global_settings.py:70 +#: conf/global_settings.py:73 msgid "Swedish" msgstr "Svenska" -#: conf/global_settings.py:71 +#: conf/global_settings.py:74 msgid "Tamil" msgstr "Tamil" -#: conf/global_settings.py:72 +#: conf/global_settings.py:75 +msgid "Telugu" +msgstr "Telugu" + +#: conf/global_settings.py:76 msgid "Turkish" msgstr "Turkiska" -#: conf/global_settings.py:73 +#: conf/global_settings.py:77 msgid "Ukrainian" msgstr "Ukrainska" -#: conf/global_settings.py:74 +#: conf/global_settings.py:78 msgid "Simplified Chinese" msgstr "Förenklad Kinesiska" -#: conf/global_settings.py:75 +#: conf/global_settings.py:79 msgid "Traditional Chinese" msgstr "Traditionell Kinesiska" -#: core/validators.py:64 +#: core/validators.py:65 msgid "This value must contain only letters, numbers and underscores." msgstr "Det här värdet får bara innehålla bokstäver, tal och understräck." -#: core/validators.py:68 +#: core/validators.py:69 msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." @@ -299,97 +327,99 @@ msgstr "" "Det här värdet får bara innehålla bokstäver, siffror, understräck, sträck " "och snedsträck" -#: core/validators.py:72 +#: core/validators.py:73 msgid "This value must contain only letters, numbers, underscores or hyphens." -msgstr "Det här värdet får bara innehålla bokstäver, siffror, understräck eller sträck ." +msgstr "" +"Det här värdet får bara innehålla bokstäver, siffror, understräck eller " +"bindessträck." -#: core/validators.py:76 +#: core/validators.py:77 msgid "Uppercase letters are not allowed here." msgstr "Stora bokstäver är inte tillåtna här." -#: core/validators.py:80 +#: core/validators.py:81 msgid "Lowercase letters are not allowed here." msgstr "Små bokstäver är inte tillåtna här." -#: core/validators.py:87 +#: core/validators.py:88 msgid "Enter only digits separated by commas." msgstr "Fyll enbart i siffror avskilda med kommatecken." -#: core/validators.py:99 +#: core/validators.py:100 msgid "Enter valid e-mail addresses separated by commas." msgstr "Fyll i giltiga e-mailadresser avskilda med kommatecken." -#: core/validators.py:103 +#: core/validators.py:104 msgid "Please enter a valid IP address." msgstr "Var god fyll i en giltigt IP-adress." -#: core/validators.py:107 +#: core/validators.py:108 msgid "Empty values are not allowed here." msgstr "Tomma värden är inte tillåtna här." -#: core/validators.py:111 +#: core/validators.py:112 msgid "Non-numeric characters aren't allowed here." msgstr "Icke-numeriska tecken är inte tillåtna här." -#: core/validators.py:115 +#: core/validators.py:116 msgid "This value can't be comprised solely of digits." msgstr "Det här värdet kan inte enbart bestå av siffror." -#: core/validators.py:120 newforms/fields.py:126 +#: core/validators.py:121 newforms/fields.py:135 msgid "Enter a whole number." msgstr "Fyll i ett heltal." -#: core/validators.py:124 +#: core/validators.py:125 msgid "Only alphabetical characters are allowed here." msgstr "Endast bokstäver är tillåtna här." -#: core/validators.py:139 +#: core/validators.py:140 msgid "Year must be 1900 or later." msgstr "Årtal måste vara 1900 eller senare." -#: core/validators.py:143 -#, python-format -msgid "Invalid date: %s." +#: core/validators.py:144 +#, fuzzy, python-format +msgid "Invalid date: %s" msgstr "Felaktigt datum: %s" -#: core/validators.py:152 +#: core/validators.py:154 msgid "Enter a valid time in HH:MM format." -msgstr "Fyll i en giltig tid i formatet HH:MM" +msgstr "Fyll i en giltig tid i HH:MM format." -#: core/validators.py:161 newforms/fields.py:269 +#: core/validators.py:163 newforms/fields.py:339 msgid "Enter a valid e-mail address." msgstr "Fyll i en giltig e-mailadress." -#: core/validators.py:177 +#: core/validators.py:179 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -"Ladda upp en giltig bild. Filen du laddade upp var antingen ingen bild eller en " -"korrupt bild." +"Ladda upp en giltig bild. Filen du laddade upp var antingen ingen bild eller " +"en korrupt bild." -#: core/validators.py:184 +#: core/validators.py:186 #, python-format msgid "The URL %s does not point to a valid image." -msgstr "URL:en %s pekar inte på en giltig bild." +msgstr "URL:en %s pekar inte mot en giltig bild." -#: core/validators.py:188 +#: core/validators.py:190 #, python-format msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." msgstr "" -"Telefonnummer måste vara i det amerikanska formatet XXX-XXX-XXXX. \"%s\" är " +"Telefonnummer måste vara i det amerikanska XXX-XXX-XXXX formated. \"%s\" är " "ogiltigt." -#: core/validators.py:196 +#: core/validators.py:198 #, python-format msgid "The URL %s does not point to a valid QuickTime video." msgstr "URL:en %s pekar inte på en giltig QuickTime-video." -#: core/validators.py:200 +#: core/validators.py:202 msgid "A valid URL is required." msgstr "En giltig URL krävs." -#: core/validators.py:214 +#: core/validators.py:216 #, python-format msgid "" "Valid HTML is required. Specific errors are:\n" @@ -398,133 +428,146 @@ msgstr "" "Giltig HTML krävs. Specifika fel är:\n" "%s" -#: core/validators.py:221 +#: core/validators.py:223 #, python-format msgid "Badly formed XML: %s" msgstr "Missformad XML: %s" -#: core/validators.py:238 +#: core/validators.py:240 #, python-format msgid "Invalid URL: %s" msgstr "Felaktig URL: %s" -#: core/validators.py:243 core/validators.py:245 +#: core/validators.py:245 core/validators.py:247 #, python-format msgid "The URL %s is a broken link." msgstr "URL:en %s är en trasig länk." -#: core/validators.py:251 +#: core/validators.py:253 msgid "Enter a valid U.S. state abbreviation." -msgstr "Fyll i en giltig förkortning för en amerikansk delstat" +msgstr "Fyll i en giltig förkortning för en amerikansk delstat." -#: core/validators.py:265 +#: core/validators.py:267 #, python-format msgid "Watch your mouth! The word %s is not allowed here." msgid_plural "Watch your mouth! The words %s are not allowed here." msgstr[0] "Akta din tunga! Ordet %s är inte tillåtet här." msgstr[1] "Akta din tunga! Orden %s är inte tillåtna här." -#: core/validators.py:272 +#: core/validators.py:274 #, python-format msgid "This field must match the '%s' field." msgstr "Det här fältet måste matcha fältet '%s'." -#: core/validators.py:291 +#: core/validators.py:293 msgid "Please enter something for at least one field." -msgstr "Fyll i något i minst ett fält." +msgstr "Var god fyll i minst ett fält." -#: core/validators.py:300 core/validators.py:311 +#: core/validators.py:302 core/validators.py:313 msgid "Please enter both fields or leave them both empty." -msgstr "Fyll antingen i båda fälten, eller lämna båda tomma" +msgstr "Fyll antingen i båda fälten, eller lämna båda tomma." -#: core/validators.py:319 +#: core/validators.py:321 #, python-format msgid "This field must be given if %(field)s is %(value)s" msgstr "Det är fältet måste anges om %(field)s är %(value)s" -#: core/validators.py:332 +#: core/validators.py:334 #, python-format msgid "This field must be given if %(field)s is not %(value)s" msgstr "Det här fältet måste anges om %(field)s inte är %(value)s" -#: core/validators.py:351 +#: core/validators.py:353 msgid "Duplicate values are not allowed." msgstr "Upprepade värden är inte tillåtna." -#: core/validators.py:366 -#, python-format -msgid "This value must be between %(lower)s and %(upper)s." -msgstr "Det här värdet måste mellan %(lower)s och %(upper)s." - #: core/validators.py:368 #, python-format -msgid "This value must be at least %s." -msgstr "Det här värdet måste minsta vara %s." +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "Det här värdet måste vara mellan %(lower)s och %(upper)s." #: core/validators.py:370 #, python-format +msgid "This value must be at least %s." +msgstr "Det här värdet måste vara minst %s." + +#: core/validators.py:372 +#, python-format msgid "This value must be no more than %s." msgstr "Det här värdet får inte vara mer än %s." -#: core/validators.py:406 +#: core/validators.py:408 #, python-format msgid "This value must be a power of %s." -msgstr "Det här värdet måste vara en multipel av %s." +msgstr "Det här värdet måste vara en potens av %s." #: core/validators.py:417 msgid "Please enter a valid decimal number." msgstr "Fyll i ett giltigt decimaltal." -#: core/validators.py:421 +#: core/validators.py:423 #, python-format msgid "Please enter a valid decimal number with at most %s total digit." -msgid_plural "Please enter a valid decimal number with at most %s total digits." -msgstr[0] "Fyll i ett giltigt decimaltal med mindre än %s siffra totalt." -msgstr[1] "Fyll i ett giltigt decimaltal med mindre än %s siffror totalt." +msgid_plural "" +"Please enter a valid decimal number with at most %s total digits." +msgstr[0] "Fyll i ett giltigt decimaltal med högst %s siffra totalt." +msgstr[1] "Fyll i ett giltigt decimaltal med högst %s siffror totalt." -#: core/validators.py:424 +#: core/validators.py:426 #, python-format -msgid "Please enter a valid decimal number with a whole part of at most %s digit." -msgid_plural "Please enter a valid decimal number with a whole part of at most %s digits." -msgstr[0] "Fyll i ett giltigt decimaltal med en heltalsdel som inte är mer än %s siffra." -msgstr[1] "Fyll i ett giltigt decimaltal med en heltalsdel som inte är mer än %s siffror." +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr[0] "" +"Fyll i ett giltigt decimaltal med en heltalsdel som högst är %s siffra." +msgstr[1] "" +"Fyll i ett giltigt decimaltal med en heltalsdel som högst är %s siffror." -#: core/validators.py:427 +#: core/validators.py:429 #, python-format msgid "Please enter a valid decimal number with at most %s decimal place." -msgid_plural "Please enter a valid decimal number with at most %s decimal places." -msgstr[0] "Fyll i ett giltigt decimaltal med %s decimal som mest." -msgstr[1] "Fyll i ett giltigt decimaltal med %s decimaler som mest." +msgid_plural "" +"Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "Fyll i ett giltigt decimaltal med högst %s decimal." +msgstr[1] "Fyll i ett giltigt decimaltal med högst %s decimaler." #: core/validators.py:437 +msgid "Please enter a valid floating point number." +msgstr "Fyll i ett giltigt flyttal." + +#: core/validators.py:446 #, python-format msgid "Make sure your uploaded file is at least %s bytes big." msgstr "Se till att filen du laddade upp är minst %s bytes stor." -#: core/validators.py:438 +#: core/validators.py:447 #, python-format msgid "Make sure your uploaded file is at most %s bytes big." msgstr "Se till att filen du laddade upp är som mest %s bytes stor." -#: core/validators.py:455 +#: core/validators.py:464 msgid "The format for this field is wrong." msgstr "Formatet på det här fältet är fel." -#: core/validators.py:470 +#: core/validators.py:479 msgid "This field is invalid." msgstr "Det här fältet är ogiltigt." -#: core/validators.py:506 +#: core/validators.py:515 #, python-format msgid "Could not retrieve anything from %s." msgstr "Kunde inte hämta något från %s." -#: core/validators.py:509 +#: core/validators.py:518 #, python-format -msgid "The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." -msgstr "URL:en %(url)s returnerade den ogiltiga Content-Type headern '%(contenttype)s'" +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "" +"URL:en %(url)s returnerade den ogiltiga Content-Type headern '%(contenttype)" +"s'" -#: core/validators.py:542 +#: core/validators.py:551 #, python-format msgid "" "Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " @@ -533,7 +576,7 @@ msgstr "" "Var god avsluta den oavslutade taggen %(tag)s på rad %(line)s. (Raden börjar " "med \"%(start)s\".)" -#: core/validators.py:546 +#: core/validators.py:555 #, python-format msgid "" "Some text starting on line %(line)s is not allowed in that context. (Line " @@ -542,7 +585,7 @@ msgstr "" "En del text från rad %(line)s är inte tillåtet i det sammanhanget. (Raden " "börjar med \"%(start)s\".)" -#: core/validators.py:551 +#: core/validators.py:560 #, python-format msgid "" "\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" @@ -551,7 +594,7 @@ msgstr "" "\"%(attr)s\" på rad %(line)s är inte ett giltigt attribut. (Raden startar " "med \"%(start)s\".)" -#: core/validators.py:556 +#: core/validators.py:565 #, python-format msgid "" "\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" @@ -560,7 +603,7 @@ msgstr "" "\"<%(tag)s>\" på rad %(line)s är en ogiltig tagg. (Raden börjar med \"%" "(start)s\".)" -#: core/validators.py:560 +#: core/validators.py:569 #, python-format msgid "" "A tag on line %(line)s is missing one or more required attributes. (Line " @@ -569,7 +612,7 @@ msgstr "" "En tagg på rad %(line)s saknar en eller flera nödvändiga attribut. (Raden " "börjar med \"%(start)s\".)" -#: core/validators.py:565 +#: core/validators.py:574 #, python-format msgid "" "The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " @@ -580,11 +623,13 @@ msgstr "" #: views/generic/create_update.py:43 #, python-format +#, fuzzy msgid "The %(verbose_name)s was created successfully." msgstr "%(verbose_name)s skapades framgångsrikt." #: views/generic/create_update.py:117 #, python-format +#, fuzzy msgid "The %(verbose_name)s was updated successfully." msgstr " %(verbose_name)s uppdaterades framgångsrikt." @@ -593,258 +638,160 @@ msgstr " %(verbose_name)s uppdaterades framgångsrikt." msgid "The %(verbose_name)s was deleted." msgstr "%(verbose_name)s togs bort." -#: newforms/models.py:164 newforms/fields.py:360 +#: newforms/models.py:172 newforms/fields.py:432 msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga alternativ." +msgstr "" +"Välj ett giltigt alternativ. Det valet finns inte bland tillgängliga " +"alternativ." -#: newforms/models.py:181 newforms/fields.py:378 newforms/fields.py:454 +#: newforms/models.py:189 newforms/fields.py:448 newforms/fields.py:524 msgid "Enter a list of values." msgstr "Fyll i en lista med värden." -#: newforms/models.py:187 newforms/fields.py:387 +#: newforms/models.py:195 newforms/fields.py:457 #, python-format msgid "Select a valid choice. %s is not one of the available choices." -msgstr "Välj ett giltigt alternativ. '%s' finns inte bland tillgängliga alternativ." +msgstr "" +"Välj ett giltigt alternativ. '%s' finns inte bland tillgängliga alternativ." -#: newforms/fields.py:101 newforms/fields.py:254 +#: newforms/fields.py:110 newforms/fields.py:324 #, python-format msgid "Ensure this value has at most %d characters." -msgstr "Se till att din text inte har mer än %d tecken." +msgstr "Säkerställ att detta värdet har högst %d tecken." -#: newforms/fields.py:103 newforms/fields.py:256 +#: newforms/fields.py:112 newforms/fields.py:326 #, python-format msgid "Ensure this value has at least %d characters." -msgstr "Se till att din text har minst %d tecken." +msgstr "Säkerställ att detta värdet har minst %d tecken." -#: newforms/fields.py:128 +#: newforms/fields.py:137 newforms/fields.py:160 newforms/fields.py:192 #, python-format msgid "Ensure this value is less than or equal to %s." -msgstr "Se till att detta värdet är mindre än eller lika med %s." +msgstr "Säkerställ att detta värdet är mindre eller lika med %s." -#: newforms/fields.py:130 +#: newforms/fields.py:139 newforms/fields.py:162 newforms/fields.py:194 #, python-format msgid "Ensure this value is greater than or equal to %s." -msgstr "Se till att detta värde är större eller lika med %s." +msgstr "Säkerställ att detta värdet är mer eller lika med %s." -#: newforms/fields.py:163 +#: newforms/fields.py:158 newforms/fields.py:186 +msgid "Enter a number." +msgstr "Fyll i ett tal." + +#: newforms/fields.py:196 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "Säkerställ att det inte finns mer än %s siffror totalt." + +#: newforms/fields.py:198 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "Säkerställ att det inte finns mer än %s decimaler." + +#: newforms/fields.py:200 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "Säkerställ att det inte finns mer än %s siffror före kommatecknet." + +#: newforms/fields.py:233 msgid "Enter a valid date." msgstr "Fyll i ett giltigt datum." -#: newforms/fields.py:190 +#: newforms/fields.py:260 msgid "Enter a valid time." msgstr "Fyll i en giltig tid." -#: newforms/fields.py:226 +#: newforms/fields.py:296 msgid "Enter a valid date/time." msgstr "Fyll i ett giltigt datum/tid." -#: newforms/fields.py:240 +#: newforms/fields.py:310 msgid "Enter a valid value." msgstr "Fyll i ett giltigt värde." -#: newforms/fields.py:287 newforms/fields.py:309 +#: newforms/fields.py:357 newforms/fields.py:379 msgid "Enter a valid URL." msgstr "Fyll i ett giltigt URL." -#: newforms/fields.py:311 +#: newforms/fields.py:381 msgid "This URL appears to be a broken link." -msgstr "Detta URL verkar vara en trasig länk." +msgstr "Denna URL verkar vara en trasig länk." -#: contrib/contenttypes/models.py:26 -msgid "python model class name" -msgstr "python modell klass namn" - -#: contrib/contenttypes/models.py:29 -msgid "content type" -msgstr "innehållstyp" - -#: contrib/contenttypes/models.py:30 -msgid "content types" -msgstr "innehållstyper" - -#: contrib/auth/views.py:39 -msgid "Logged out" -msgstr "Utloggad" - -#: contrib/auth/models.py:38 contrib/auth/models.py:57 -msgid "name" -msgstr "namn" - -#: contrib/auth/models.py:40 -msgid "codename" -msgstr "kodnamn" - -#: contrib/auth/models.py:42 -msgid "permission" -msgstr "rättighet" - -#: contrib/auth/models.py:43 contrib/auth/models.py:58 -msgid "permissions" -msgstr "rättigheter" - -#: contrib/auth/models.py:60 -msgid "group" -msgstr "grupp" - -#: contrib/auth/models.py:61 contrib/auth/models.py:100 -msgid "groups" -msgstr "grupper" - -#: contrib/auth/models.py:90 -msgid "username" -msgstr "användarnamn" - -#: contrib/auth/models.py:90 -msgid "" -"Required. 30 characters or fewer. Alphanumeric characters only (letters, " -"digits and underscores)." -msgstr "Obligatorisk. 30 tecken eller mindre. Endast bokstäver, siffror eller understräck." - -#: contrib/auth/models.py:91 -msgid "first name" -msgstr "förnamn" - -#: contrib/auth/models.py:92 -msgid "last name" -msgstr "efternamn" - -#: contrib/auth/models.py:93 -msgid "e-mail address" -msgstr "e-mailadress" - -#: contrib/auth/models.py:94 -msgid "password" -msgstr "lösenord" - -#: contrib/auth/models.py:94 -msgid "" -"Use '[algo]$[salt]$[hexdigest]' or use the change " -"password form." -msgstr "Använd '[algo]$[salt]$[hexdigest]' eller använd Ändra lösenord." - -#: contrib/auth/models.py:95 -msgid "staff status" -msgstr "personalstatus" - -#: contrib/auth/models.py:95 -msgid "Designates whether the user can log into this admin site." -msgstr "Avgör om användaren kan logga in på den här admin-siten." - -#: contrib/auth/models.py:96 -msgid "active" -msgstr "aktiv" - -#: contrib/auth/models.py:96 -msgid "" -"Designates whether this user can log into the Django admin. Unselect this " -"instead of deleting accounts." +#: contrib/humanize/templatetags/humanize.py:17 +msgid "th" msgstr "" -"Avgör om användaren kan logga in till Django admin. Av-markera denna " -"istället för att ta bort konton." -#: contrib/auth/models.py:97 -msgid "superuser status" -msgstr "superanvändare" - -#: contrib/auth/models.py:97 -msgid "" -"Designates that this user has all permissions without explicitly assigning " -"them." +#: contrib/humanize/templatetags/humanize.py:17 +msgid "st" msgstr "" -"Bestämmer att användaren har alla rättigheter utan att uttryckligen tilldela " -"dem" -#: contrib/auth/models.py:98 -msgid "last login" -msgstr "senaste inloggning" - -#: contrib/auth/models.py:99 -msgid "date joined" -msgstr "registreringsdatum" - -#: contrib/auth/models.py:101 -msgid "" -"In addition to the permissions manually assigned, this user will also get " -"all permissions granted to each group he/she is in." +#: contrib/humanize/templatetags/humanize.py:17 +msgid "nd" msgstr "" -"Förutom de rättigheterna som utdelas manuellt så kommer användaren dessutom " -"få samma rättigheter som de grupper där han/hon är medlem." -#: contrib/auth/models.py:102 -msgid "user permissions" -msgstr "användarättigheter" - -#: contrib/auth/models.py:105 -msgid "user" -msgstr "användare" - -#: contrib/auth/models.py:106 -msgid "users" -msgstr "användare" - -#: contrib/auth/models.py:111 -msgid "Personal info" -msgstr "Personlig information" - -#: contrib/auth/models.py:112 -msgid "Permissions" -msgstr "Rättigheter" - -#: contrib/auth/models.py:113 -msgid "Important dates" -msgstr "Viktiga datum" - -#: contrib/auth/models.py:114 -msgid "Groups" -msgstr "Grupper" - -#: contrib/auth/models.py:258 -msgid "message" -msgstr "meddelande" - -#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 -msgid "The two password fields didn't match." -msgstr "De båda lösenorden stämde inte överens." - -#: contrib/auth/forms.py:25 -msgid "A user with that username already exists." -msgstr "En användare med det användarnamnet finns redan." - -#: contrib/auth/forms.py:53 -msgid "" -"Your Web browser doesn't appear to have cookies enabled. Cookies are " -"required for logging in." +#: contrib/humanize/templatetags/humanize.py:17 +msgid "rd" msgstr "" -"Din webläsare verkar inte stödja cookies. Cookie behövs för att kunna logga " -"in." -#: contrib/auth/forms.py:60 contrib/admin/views/decorators.py:10 -msgid "" -"Please enter a correct username and password. Note that both fields are case-" -"sensitive." -msgstr "" -"V.G. ange ett korrekt användarnamn och lösenord. Observera att båda fälten gör " -"skillnad på versaler och gemener." +#: contrib/humanize/templatetags/humanize.py:47 +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljon" +msgstr[1] "%(value).1f miljoner" -#: contrib/auth/forms.py:62 -msgid "This account is inactive." -msgstr "Detta konto är inaktivt." +#: contrib/humanize/templatetags/humanize.py:50 +#, python-format +#, fuzzy +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value)1.f miljard" +msgstr[1] "%(value)1.f miljarder" -#: contrib/auth/forms.py:85 -msgid "" -"That e-mail address doesn't have an associated user account. Are you sure " -"you've registered?" -msgstr "" -"Den e-mailadressen har inte något konto associerat med sig. Är du säker på " -"att du har registrerat dig?" +#: contrib/humanize/templatetags/humanize.py:53 +#, python-format +#, fuzzy +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value)1.f biljon" +msgstr[1] "%(value)1.f biljoner" -#: contrib/auth/forms.py:117 -msgid "The two 'new password' fields didn't match." -msgstr "De båda nya lösenordsfälten stämde inte överens." +#: contrib/humanize/templatetags/humanize.py:68 +#, fuzzy +msgid "one" +msgstr "ett" -#: contrib/auth/forms.py:124 -msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "Ditt gamla lösenord var felaktigt ifyllt. Var vänlig fyll i det igen" +#: contrib/humanize/templatetags/humanize.py:68 +msgid "two" +msgstr "två" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "three" +msgstr "tre" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "four" +msgstr "fyra" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "five" +msgstr "fem" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "six" +msgstr "sex" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "seven" +msgstr "sju" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "eight" +msgstr "åtta" + +#: contrib/humanize/templatetags/humanize.py:68 +msgid "nine" +msgstr "nio" #: contrib/redirects/models.py:7 msgid "redirect from" @@ -867,8 +814,8 @@ msgid "" "This can be either an absolute path (as above) or a full URL starting with " "'http://'." msgstr "" -"Detta kan vara antingen en absolut sökväg (som ovan), eller en komplett " -"URL som börjar med 'http://'." +"Detta kan vara antingen en absolut sökväg (som ovan), eller en komplett URL " +"som börjar med 'http://'." #: contrib/redirects/models.py:13 msgid "redirect" @@ -935,7 +882,7 @@ msgstr "datum/tid postat" msgid "is public" msgstr "är offentligt" -#: contrib/comments/models.py:85 contrib/admin/views/doc.py:304 +#: contrib/comments/models.py:85 contrib/admin/views/doc.py:305 msgid "IP address" msgstr "IP-adress" @@ -1045,20 +992,20 @@ msgstr "Flaggad av %r" #: contrib/comments/models.py:278 msgid "deletion date" -msgstr "borttagnings-datum" +msgstr "borttagningsdatum" #: contrib/comments/models.py:280 msgid "moderator deletion" -msgstr "moderator-borttagning" +msgstr "moderatorborttagning" #: contrib/comments/models.py:281 msgid "moderator deletions" -msgstr "moderator-borttagningar" +msgstr "moderatorborttagningar" #: contrib/comments/models.py:285 #, python-format msgid "Moderator deletion by %r" -msgstr "Moderator-borttagning av %r" +msgstr "Moderatorborttagning av %r" #: contrib/comments/views/karma.py:19 msgid "Anonymous users cannot vote" @@ -1066,14 +1013,15 @@ msgstr "Anonyma användare kan inte rösta" #: contrib/comments/views/karma.py:23 msgid "Invalid comment ID" -msgstr "Ogiltig kommentaridentifikation" +msgstr "Ogiltig kommentarsidentifikation" #: contrib/comments/views/karma.py:25 msgid "No voting for yourself" msgstr "Du får inte rösta på dig själv" #: contrib/comments/views/comments.py:27 -msgid "This rating is required because you've entered at least one other rating." +msgid "" +"This rating is required because you've entered at least one other rating." msgstr "Det här betyget krävs eftersom du har fyllt i minst ett annat betyg." #: contrib/comments/views/comments.py:111 @@ -1089,13 +1037,13 @@ msgid_plural "" "\n" "%(text)s" msgstr[0] "" -"Den här kommentaren postades av en användare som har postat mindre än " -"%(count)s kommentar:\n" +"Den här kommentaren postades av en användare som har postat mindre än %" +"(count)s kommentar:\n" "\n" "%(text)s" msgstr[1] "" -"Den här kommentaren postades av en användare som har postat mindre än " -"%(count)s kommentarer:\n" +"Den här kommentaren postades av en användare som har postat mindre än %" +"(count)s kommentarer:\n" "\n" "%(text)s" @@ -1139,20 +1087,6 @@ msgstr "" msgid "The comment form didn't provide either 'preview' or 'post'" msgstr "Kommentars-formuläret skickade varken 'förhandsgranska' eller 'post'" -#: contrib/comments/templates/comments/freeform.html:4 -msgid "Your name:" -msgstr "Ditt namn:" - -#: contrib/comments/templates/comments/freeform.html:5 -#: contrib/comments/templates/comments/form.html:28 -msgid "Comment:" -msgstr "Kommentar:" - -#: contrib/comments/templates/comments/freeform.html:10 -#: contrib/comments/templates/comments/form.html:35 -msgid "Preview comment" -msgstr "Förhandsgranska kommentar" - #: contrib/comments/templates/comments/form.html:6 #: contrib/comments/templates/comments/form.html:8 #: contrib/admin/templates/admin/login.html:17 @@ -1160,24 +1094,24 @@ msgid "Username:" msgstr "Användarnamn:" #: contrib/comments/templates/comments/form.html:6 -#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 #: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 #: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 #: contrib/admin/templates/admin_doc/missing_docutils.html:4 #: contrib/admin/templates/admin_doc/view_index.html:5 #: contrib/admin/templates/admin_doc/model_detail.html:3 #: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 msgid "Log out" msgstr "Logga ut" @@ -1208,73 +1142,19 @@ msgstr "Valfri" msgid "Post a photo" msgstr "Lägg till foto" -#: contrib/flatpages/models.py:7 contrib/admin/views/doc.py:315 -msgid "URL" -msgstr "URL" +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "Kommentar:" -#: contrib/flatpages/models.py:8 -msgid "Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedsträck." +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "Förhandsgranska kommentar" -#: contrib/flatpages/models.py:9 -msgid "title" -msgstr "titel" - -#: contrib/flatpages/models.py:10 -msgid "content" -msgstr "innehåll" - -#: contrib/flatpages/models.py:11 -msgid "enable comments" -msgstr "aktivera kommentarer" - -#: contrib/flatpages/models.py:12 -msgid "template name" -msgstr "mallnamn" - -#: contrib/flatpages/models.py:13 -msgid "" -"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " -"will use 'flatpages/default.html'." -msgstr "" -"Exempel: 'sidor/kontaktsida.html'. Om det här inte fylls i kommer systemet " -"att använda 'sidor/default.html'." - -#: contrib/flatpages/models.py:14 -msgid "registration required" -msgstr "registrering krävs" - -#: contrib/flatpages/models.py:14 -msgid "If this is checked, only logged-in users will be able to view the page." -msgstr "Om det här bockas i kommer endast inloggade användare att kunna visa sidan" - -#: contrib/flatpages/models.py:18 -msgid "flat page" -msgstr "flatsida" - -#: contrib/flatpages/models.py:19 -msgid "flat pages" -msgstr "flatsidor" - -#: contrib/sessions/models.py:51 -msgid "session key" -msgstr "sessionsnyckel" - -#: contrib/sessions/models.py:52 -msgid "session data" -msgstr "sessionsdata" - -#: contrib/sessions/models.py:53 -msgid "expire date" -msgstr "utgångsdatum" - -#: contrib/sessions/models.py:57 -msgid "session" -msgstr "session" - -#: contrib/sessions/models.py:58 -msgid "sessions" -msgstr "sessioner" +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Ditt namn:" #: contrib/sites/models.py:10 msgid "domain name" @@ -1354,49 +1234,19 @@ msgstr "loggpost" msgid "log entries" msgstr "loggposter" -#: contrib/admin/templatetags/admin_list.py:247 +#: contrib/admin/templatetags/admin_list.py:249 msgid "All dates" msgstr "Alla datum" -#: contrib/admin/views/decorators.py:24 -#: contrib/admin/templates/admin/login.html:25 -msgid "Log in" -msgstr "Logga in" - -#: contrib/admin/views/decorators.py:62 -msgid "" -"Please log in again, because your session has expired. Don't worry: Your " -"submission has been saved." -msgstr "" -"V.G. logga in igen, eftersom din session har tagit slut. Oroa dig inte: ditt " -"bidrag har sparats." - -#: contrib/admin/views/decorators.py:69 -msgid "" -"Looks like your browser isn't configured to accept cookies. Please enable " -"cookies, reload this page, and try again." -msgstr "" -"Det ser ut som om din webläsare inte är konfigurerad att acceptera cookies. " -"Aktivera cookies, ladda om den här sidan, och försök igen." - -#: contrib/admin/views/decorators.py:83 -msgid "Usernames cannot contain the '@' character." -msgstr "Användarnamn kan inte innehålla tecknet '@'." - -#: contrib/admin/views/decorators.py:85 -#, python-format -msgid "Your e-mail address is not your username. Try '%s' instead." -msgstr "Din e-mailadress är inte ditt användarnamn. Försök med '%s' istället." - #: contrib/admin/views/auth.py:19 contrib/admin/views/main.py:257 #, python-format msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "%(name)set \"%(obj)s\" lades till." +msgstr "%(name)s \"%(obj)s\" lades till." #: contrib/admin/views/auth.py:24 contrib/admin/views/main.py:261 #: contrib/admin/views/main.py:347 msgid "You may edit it again below." -msgstr "Du kan ändra det igen här under." +msgstr "Du kan ändra det igen nedanför." #: contrib/admin/views/auth.py:30 msgid "Add user" @@ -1413,12 +1263,12 @@ msgstr "Ändra lösenord: %s" #: contrib/admin/views/main.py:223 msgid "Site administration" -msgstr "Administration" +msgstr "Site-administration" #: contrib/admin/views/main.py:271 contrib/admin/views/main.py:356 #, python-format msgid "You may add another %s below." -msgstr "Du kan lägga till en till %s här under." +msgstr "Du kan lägga till en till %s nedanför." #: contrib/admin/views/main.py:289 #, python-format @@ -1447,12 +1297,13 @@ msgstr "Inga fält ändrade." #: contrib/admin/views/main.py:345 #, python-format msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "%(name)set \"%(obj)s\" ändrades." +msgstr "%(name)s \"%(obj)s\" ändrades." #: contrib/admin/views/main.py:353 #, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." -msgstr "%(name)set \"%(obj)s\" lades till. Du kan ändra det igen här under." +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "%(name)s \"%(obj)s\" lades till. Du kan ändra det igen nedanför." #: contrib/admin/views/main.py:391 #, python-format @@ -1481,7 +1332,7 @@ msgstr "Är du säker?" #: contrib/admin/views/main.py:539 #, python-format msgid "Change history: %s" -msgstr "Ändra historien: %s" +msgstr "Ändra historik: %s" #: contrib/admin/views/main.py:573 #, python-format @@ -1495,7 +1346,45 @@ msgstr "Välj %s att ändra" #: contrib/admin/views/main.py:768 msgid "Database error" -msgstr "Databas fel" +msgstr "Databasfel" + +#: contrib/admin/views/decorators.py:10 contrib/auth/forms.py:60 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Var god ange ett korrekt användarnamn och lösenord. Observera att båda " +"fälten är skiftlägeskänsliga." + +#: contrib/admin/views/decorators.py:24 +#: contrib/admin/templates/admin/login.html:25 +msgid "Log in" +msgstr "Logga in" + +#: contrib/admin/views/decorators.py:62 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Var god logga in igen, eftersom din session har tagit slut. " +"Oroa dig inte: Ditt bidrag har sparats." + +#: contrib/admin/views/decorators.py:69 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Det ser ut som om din webläsare inte är konfigurerad att acceptera cookies. " +"Aktivera cookies, ladda om den här sidan, och försök igen." + +#: contrib/admin/views/decorators.py:83 +msgid "Usernames cannot contain the '@' character." +msgstr "Användarnamn kan inte innehålla '@' tecknet." + +#: contrib/admin/views/decorators.py:85 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "Din e-mailadress är inte ditt användarnamn. Försök med '%s' istället." #: contrib/admin/views/doc.py:46 contrib/admin/views/doc.py:48 #: contrib/admin/views/doc.py:50 @@ -1510,7 +1399,7 @@ msgstr "filter:" #: contrib/admin/views/doc.py:135 contrib/admin/views/doc.py:137 #: contrib/admin/views/doc.py:139 msgid "view:" -msgstr "Vy:" +msgstr "vy:" #: contrib/admin/views/doc.py:164 #, python-format @@ -1518,14 +1407,14 @@ msgid "App %r not found" msgstr "Applikation %r hittades inte" #: contrib/admin/views/doc.py:171 -#, python-format -msgid "Model %(model_name)r not found in app %(app_label)r" +#, fuzzy, python-format +msgid "Model %(name)r not found in app %(label)r" msgstr "Modellen %(model_name)r hittades inte i applikation %(app_label)r" #: contrib/admin/views/doc.py:183 -#, python-format -msgid "the related `%(app_label)s.%(data_type)s` object" -msgstr "Det sammalänkade `%(app_label)s.%(data_type)s` objektet" +#, fuzzy, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "det relaterade `%(app_label)s.%(data_type)s` objektet" #: contrib/admin/views/doc.py:183 contrib/admin/views/doc.py:205 #: contrib/admin/views/doc.py:219 contrib/admin/views/doc.py:224 @@ -1533,9 +1422,9 @@ msgid "model:" msgstr "modell:" #: contrib/admin/views/doc.py:214 -#, python-format -msgid "related `%(app_label)s.%(object_name)s` objects" -msgstr "sammanlänkade `%(app_label)s.%(object_name)s` objekt" +#, fuzzy, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "relaterade `%(app_label)s.%(object_name)s` objekt" #: contrib/admin/views/doc.py:219 #, python-format @@ -1552,17 +1441,17 @@ msgstr "antal %s" msgid "Fields on %s objects" msgstr "Fält på %s objekt" -#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:301 -#: contrib/admin/views/doc.py:303 contrib/admin/views/doc.py:309 -#: contrib/admin/views/doc.py:310 contrib/admin/views/doc.py:312 +#: contrib/admin/views/doc.py:291 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:304 contrib/admin/views/doc.py:310 +#: contrib/admin/views/doc.py:311 contrib/admin/views/doc.py:313 msgid "Integer" msgstr "Heltal" #: contrib/admin/views/doc.py:292 msgid "Boolean (Either True or False)" -msgstr "Boolesk (antingen Sann eller Falsk)" +msgstr "Boolesk (antingen True eller False)" -#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:311 +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:312 #, python-format msgid "String (up to %(maxlength)s)" msgstr "Sträng (upp till %(maxlength)s)" @@ -1580,50 +1469,58 @@ msgid "Date (with time)" msgstr "Datum (med tid)" #: contrib/admin/views/doc.py:297 -msgid "E-mail address" -msgstr "E-postadress:" - -#: contrib/admin/views/doc.py:298 contrib/admin/views/doc.py:299 -#: contrib/admin/views/doc.py:302 -msgid "File path" -msgstr "Sökväg" - -#: contrib/admin/views/doc.py:300 msgid "Decimal number" msgstr "Decimaltal" -#: contrib/admin/views/doc.py:306 +#: contrib/admin/views/doc.py:298 +msgid "E-mail address" +msgstr "E-postadress:" + +#: contrib/admin/views/doc.py:299 contrib/admin/views/doc.py:300 +#: contrib/admin/views/doc.py:303 +msgid "File path" +msgstr "Filsökväg" + +#: contrib/admin/views/doc.py:301 +msgid "Floating point number" +msgstr "Flyttal" + +#: contrib/admin/views/doc.py:307 msgid "Boolean (Either True, False or None)" msgstr "Boolesk (antingen True, False eller None)" -#: contrib/admin/views/doc.py:307 +#: contrib/admin/views/doc.py:308 msgid "Relation to parent model" msgstr "Relation till förälder-modell" -#: contrib/admin/views/doc.py:308 +#: contrib/admin/views/doc.py:309 msgid "Phone number" msgstr "Telefonnummer" -#: contrib/admin/views/doc.py:313 +#: contrib/admin/views/doc.py:314 msgid "Text" msgstr "Text" -#: contrib/admin/views/doc.py:314 +#: contrib/admin/views/doc.py:315 msgid "Time" msgstr "Tid" -#: contrib/admin/views/doc.py:316 +#: contrib/admin/views/doc.py:316 contrib/flatpages/models.py:7 +msgid "URL" +msgstr "URL" + +#: contrib/admin/views/doc.py:317 msgid "U.S. state (two uppercase letters)" msgstr "Stat i USA (två versaler)" -#: contrib/admin/views/doc.py:317 +#: contrib/admin/views/doc.py:318 msgid "XML text" msgstr "XML-text" -#: contrib/admin/views/doc.py:343 +#: contrib/admin/views/doc.py:344 #, python-format msgid "%s does not appear to be a urlpattern object" -msgstr "%s verkar inte vara ett urlmönster-objekt" +msgstr "%s verkar inte vara ett urlpattern-objekt" #: contrib/admin/templates/widget/file.html:2 msgid "Currently:" @@ -1641,11 +1538,11 @@ msgstr "Datum:" msgid "Time:" msgstr "Tid:" -#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 @@ -1653,36 +1550,36 @@ msgstr "Tid:" msgid "Documentation" msgstr "Dokumentation" -#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/object_history.html:3 #: contrib/admin/templates/admin/change_form.html:10 -#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/delete_confirmation.html:3 +#: contrib/admin/templates/admin/base.html:25 #: contrib/admin/templates/admin/auth/user/change_password.html:9 #: contrib/admin/templates/admin/auth/user/change_password.html:15 #: contrib/admin/templates/admin/auth/user/change_password.html:46 #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 -#: contrib/admin/templates/admin_doc/bookmarklets.html:4 #: contrib/admin/templates/admin_doc/view_detail.html:4 -#: contrib/admin/templates/admin_doc/template_tag_index.html:5 +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 #: contrib/admin/templates/admin_doc/template_detail.html:4 -#: contrib/admin/templates/admin_doc/template_filter_index.html:5 +#: contrib/admin/templates/admin_doc/template_tag_index.html:5 #: contrib/admin/templates/admin_doc/missing_docutils.html:4 #: contrib/admin/templates/admin_doc/view_index.html:5 #: contrib/admin/templates/admin_doc/model_detail.html:3 #: contrib/admin/templates/admin_doc/index.html:4 #: contrib/admin/templates/admin_doc/model_index.html:5 +#: contrib/admin/templates/admin_doc/template_filter_index.html:5 msgid "Change password" msgstr "Ändra lösenord" -#: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/change_list.html:6 +#: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/500.html:4 #: contrib/admin/templates/admin/invalid_setup.html:4 #: contrib/admin/templates/admin/change_form.html:13 -#: contrib/admin/templates/admin/base.html:30 #: contrib/admin/templates/admin/delete_confirmation.html:6 +#: contrib/admin/templates/admin/base.html:30 #: contrib/admin/templates/admin/auth/user/change_password.html:12 #: contrib/admin/templates/registration/password_change_done.html:4 #: contrib/admin/templates/registration/password_reset_form.html:4 @@ -1693,6 +1590,16 @@ msgstr "Ändra lösenord" msgid "Home" msgstr "Hem" +#: contrib/admin/templates/admin/change_list.html:12 +#, python-format +msgid "Add %(name)s" +msgstr "Lägg till %(name)s" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " Av %(filter_title)s " + #: contrib/admin/templates/admin/object_history.html:5 #: contrib/admin/templates/admin/change_form.html:21 msgid "History" @@ -1720,50 +1627,11 @@ msgid "" "admin site." msgstr "" "Det här objektet har ingen ändringshistorik. Det lades antagligen inte till " -"i den här admin-siten" - -#: contrib/admin/templates/admin/change_list.html:12 -#, python-format -msgid "Add %(name)s" -msgstr "Lägg till %(name)s" - -#: contrib/admin/templates/admin/filter.html:2 -#, python-format -msgid " By %(filter_title)s " -msgstr " Av %(filter_title)s " - -#: contrib/admin/templates/admin/500.html:4 -msgid "Server error" -msgstr "Serverfel" - -#: contrib/admin/templates/admin/500.html:6 -msgid "Server error (500)" -msgstr "Serverfel (500)" - -#: contrib/admin/templates/admin/500.html:9 -msgid "Server Error (500)" -msgstr "Serverfel (500)" - -#: contrib/admin/templates/admin/500.html:10 -msgid "" -"There's been an error. It's been reported to the site administrators via e-" -"mail and should be fixed shortly. Thanks for your patience." -msgstr "" -"Ett fel har uppstått. Administratören har meddelats via e-mail och " -"felet bör åtgärdas snart. Tack för ditt tålamod." - -#: contrib/admin/templates/admin/invalid_setup.html:8 -msgid "" -"Something's wrong with your database installation. Make sure the appropriate " -"database tables have been created, and make sure the database is readable by " -"the appropriate user." -msgstr "" -"Någonting är fel med din databasinstallation. Se till att de rätta tabellerna har " -"skapats och att databasen är läsbar av rätt användare." +"via denna administrationssite." #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" -msgstr "Utför" +msgstr "Kör" #: contrib/admin/templates/admin/search_form.html:10 #, python-format @@ -1789,18 +1657,34 @@ msgstr "Django site-administration" msgid "Django administration" msgstr "Django administration" -#: contrib/admin/templates/admin/filters.html:4 -msgid "Filter" -msgstr "Filter" +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Serverfel" -#: contrib/admin/templates/admin/404.html:4 -#: contrib/admin/templates/admin/404.html:8 -msgid "Page not found" -msgstr "Sidan kunde inte hittas" +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Serverfel (500)" -#: contrib/admin/templates/admin/404.html:10 -msgid "We're sorry, but the requested page could not be found." -msgstr "Vi är ledsna, men den efterfrågade sidan kunde inte hittas." +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Serverfel (500)" + +#: contrib/admin/templates/admin/500.html:10 +msgid "" +"There's been an error. It's been reported to the site administrators via e-" +"mail and should be fixed shortly. Thanks for your patience." +msgstr "" +"Ett fel har uppstått. Administratören har meddelats via e-mail och felet bör " +"åtgärdas snart. Tack för ditt tålamod." + +#: contrib/admin/templates/admin/invalid_setup.html:8 +msgid "" +"Something's wrong with your database installation. Make sure the appropriate " +"database tables have been created, and make sure the database is readable by " +"the appropriate user." +msgstr "" +"Någonting är fel med din databasinstallation. Se till att de rätta " +"tabellerna har skapats och att databasen är läsbar av rätt användare." #: contrib/admin/templates/admin/index.html:17 #, python-format @@ -1814,6 +1698,7 @@ msgstr "%(name)s" #: contrib/admin/templates/admin/index.html:28 #: contrib/admin/templates/admin/change_form.html:15 +#, fuzzy msgid "Add" msgstr "Lägg till" @@ -1837,9 +1722,22 @@ msgstr "Mina Händelser" msgid "None available" msgstr "Inga tillgängliga" +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Sidan kunde inte hittas" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Vi är ledsna, men den efterfrågade sidan kunde inte hittas." + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filter" + #: contrib/admin/templates/admin/change_form.html:22 msgid "View on site" -msgstr "Visa på siten" +msgstr "Visa på site" #: contrib/admin/templates/admin/change_form.html:32 #: contrib/admin/templates/admin/auth/user/change_password.html:24 @@ -1856,10 +1754,6 @@ msgstr "Sortering" msgid "Order:" msgstr "Sortera:" -#: contrib/admin/templates/admin/base.html:25 -msgid "Welcome," -msgstr "Välkommen," - #: contrib/admin/templates/admin/delete_confirmation.html:9 #: contrib/admin/templates/admin/submit_line.html:3 msgid "Delete" @@ -1872,9 +1766,9 @@ msgid "" "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"Att ta bort %(object_name)s '%(escaped_object)s' skulle innebära att besläktade " -"objekt togs bort, men ditt konto har inte rättigheter att ta bort följande " -"objekttyper:" +"Att ta bort %(object_name)s '%(escaped_object)s' skulle innebära att " +"besläktade objekt togs bort, men ditt konto har inte rättigheter att ta bort " +"följande objekttyper:" #: contrib/admin/templates/admin/delete_confirmation.html:21 #, python-format @@ -1882,13 +1776,17 @@ msgid "" "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " "All of the following related items will be deleted:" msgstr "" -"Är du säker på att du vill ta bort %(object_name)s \"%(escaped_object)s\"? Alla " -"dessa sammanlänkade objekt kommer att tas bort:" +"Är du säker på att du vill ta bort %(object_name)s \"%(escaped_object)s\"? " +"Alla dessa sammanlänkade objekt kommer att tas bort:" #: contrib/admin/templates/admin/delete_confirmation.html:26 msgid "Yes, I'm sure" msgstr "Ja, jag är säker" +#: contrib/admin/templates/admin/base.html:25 +msgid "Welcome," +msgstr "Välkommen," + #: contrib/admin/templates/admin/submit_line.html:4 msgid "Save as new" msgstr "Spara som ny" @@ -1930,8 +1828,8 @@ msgid "" "First, enter a username and password. Then, you'll be able to edit more user " "options." msgstr "" -"Ange först ett användarnamn och ett lösenord. Sedan kommer du att kunna ändra " -"fler användaralternativ." +"Ange först ett användarnamn och ett lösenord. Sedan kommer du att kunna " +"ändra fler användaralternativ." #: contrib/admin/templates/admin/auth/user/add_form.html:12 msgid "Username" @@ -1958,7 +1856,7 @@ msgstr "Ditt lösenord har ändrats." #: contrib/admin/templates/registration/password_reset_form.html:10 #: contrib/admin/templates/registration/password_reset_done.html:4 msgid "Password reset" -msgstr "Nollställ lösenordet" +msgstr "Nollställ lösenord" #: contrib/admin/templates/registration/password_reset_form.html:12 msgid "" @@ -1987,7 +1885,7 @@ msgstr "Logga in igen" #: contrib/admin/templates/registration/password_reset_done.html:6 #: contrib/admin/templates/registration/password_reset_done.html:10 msgid "Password reset successful" -msgstr "Nollställning av lösenordet lyckades" +msgstr "Lösenordsnollställning lyckades." #: contrib/admin/templates/registration/password_reset_done.html:12 msgid "" @@ -2052,7 +1950,7 @@ msgstr "Tack för att du använder vår site!" #: contrib/admin/templates/registration/password_reset_email.html:15 #, python-format msgid "The %(site_name)s team" -msgstr "%(site_name)s-laget" +msgstr "%(site_name)s-teamet" #: contrib/admin/templates/admin_doc/bookmarklets.html:3 msgid "Bookmarklets" @@ -2076,7 +1974,8 @@ msgstr "" "

                      För att installera smarta bokmärken, dra länken till din\n" "verktygsrad med bokmärken, eller högerklicka på länken och lägg till den\n" "till dina bokmärken. Nu kan du välja det smarta bokmärket från alla sidor\n" -"på siten. Observera att några av dessa smarta bokmärken kräver att du besöker\n" +"på siten. Observera att några av dessa smarta bokmärken kräver att du " +"besöker\n" "sidan från en dator som är \"intern\" (tala med din systemadministratör\n" "om du inte är säker på om din dator är \"intern\").

                      \n" @@ -2122,14 +2021,737 @@ msgstr "Redigera det här objektet (nytt fönster)" msgid "As above, but opens the admin page in a new window." msgstr "Som ovan, men öppnar administrationssidan i ett nytt fönster." +#: contrib/contenttypes/models.py:36 +msgid "python model class name" +msgstr "python modell klassnamn" + +#: contrib/contenttypes/models.py:39 +msgid "content type" +msgstr "innehållstyp" + +#: contrib/contenttypes/models.py:40 +msgid "content types" +msgstr "innehållstyper" + +#: contrib/auth/views.py:40 +msgid "Logged out" +msgstr "Utloggad" + +#: contrib/auth/models.py:44 contrib/auth/models.py:64 +msgid "name" +msgstr "namn" + +#: contrib/auth/models.py:46 +msgid "codename" +msgstr "kodnamn" + +#: contrib/auth/models.py:49 +msgid "permission" +msgstr "rättighet" + +#: contrib/auth/models.py:50 contrib/auth/models.py:65 +msgid "permissions" +msgstr "rättigheter" + +#: contrib/auth/models.py:68 +msgid "group" +msgstr "grupp" + +#: contrib/auth/models.py:69 contrib/auth/models.py:109 +msgid "groups" +msgstr "grupper" + +#: contrib/auth/models.py:99 +msgid "username" +msgstr "användarnamn" + +#: contrib/auth/models.py:99 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "" +"Obligatorisk. 30 tecken eller mindre. Endast bokstäver, siffror eller " +"understräck." + +#: contrib/auth/models.py:100 +msgid "first name" +msgstr "förnamn" + +#: contrib/auth/models.py:101 +msgid "last name" +msgstr "efternamn" + +#: contrib/auth/models.py:102 +msgid "e-mail address" +msgstr "e-mailadress" + +#: contrib/auth/models.py:103 +msgid "password" +msgstr "lösenord" + +#: contrib/auth/models.py:103 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" +"Använd '[algo]$[salt]$[hexdigest]' eller använd Ändra " +"lösenord." + +#: contrib/auth/models.py:104 +msgid "staff status" +msgstr "personalstatus" + +#: contrib/auth/models.py:104 +msgid "Designates whether the user can log into this admin site." +msgstr "Avgör om användaren kan logga in på den här admin-siten." + +#: contrib/auth/models.py:105 +msgid "active" +msgstr "aktiv" + +#: contrib/auth/models.py:105 +msgid "" +"Designates whether this user can log into the Django admin. Unselect this " +"instead of deleting accounts." +msgstr "" +"Avgör om användaren kan logga in till Django admin. Avmarkera denna " +"istället för att ta bort konton." + +#: contrib/auth/models.py:106 +msgid "superuser status" +msgstr "superanvändare" + +#: contrib/auth/models.py:106 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "" +"Avgör om användaren har alla rättigheter utan att uttryckligen tilldela " +"dem" + +#: contrib/auth/models.py:107 +msgid "last login" +msgstr "senaste inloggning" + +#: contrib/auth/models.py:108 +msgid "date joined" +msgstr "registreringsdatum" + +#: contrib/auth/models.py:110 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Förutom de rättigheterna som utdelas manuellt så kommer användaren dessutom " +"få samma rättigheter som de grupper där han/hon är medlem." + +#: contrib/auth/models.py:111 +msgid "user permissions" +msgstr "användarättigheter" + +#: contrib/auth/models.py:115 +msgid "user" +msgstr "användare" + +#: contrib/auth/models.py:116 +msgid "users" +msgstr "användare" + +#: contrib/auth/models.py:122 +msgid "Personal info" +msgstr "Personlig information" + +#: contrib/auth/models.py:123 +msgid "Permissions" +msgstr "Rättigheter" + +#: contrib/auth/models.py:124 +msgid "Important dates" +msgstr "Viktiga datum" + +#: contrib/auth/models.py:125 +msgid "Groups" +msgstr "Grupper" + +#: contrib/auth/models.py:269 +msgid "message" +msgstr "meddelande" + +#: contrib/auth/models.py:282 +#, fuzzy +msgid "AnonymousUser" +msgstr "Anonym användare" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "De båda lösenorden stämde inte överens." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "En användare med det användarnamnet finns redan." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Din webläsare verkar inte stödja cookies. Cookie behövs för att kunna logga " +"in." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "Detta konto är inaktivt." + +#: contrib/auth/forms.py:85 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" +"Den e-mailadressen har inte något konto associerat med sig. Är du säker på " +"att du har registrerat dig?" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "De två lösenordsfälten stämde inte överens." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Ditt gamla lösenord var felaktigt ifyllt. Var vänlig fyll i det igen" + #: contrib/localflavor/uk/forms.py:18 msgid "Enter a postcode. A space is required between the two postcode parts." msgstr "Fyll i ett postnummer. Du måste ha mellanslag mellan nummerdelarna." -#: contrib/localflavor/usa/forms.py:17 +#: contrib/localflavor/au/forms.py:18 +msgid "Enter a 4 digit post code." +msgstr "Fyll i en fyra-sifrigt postkod." + +#: contrib/localflavor/br/forms.py:18 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "Fyll i zipkod i XXXXX-XXX format." + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "Telefonnummer måste vara i det amerikanska formatet XX-XXXX-XXXX." + +#: contrib/localflavor/br/forms.py:72 +msgid "This field requires only numbers." +msgstr "Detta fält kräver enbart siffror." + +#: contrib/localflavor/br/forms.py:74 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "Detta fält kräver högst 11 siffror eller 14 bokstäver." + +#: contrib/localflavor/br/forms.py:84 +msgid "Invalid CPF number." +msgstr "Ogiltigt CPF-nummer." + +#: contrib/localflavor/br/forms.py:106 +msgid "This field requires at least 14 digits" +msgstr "Detta fält kräver minst 14 sifrror" + +#: contrib/localflavor/br/forms.py:116 +msgid "Invalid CNPJ number." +msgstr "Ogiltigt CNPJ-nummer." + +#: contrib/localflavor/fr/forms.py:17 contrib/localflavor/de/forms.py:16 +#: contrib/localflavor/fi/forms.py:14 +msgid "Enter a zip code in the format XXXXX." +msgstr "Fyll i en zipkod i XXXXX format." + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "Bayern" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "Berlin" + +#: contrib/localflavor/de/de_states.py:8 +msgid "Brandenburg" +msgstr "Brandenburg" + +#: contrib/localflavor/de/de_states.py:9 +msgid "Bremen" +msgstr "Bremen" + +#: contrib/localflavor/de/de_states.py:10 +msgid "Hamburg" +msgstr "Hamburg" + +#: contrib/localflavor/de/de_states.py:11 +msgid "Hessen" +msgstr "Hessen" + +#: contrib/localflavor/de/de_states.py:12 +msgid "Mecklenburg-Western Pomerania" +msgstr "Mecklenburg-Vorpommern" + +#: contrib/localflavor/de/de_states.py:13 +msgid "Lower Saxony" +msgstr "Nedre Sachsen" + +#: contrib/localflavor/de/de_states.py:14 +#, fuzzy +msgid "North Rhine-Westphalia" +msgstr "Norra Rhen-Westphalia" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "Rhenlandet" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "Saarland" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "Sachsen" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "Sachsen-Anhalt" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "" + +#: contrib/localflavor/de/forms.py:60 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "" +"Fyll i ett giltigt tyskt ID-kortnummer i XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." + +#: contrib/localflavor/jp/jp_prefectures.py:4 +msgid "Hokkaido" +msgstr "Hokkaido" + +#: contrib/localflavor/jp/jp_prefectures.py:5 +msgid "Aomori" +msgstr "Aomori" + +#: contrib/localflavor/jp/jp_prefectures.py:6 +msgid "Iwate" +msgstr "Iwate" + +#: contrib/localflavor/jp/jp_prefectures.py:7 +msgid "Miyagi" +msgstr "Miyagi" + +#: contrib/localflavor/jp/jp_prefectures.py:8 +msgid "Akita" +msgstr "Akita" + +#: contrib/localflavor/jp/jp_prefectures.py:9 +msgid "Yamagata" +msgstr "Yamagata" + +#: contrib/localflavor/jp/jp_prefectures.py:10 +msgid "Fukushima" +msgstr "Fukushima" + +#: contrib/localflavor/jp/jp_prefectures.py:11 +msgid "Ibaraki" +msgstr "Ibaraki" + +#: contrib/localflavor/jp/jp_prefectures.py:12 +msgid "Tochigi" +msgstr "Tochigi" + +#: contrib/localflavor/jp/jp_prefectures.py:13 +msgid "Gunma" +msgstr "Gunma" + +#: contrib/localflavor/jp/jp_prefectures.py:14 +msgid "Saitama" +msgstr "Saitama" + +#: contrib/localflavor/jp/jp_prefectures.py:15 +msgid "Chiba" +msgstr "Chiba" + +#: contrib/localflavor/jp/jp_prefectures.py:16 +msgid "Tokyo" +msgstr "Tokyo" + +#: contrib/localflavor/jp/jp_prefectures.py:17 +msgid "Kanagawa" +msgstr "Kanagawa" + +#: contrib/localflavor/jp/jp_prefectures.py:18 +msgid "Yamanashi" +msgstr "Yamanashi" + +#: contrib/localflavor/jp/jp_prefectures.py:19 +msgid "Nagano" +msgstr "Nagano" + +#: contrib/localflavor/jp/jp_prefectures.py:20 +msgid "Niigata" +msgstr "Niigata" + +#: contrib/localflavor/jp/jp_prefectures.py:21 +msgid "Toyama" +msgstr "Toyama" + +#: contrib/localflavor/jp/jp_prefectures.py:22 +msgid "Ishikawa" +msgstr "Ischikawa" + +#: contrib/localflavor/jp/jp_prefectures.py:23 +msgid "Fukui" +msgstr "Fukui" + +#: contrib/localflavor/jp/jp_prefectures.py:24 +msgid "Gifu" +msgstr "Gifu" + +#: contrib/localflavor/jp/jp_prefectures.py:25 +msgid "Shizuoka" +msgstr "Shizuoka" + +#: contrib/localflavor/jp/jp_prefectures.py:26 +msgid "Aichi" +msgstr "Aichi" + +#: contrib/localflavor/jp/jp_prefectures.py:27 +msgid "Mie" +msgstr "Mie" + +#: contrib/localflavor/jp/jp_prefectures.py:28 +msgid "Shiga" +msgstr "Shiga" + +#: contrib/localflavor/jp/jp_prefectures.py:29 +msgid "Kyoto" +msgstr "Kyoto" + +#: contrib/localflavor/jp/jp_prefectures.py:30 +msgid "Osaka" +msgstr "Osaka" + +#: contrib/localflavor/jp/jp_prefectures.py:31 +msgid "Hyogo" +msgstr "Hyogo" + +#: contrib/localflavor/jp/jp_prefectures.py:32 +msgid "Nara" +msgstr "Nara" + +#: contrib/localflavor/jp/jp_prefectures.py:33 +msgid "Wakayama" +msgstr "Wakayama" + +#: contrib/localflavor/jp/jp_prefectures.py:34 +msgid "Tottori" +msgstr "Tottori" + +#: contrib/localflavor/jp/jp_prefectures.py:35 +msgid "Shimane" +msgstr "Shimane" + +#: contrib/localflavor/jp/jp_prefectures.py:36 +msgid "Okayama" +msgstr "Okayama" + +#: contrib/localflavor/jp/jp_prefectures.py:37 +msgid "Hiroshima" +msgstr "Hiroshima" + +#: contrib/localflavor/jp/jp_prefectures.py:38 +msgid "Yamaguchi" +msgstr "Yamaguchi" + +#: contrib/localflavor/jp/jp_prefectures.py:39 +msgid "Tokushima" +msgstr "Tokushima" + +#: contrib/localflavor/jp/jp_prefectures.py:40 +msgid "Kagawa" +msgstr "Kagawa" + +#: contrib/localflavor/jp/jp_prefectures.py:41 +msgid "Ehime" +msgstr "Ehime" + +#: contrib/localflavor/jp/jp_prefectures.py:42 +msgid "Kochi" +msgstr "Kochi" + +#: contrib/localflavor/jp/jp_prefectures.py:43 +msgid "Fukuoka" +msgstr "Fukuoka" + +#: contrib/localflavor/jp/jp_prefectures.py:44 +msgid "Saga" +msgstr "Saga" + +#: contrib/localflavor/jp/jp_prefectures.py:45 +msgid "Nagasaki" +msgstr "Nagasaki" + +#: contrib/localflavor/jp/jp_prefectures.py:46 +msgid "Kumamoto" +msgstr "Kuamoto" + +#: contrib/localflavor/jp/jp_prefectures.py:47 +msgid "Oita" +msgstr "Oita" + +#: contrib/localflavor/jp/jp_prefectures.py:48 +msgid "Miyazaki" +msgstr "Miyazaki" + +#: contrib/localflavor/jp/jp_prefectures.py:49 +msgid "Kagoshima" +msgstr "kagoshima" + +#: contrib/localflavor/jp/jp_prefectures.py:50 +msgid "Okinawa" +msgstr "Okinawa" + +#: contrib/localflavor/jp/forms.py:21 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "Fyll i zipkod i formatet XXXXXXX eller XXX-XXXX." + +#: contrib/localflavor/it/forms.py:16 +msgid "Enter a valid zip code." +msgstr "Fyll i en giltigt zipkod." + +#: contrib/localflavor/it/forms.py:41 +msgid "Enter a valid Social Security number." +msgstr "Fyll i ett giltigt personnummer." + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "Fyll i ett giltigt VAT-nummer." + +#: contrib/localflavor/no/forms.py:15 contrib/localflavor/ch/forms.py:18 +msgid "Enter a zip code in the format XXXX." +msgstr "Fyll i zipkod i formatet XXXX." + +#: contrib/localflavor/no/forms.py:36 +msgid "Enter a valid Norwegian social security number." +msgstr "Fyll i ett giltigt norskt personnummer." + +#: contrib/localflavor/fi/forms.py:40 contrib/localflavor/fi/forms.py:45 +msgid "Enter a valid Finnish social security number." +msgstr "Fyll i ett giltigt finskt personnummer." + +#: contrib/localflavor/us/forms.py:18 msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." msgstr "Fyll i zipkod i formatet XXXXX eller XXXXX-XXXX." +#: contrib/localflavor/us/forms.py:51 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "Fyll i ett giltigt amerikanskt personnummer i XXX-XX-XXXX format." + +#: contrib/localflavor/is_/forms.py:16 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "Fyll i ett giltigt isländskt personnummer. Formatet är XXXXXX-XXXX." + +#: contrib/localflavor/is_/forms.py:30 +msgid "The Icelandic identification number is not valid." +msgstr "Det isländska personnumret är inte giltigt." + +#: contrib/localflavor/cl/forms.py:21 +msgid "Enter valid a Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "Fyll i ett giltigt chileanskt RUT. Formatet är XX.XXX.XXX-X." + +#: contrib/localflavor/cl/forms.py:26 +msgid "Enter valid a Chilean RUT" +msgstr "Fyll i ett giltigt chileanskt RUT" + +#: contrib/localflavor/ch/ch_states.py:5 +msgid "Aargau" +msgstr "Aargau" + +#: contrib/localflavor/ch/ch_states.py:6 +msgid "Appenzell Innerrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:7 +msgid "Appenzell Ausserrhoden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:8 +msgid "Basel-Stadt" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:9 +msgid "Basel-Land" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:10 +msgid "Berne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:11 +msgid "Fribourg" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:12 +msgid "Geneva" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:13 +msgid "Glarus" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:14 +msgid "Graubuenden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:15 +msgid "Jura" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:16 +msgid "Lucerne" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:17 +msgid "Neuchatel" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:18 +msgid "Nidwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:19 +msgid "Obwalden" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:20 +msgid "Schaffhausen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:21 +msgid "Schwyz" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:22 +msgid "Solothurn" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:23 +msgid "St. Gallen" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:24 +msgid "Thurgau" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:25 +msgid "Ticino" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:26 +msgid "Uri" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:27 +msgid "Valais" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:28 +msgid "Vaud" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:29 +msgid "Zug" +msgstr "" + +#: contrib/localflavor/ch/ch_states.py:30 +msgid "Zurich" +msgstr "" + +#: contrib/localflavor/ch/forms.py:90 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "" +"Fyll i ett giltigt Schweiziskt ID- eller passkortnummer i X1234567<0 eller " +"1234567890 format." + +#: contrib/sessions/models.py:68 +msgid "session key" +msgstr "sessionsnyckel" + +#: contrib/sessions/models.py:69 +msgid "session data" +msgstr "sessionsdata" + +#: contrib/sessions/models.py:70 +msgid "expire date" +msgstr "utgångsdatum" + +#: contrib/sessions/models.py:74 +msgid "session" +msgstr "session" + +#: contrib/sessions/models.py:75 +msgid "sessions" +msgstr "sessioner" + +#: contrib/flatpages/models.py:8 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Exempel: '/om/kontakt/'. Se till att ha inledande och avslutande snedsträck." + +#: contrib/flatpages/models.py:9 +msgid "title" +msgstr "titel" + +#: contrib/flatpages/models.py:10 +msgid "content" +msgstr "innehåll" + +#: contrib/flatpages/models.py:11 +msgid "enable comments" +msgstr "aktivera kommentarer" + +#: contrib/flatpages/models.py:12 +msgid "template name" +msgstr "mallnamn" + +#: contrib/flatpages/models.py:13 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Exempel: 'sidor/kontaktsida.html'. Om det här inte fylls i kommer systemet " +"att använda 'sidor/default.html'." + +#: contrib/flatpages/models.py:14 +msgid "registration required" +msgstr "registrering krävs" + +#: contrib/flatpages/models.py:14 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "" +"Om det här bockas i kommer endast inloggade användare att kunna visa sidan" + +#: contrib/flatpages/models.py:18 +msgid "flat page" +msgstr "flatsida" + +#: contrib/flatpages/models.py:19 +msgid "flat pages" +msgstr "flatsidor" + #: utils/dates.py:6 msgid "Monday" msgstr "Måndag" @@ -2204,7 +2826,7 @@ msgstr "November" #: utils/dates.py:16 msgid "December" -msgstr "december" +msgstr "December" #: utils/dates.py:19 msgid "jan" @@ -2318,27 +2940,87 @@ msgid_plural "minutes" msgstr[0] "minut" msgstr[1] "minuter" -#: utils/translation/trans_real.py:362 +#: utils/timesince.py:40 +#, python-format +msgid "%d milliseconds" +msgstr "%d millisekunder" + +#: utils/timesince.py:41 +#, python-format +msgid "%(number)d %(type)s" +msgstr "%(number)d %(type)s" + +#: utils/timesince.py:47 +#, python-format +msgid ", %(number)d %(type)s" +msgstr ", %(number)d %(type)s" + +#: utils/dateformat.py:40 +msgid "p.m." +msgstr "p.m." + +#: utils/dateformat.py:41 +msgid "a.m." +msgstr "a.m." + +#: utils/dateformat.py:46 +msgid "PM" +msgstr "PM" + +#: utils/dateformat.py:47 +msgid "AM" +msgstr "AM" + +#: utils/dateformat.py:95 +msgid "midnight" +msgstr "midnatt" + +#: utils/dateformat.py:97 +msgid "noon" +msgstr "middag" + +#: utils/translation/trans_real.py:358 msgid "DATE_FORMAT" -msgstr "" +msgstr "N j, Y" -#: utils/translation/trans_real.py:363 +#: utils/translation/trans_real.py:359 msgid "DATETIME_FORMAT" -msgstr "" +msgstr "N j, Y, P" -#: utils/translation/trans_real.py:364 +#: utils/translation/trans_real.py:360 msgid "TIME_FORMAT" -msgstr "" +msgstr "P" -#: utils/translation/trans_real.py:380 +#: utils/translation/trans_real.py:376 msgid "YEAR_MONTH_FORMAT" -msgstr "" +msgstr "F Y" -#: utils/translation/trans_real.py:381 +#: utils/translation/trans_real.py:377 msgid "MONTH_DAY_FORMAT" -msgstr "" +msgstr "F j" -#: template/defaultfilters.py:490 +#: template/defaultfilters.py:491 msgid "yes,no,maybe" msgstr "ja,nej,kanske" +#: template/defaultfilters.py:520 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d byte" +msgstr[1] "%(size)d bytes" + +#: template/defaultfilters.py:522 +#, python-format +msgid "%.1f KB" +msgstr "%.1f KB" + +#: template/defaultfilters.py:524 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: template/defaultfilters.py:525 +#, python-format +msgid "%.1f GB" +msgstr "%.1f GB" diff --git a/django/conf/locale/sv/LC_MESSAGES/djangojs.po b/django/conf/locale/sv/LC_MESSAGES/djangojs.po index 5abc8780d5..29fbe2eb15 100644 --- a/django/conf/locale/sv/LC_MESSAGES/djangojs.po +++ b/django/conf/locale/sv/LC_MESSAGES/djangojs.po @@ -2,9 +2,6 @@ # Copyright (C) 2005 # This file is distributed under the same license as the Django package. # -# -# Robin Sonefors , 2005. -# Mikko Hellsing , 2007. msgid "" msgstr "" "Project-Id-Version: djangojs\n" diff --git a/django/conf/locale/uk/LC_MESSAGES/djangojs.mo b/django/conf/locale/uk/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..1db40df910 Binary files /dev/null and b/django/conf/locale/uk/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/uk/LC_MESSAGES/djangojs.po b/django/conf/locale/uk/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..4084313848 --- /dev/null +++ b/django/conf/locale/uk/LC_MESSAGES/djangojs.po @@ -0,0 +1,118 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:32 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "" diff --git a/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000..1db40df910 Binary files /dev/null and b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.mo differ diff --git a/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..4084313848 --- /dev/null +++ b/django/conf/locale/zh_TW/LC_MESSAGES/djangojs.po @@ -0,0 +1,118 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , 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 \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: contrib/admin/media/js/SelectFilter2.js:33 +#, perl-format +msgid "Available %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:32 +#: contrib/admin/media/js/calendar.js:24 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "" diff --git a/django/conf/project_template/settings.py b/django/conf/project_template/settings.py index 36039d7e98..8b3617d4b6 100644 --- a/django/conf/project_template/settings.py +++ b/django/conf/project_template/settings.py @@ -9,7 +9,7 @@ ADMINS = ( MANAGERS = ADMINS -DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. +DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = '' # Or path to database file if using sqlite3. DATABASE_USER = '' # Not used with sqlite3. DATABASE_PASSWORD = '' # Not used with sqlite3. diff --git a/django/contrib/admin/media/js/admin/RelatedObjectLookups.js b/django/contrib/admin/media/js/admin/RelatedObjectLookups.js index f50ff43c91..eec7d6a2ab 100644 --- a/django/contrib/admin/media/js/admin/RelatedObjectLookups.js +++ b/django/contrib/admin/media/js/admin/RelatedObjectLookups.js @@ -30,7 +30,12 @@ function dismissRelatedLookupPopup(win, chosenId) { function showAddAnotherPopup(triggeringLink) { var name = triggeringLink.id.replace(/^add_/, ''); name = name.replace(/\./g, '___'); - var win = window.open(triggeringLink.href + '?_popup=1', name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + href = triggeringLink.href + if (href.indexOf('?') == -1) + href += '?_popup=1'; + else + href += '&_popup=1'; + var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); win.focus(); return false; } diff --git a/django/contrib/admin/models.py b/django/contrib/admin/models.py index 022d20bed9..7144c0b20b 100644 --- a/django/contrib/admin/models.py +++ b/django/contrib/admin/models.py @@ -9,7 +9,7 @@ DELETION = 3 class LogEntryManager(models.Manager): def log_action(self, user_id, content_type_id, object_id, object_repr, action_flag, change_message=''): - e = self.model(None, None, user_id, content_type_id, object_id, object_repr[:200], action_flag, change_message) + e = self.model(None, None, user_id, content_type_id, str(object_id), object_repr[:200], action_flag, change_message) e.save() class LogEntry(models.Model): diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index e715fdf063..d857659c28 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -14,6 +14,11 @@ from django.utils.html import escape from django.utils.text import capfirst import operator +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback + # The system will display a "Show all" link on the change list only if the # total result count is less than or equal to this setting. MAX_SHOW_ALL_ALLOWED = 200 diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py index 023f9b43be..9d5a48c2f1 100644 --- a/django/contrib/auth/forms.py +++ b/django/contrib/auth/forms.py @@ -79,32 +79,32 @@ class PasswordResetForm(oldforms.Manipulator): def isValidUserEmail(self, new_data, all_data): "Validates that a user exists with the given e-mail address" - try: - self.user_cache = User.objects.get(email__iexact=new_data) - except User.DoesNotExist: + self.users_cache = list(User.objects.filter(email__iexact=new_data)) + if len(self.users_cache) == 0: raise validators.ValidationError, _("That e-mail address doesn't have an associated user account. Are you sure you've registered?") def save(self, domain_override=None, email_template_name='registration/password_reset_email.html'): "Calculates a new password randomly and sends it to the user" from django.core.mail import send_mail - new_pass = User.objects.make_random_password() - self.user_cache.set_password(new_pass) - self.user_cache.save() - if not domain_override: - current_site = Site.objects.get_current() - site_name = current_site.name - domain = current_site.domain - else: - site_name = domain = domain_override - t = loader.get_template(email_template_name) - c = { - 'new_password': new_pass, - 'email': self.user_cache.email, - 'domain': domain, - 'site_name': site_name, - 'user': self.user_cache, - } - send_mail('Password reset on %s' % site_name, t.render(Context(c)), None, [self.user_cache.email]) + for user in self.users_cache: + new_pass = User.objects.make_random_password() + user.set_password(new_pass) + user.save() + if not domain_override: + current_site = Site.objects.get_current() + site_name = current_site.name + domain = current_site.domain + else: + site_name = domain = domain_override + t = loader.get_template(email_template_name) + c = { + 'new_password': new_pass, + 'email': user.email, + 'domain': domain, + 'site_name': site_name, + 'user': user, + } + send_mail('Password reset on %s' % site_name, t.render(Context(c)), None, [user.email]) class PasswordChangeForm(oldforms.Manipulator): "A form that lets a user change his password." diff --git a/django/contrib/auth/models.py b/django/contrib/auth/models.py index c653cdf156..da24575185 100644 --- a/django/contrib/auth/models.py +++ b/django/contrib/auth/models.py @@ -5,6 +5,11 @@ from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ import datetime +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback + def check_password(raw_password, enc_password): """ Returns a boolean of whether the raw_password was correct. Handles @@ -160,7 +165,6 @@ class User(models.Model): def get_group_permissions(self): "Returns a list of permission strings that this user has through his/her groups." if not hasattr(self, '_group_perm_cache'): - import sets cursor = connection.cursor() # The SQL below works out to the following, after DB quoting: # cursor.execute(""" @@ -185,13 +189,12 @@ class User(models.Model): backend.quote_name('id'), backend.quote_name('content_type_id'), backend.quote_name('user_id'),) cursor.execute(sql, [self.id]) - self._group_perm_cache = sets.Set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) + self._group_perm_cache = set(["%s.%s" % (row[0], row[1]) for row in cursor.fetchall()]) return self._group_perm_cache def get_all_permissions(self): if not hasattr(self, '_perm_cache'): - import sets - self._perm_cache = sets.Set(["%s.%s" % (p.content_type.app_label, p.codename) for p in self.user_permissions.select_related()]) + self._perm_cache = set(["%s.%s" % (p.content_type.app_label, p.codename) for p in self.user_permissions.select_related()]) self._perm_cache.update(self.get_group_permissions()) return self._perm_cache diff --git a/django/contrib/databrowse/templates/databrowse/object_detail.html b/django/contrib/databrowse/templates/databrowse/object_detail.html index 0096178cd2..2195ad3080 100644 --- a/django/contrib/databrowse/templates/databrowse/object_detail.html +++ b/django/contrib/databrowse/templates/databrowse/object_detail.html @@ -32,10 +32,10 @@
                    • {{ object }}
                    • {% endfor %}
                    - {% else %}

                    (None)

                    {% endif %} + {% endfor %} {% endblock %} diff --git a/django/contrib/redirects/middleware.py b/django/contrib/redirects/middleware.py index 32f2760c45..8998c2ce3e 100644 --- a/django/contrib/redirects/middleware.py +++ b/django/contrib/redirects/middleware.py @@ -19,7 +19,7 @@ class RedirectFallbackMiddleware(object): except Redirect.DoesNotExist: pass if r is not None: - if r == '': + if r.new_path == '': return http.HttpResponseGone() return http.HttpResponsePermanentRedirect(r.new_path) diff --git a/django/core/mail.py b/django/core/mail.py index 8661d84287..e9d8a150a1 100644 --- a/django/core/mail.py +++ b/django/core/mail.py @@ -3,10 +3,13 @@ Tools for sending email. """ from django.conf import settings +from email import Charset, Encoders from email.MIMEText import MIMEText +from email.MIMEMultipart import MIMEMultipart +from email.MIMEBase import MIMEBase from email.Header import Header from email.Utils import formatdate -from email import Charset +import mimetypes import os import smtplib import socket @@ -17,6 +20,10 @@ import random # some spam filters. Charset.add_charset('utf-8', Charset.SHORTEST, Charset.QP, 'utf-8') +# Default MIME type to use on attachments (if it is not explicitly given +# and cannot be guessed). +DEFAULT_ATTACHMENT_MIME_TYPE = 'application/octet-stream' + # Cache the hostname, but do it lazily: socket.getfqdn() can take a couple of # seconds, which slows down the restart of the server. class CachedDnsName(object): @@ -55,14 +62,22 @@ def make_msgid(idstring=None): class BadHeaderError(ValueError): pass -class SafeMIMEText(MIMEText): +class SafeHeaderMixin(object): def __setitem__(self, name, val): "Forbids multi-line headers, to prevent header injection." if '\n' in val or '\r' in val: raise BadHeaderError, "Header values can't contain newlines (got %r for header %r)" % (val, name) if name == "Subject": val = Header(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): """ @@ -154,12 +169,19 @@ class EmailMessage(object): """ A container for email information. """ - def __init__(self, subject='', body='', from_email=None, to=None, bcc=None, connection=None): + content_subtype = 'plain' + multipart_subtype = 'mixed' + encoding = None # None => use settings default + + def __init__(self, subject='', body='', from_email=None, to=None, bcc=None, + connection=None, attachments=None, headers=None): self.to = to or [] self.bcc = bcc or [] self.from_email = from_email or settings.DEFAULT_FROM_EMAIL self.subject = subject self.body = body + self.attachments = attachments or [] + self.extra_headers = headers or {} self.connection = connection def get_connection(self, fail_silently=False): @@ -168,7 +190,18 @@ class EmailMessage(object): return self.connection def message(self): - msg = SafeMIMEText(self.body, 'plain', settings.DEFAULT_CHARSET) + encoding = self.encoding or settings.DEFAULT_CHARSET + msg = SafeMIMEText(self.body, self.content_subtype, encoding) + if self.attachments: + body_msg = msg + msg = SafeMIMEMultipart(_subtype=self.multipart_subtype) + if self.body: + msg.attach(body_msg) + for attachment in self.attachments: + if isinstance(attachment, MIMEBase): + msg.attach(attachment) + else: + msg.attach(self._create_attachment(*attachment)) msg['Subject'] = self.subject msg['From'] = self.from_email msg['To'] = ', '.join(self.to) @@ -176,6 +209,8 @@ class EmailMessage(object): msg['Message-ID'] = make_msgid() if self.bcc: msg['Bcc'] = ', '.join(self.bcc) + for name, value in self.extra_headers.items(): + msg[name] = value return msg def recipients(self): @@ -189,6 +224,61 @@ class EmailMessage(object): """Send the email message.""" return self.get_connection(fail_silently).send_messages([self]) + def attach(self, filename=None, content=None, mimetype=None): + """ + Attaches a file with the given filename and content. The filename can + be omitted (useful for multipart/alternative messages) and the mimetype + is guessed, if not provided. + + If the first parameter is a MIMEBase subclass it is inserted directly + into the resulting message attachments. + """ + if isinstance(filename, MIMEBase): + assert content == mimetype == None + self.attachements.append(filename) + else: + assert content is not None + self.attachments.append((filename, content, mimetype)) + + def attach_file(self, path, mimetype=None): + """Attaches a file from the filesystem.""" + filename = os.path.basename(path) + content = open(path, 'rb').read() + self.attach(filename, content, mimetype) + + def _create_attachment(self, filename, content, mimetype=None): + """ + Convert the filename, content, mimetype triple into a MIME attachment + object. + """ + if mimetype is None: + mimetype, _ = mimetypes.guess_type(filename) + if mimetype is None: + mimetype = DEFAULT_ATTACHMENT_MIME_TYPE + basetype, subtype = mimetype.split('/', 1) + if basetype == 'text': + attachment = SafeMIMEText(content, subtype, settings.DEFAULT_CHARSET) + else: + # Encode non-text attachments with base64. + attachment = MIMEBase(basetype, subtype) + attachment.set_payload(content) + Encoders.encode_base64(attachment) + if filename: + attachment.add_header('Content-Disposition', 'attachment', filename=filename) + return attachment + +class EmailMultiAlternatives(EmailMessage): + """ + A version of EmailMessage that makes it easy to send multipart/alternative + messages. For example, including text and HTML versions of the text is + made easier. + """ + multipart_subtype = 'alternative' + + def attach_alternative(self, content, mimetype=None): + """Attach an alternative content representation.""" + self.attach(content=content, mimetype=mimetype) + def send_mail(subject, message, from_email, recipient_list, fail_silently=False, auth_user=None, auth_password=None): """ Easy wrapper for sending a single message to a recipient list. All members diff --git a/django/core/management.py b/django/core/management.py index 29ee9c2f90..1c049a790b 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -7,9 +7,10 @@ from optparse import OptionParser from django.utils import termcolors import os, re, shutil, sys, textwrap -# For Python 2.3 -if not hasattr(__builtins__, 'set'): - from sets import Set as set +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback # For backwards compatibility: get_version() used to be in this module. get_version = django.get_version @@ -58,12 +59,16 @@ def _is_valid_dir_name(s): def _get_installed_models(table_list): "Gets a set of all models that are installed, given a list of existing tables" - from django.db import models + from django.db import backend, models all_models = [] for app in models.get_apps(): for model in models.get_models(app): all_models.append(model) - return set([m for m in all_models if m._meta.db_table in table_list]) + if backend.uses_case_insensitive_names: + converter = str.upper + else: + converter = lambda x: x + return set([m for m in all_models if converter(m._meta.db_table) in map(converter, table_list)]) def _get_table_list(): "Gets a list of all db tables that are physically installed." @@ -99,6 +104,7 @@ get_rel_data_type = lambda f: (f.get_internal_type() in ('AutoField', 'PositiveI def get_sql_create(app): "Returns a list of the CREATE TABLE SQL statements for the given app." from django.db import get_creation_module, models + data_types = get_creation_module().DATA_TYPES if not data_types: @@ -170,15 +176,20 @@ def _get_sql_model_create(model, known_models=set()): rel_field = f data_type = f.get_internal_type() col_type = data_types[data_type] + tablespace = f.db_tablespace or opts.db_tablespace if col_type is not None: # Make the definition (e.g. 'foo VARCHAR(30)') for this field. field_output = [style.SQL_FIELD(backend.quote_name(f.column)), style.SQL_COLTYPE(col_type % rel_field.__dict__)] field_output.append(style.SQL_KEYWORD('%sNULL' % (not f.null and 'NOT ' or ''))) - if f.unique: + if f.unique and (not f.primary_key or backend.allows_unique_and_pk): field_output.append(style.SQL_KEYWORD('UNIQUE')) if f.primary_key: field_output.append(style.SQL_KEYWORD('PRIMARY KEY')) + if tablespace and backend.supports_tablespaces and (f.unique or f.primary_key) and backend.autoindexes_primary_keys: + # We must specify the index tablespace inline, because we + # won't be generating a CREATE INDEX statement for this field. + field_output.append(backend.get_tablespace_sql(tablespace, inline=True)) if f.rel: if f.rel.to in known_models: field_output.append(style.SQL_KEYWORD('REFERENCES') + ' ' + \ @@ -202,9 +213,19 @@ def _get_sql_model_create(model, known_models=set()): full_statement = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + style.SQL_TABLE(backend.quote_name(opts.db_table)) + ' ('] for i, line in enumerate(table_output): # Combine and add commas. full_statement.append(' %s%s' % (line, i < len(table_output)-1 and ',' or '')) - full_statement.append(');') + full_statement.append(')') + if opts.db_tablespace and backend.supports_tablespaces: + full_statement.append(backend.get_tablespace_sql(opts.db_tablespace)) + full_statement.append(';') final_output.append('\n'.join(full_statement)) + if opts.has_auto_field and hasattr(backend, 'get_autoinc_sql'): + # Add any extra SQL needed to support auto-incrementing primary keys + autoinc_sql = backend.get_autoinc_sql(opts.db_table) + if autoinc_sql: + for stmt in autoinc_sql: + final_output.append(stmt) + return final_output, pending_references def _get_sql_for_pending_references(model, pending_references): @@ -212,6 +233,7 @@ def _get_sql_for_pending_references(model, pending_references): Get any ALTER TABLE statements to add constraints after the fact. """ from django.db import backend, get_creation_module + from django.db.backends.util import truncate_name data_types = get_creation_module().DATA_TYPES final_output = [] @@ -228,7 +250,7 @@ def _get_sql_for_pending_references(model, pending_references): # So we are careful with character usage here. r_name = '%s_refs_%s_%x' % (r_col, col, abs(hash((r_table, table)))) final_output.append(style.SQL_KEYWORD('ALTER TABLE') + ' %s ADD CONSTRAINT %s FOREIGN KEY (%s) REFERENCES %s (%s)%s;' % \ - (backend.quote_name(r_table), r_name, + (backend.quote_name(r_table), truncate_name(r_name, backend.get_max_name_length()), backend.quote_name(r_col), backend.quote_name(table), backend.quote_name(col), backend.get_deferrable_sql())) del pending_references[model] @@ -244,12 +266,18 @@ def _get_many_to_many_sql_for_model(model): final_output = [] for f in opts.many_to_many: if not isinstance(f.rel, generic.GenericRel): + tablespace = f.db_tablespace or opts.db_tablespace + if tablespace and backend.supports_tablespaces and backend.autoindexes_primary_keys: + tablespace_sql = ' ' + backend.get_tablespace_sql(tablespace, inline=True) + else: + tablespace_sql = '' table_output = [style.SQL_KEYWORD('CREATE TABLE') + ' ' + \ style.SQL_TABLE(backend.quote_name(f.m2m_db_table())) + ' ('] - table_output.append(' %s %s %s,' % \ + table_output.append(' %s %s %s%s,' % \ (style.SQL_FIELD(backend.quote_name('id')), style.SQL_COLTYPE(data_types['AutoField']), - style.SQL_KEYWORD('NOT NULL PRIMARY KEY'))) + style.SQL_KEYWORD('NOT NULL PRIMARY KEY'), + tablespace_sql)) table_output.append(' %s %s %s %s (%s)%s,' % \ (style.SQL_FIELD(backend.quote_name(f.m2m_column_name())), style.SQL_COLTYPE(data_types[get_rel_data_type(opts.pk)] % opts.pk.__dict__), @@ -264,17 +292,30 @@ def _get_many_to_many_sql_for_model(model): style.SQL_TABLE(backend.quote_name(f.rel.to._meta.db_table)), style.SQL_FIELD(backend.quote_name(f.rel.to._meta.pk.column)), backend.get_deferrable_sql())) - table_output.append(' %s (%s, %s)' % \ + table_output.append(' %s (%s, %s)%s' % \ (style.SQL_KEYWORD('UNIQUE'), style.SQL_FIELD(backend.quote_name(f.m2m_column_name())), - style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name())))) - table_output.append(');') + style.SQL_FIELD(backend.quote_name(f.m2m_reverse_name())), + tablespace_sql)) + table_output.append(')') + if opts.db_tablespace and backend.supports_tablespaces: + # f.db_tablespace is only for indices, so ignore its value here. + table_output.append(backend.get_tablespace_sql(opts.db_tablespace)) + table_output.append(';') final_output.append('\n'.join(table_output)) + + # Add any extra SQL needed to support auto-incrementing PKs + autoinc_sql = backend.get_autoinc_sql(f.m2m_db_table()) + if autoinc_sql: + for stmt in autoinc_sql: + final_output.append(stmt) + return final_output def get_sql_delete(app): "Returns a list of the DROP TABLE SQL statements for the given app." from django.db import backend, connection, models, get_introspection_module + from django.db.backends.util import truncate_name introspection = get_introspection_module() # This should work even if a connection isn't available @@ -288,6 +329,10 @@ def get_sql_delete(app): table_names = introspection.get_table_list(cursor) else: table_names = [] + if backend.uses_case_insensitive_names: + table_name_converter = str.upper + else: + table_name_converter = lambda x: x output = [] @@ -297,7 +342,7 @@ def get_sql_delete(app): references_to_delete = {} app_models = models.get_models(app) for model in app_models: - if cursor and model._meta.db_table in table_names: + if cursor and table_name_converter(model._meta.db_table) in table_names: # The table exists, so it needs to be dropped opts = model._meta for f in opts.fields: @@ -307,7 +352,7 @@ def get_sql_delete(app): to_delete.add(model) for model in app_models: - if cursor and model._meta.db_table in table_names: + if cursor and table_name_converter(model._meta.db_table) in table_names: # Drop the table now output.append('%s %s;' % (style.SQL_KEYWORD('DROP TABLE'), style.SQL_TABLE(backend.quote_name(model._meta.db_table)))) @@ -317,20 +362,26 @@ def get_sql_delete(app): col = f.column r_table = model._meta.db_table r_col = model._meta.get_field(f.rel.field_name).column + r_name = '%s_refs_%s_%x' % (col, r_col, abs(hash((table, r_table)))) output.append('%s %s %s %s;' % \ (style.SQL_KEYWORD('ALTER TABLE'), style.SQL_TABLE(backend.quote_name(table)), style.SQL_KEYWORD(backend.get_drop_foreignkey_sql()), - style.SQL_FIELD(backend.quote_name('%s_refs_%s_%x' % (col, r_col, abs(hash((table, r_table)))))))) + style.SQL_FIELD(truncate_name(r_name, backend.get_max_name_length())))) del references_to_delete[model] + if model._meta.has_auto_field and hasattr(backend, 'get_drop_sequence'): + output.append(backend.get_drop_sequence(model._meta.db_table)) # Output DROP TABLE statements for many-to-many tables. for model in app_models: opts = model._meta for f in opts.many_to_many: - if cursor and f.m2m_db_table() in table_names: + if cursor and table_name_converter(f.m2m_db_table()) in table_names: output.append("%s %s;" % (style.SQL_KEYWORD('DROP TABLE'), style.SQL_TABLE(backend.quote_name(f.m2m_db_table())))) + if hasattr(backend, 'get_drop_sequence'): + output.append(backend.get_drop_sequence("%s_%s" % (model._meta.db_table, f.column))) + app_label = app_models[0]._meta.app_label @@ -429,14 +480,20 @@ def get_sql_indexes_for_model(model): output = [] for f in model._meta.fields: - if f.db_index: + if f.db_index and not ((f.primary_key or f.unique) and backend.autoindexes_primary_keys): unique = f.unique and 'UNIQUE ' or '' + tablespace = f.db_tablespace or model._meta.db_tablespace + if tablespace and backend.supports_tablespaces: + tablespace_sql = ' ' + backend.get_tablespace_sql(tablespace) + else: + tablespace_sql = '' output.append( style.SQL_KEYWORD('CREATE %sINDEX' % unique) + ' ' + \ style.SQL_TABLE(backend.quote_name('%s_%s' % (model._meta.db_table, f.column))) + ' ' + \ style.SQL_KEYWORD('ON') + ' ' + \ style.SQL_TABLE(backend.quote_name(model._meta.db_table)) + ' ' + \ - "(%s);" % style.SQL_FIELD(backend.quote_name(f.column)) + "(%s)" % style.SQL_FIELD(backend.quote_name(f.column)) + \ + "%s;" % tablespace_sql ) return output @@ -460,7 +517,7 @@ def _emit_post_sync_signal(created_models, verbosity, interactive): def syncdb(verbosity=1, interactive=True): "Creates the database tables for all apps in INSTALLED_APPS whose tables haven't already been created." - from django.db import connection, transaction, models, get_creation_module + from django.db import backend, connection, transaction, models, get_creation_module from django.conf import settings disable_termcolors() @@ -483,6 +540,10 @@ def syncdb(verbosity=1, interactive=True): # Get a list of all existing database tables, # so we know what needs to be added. table_list = _get_table_list() + if backend.uses_case_insensitive_names: + table_name_converter = str.upper + else: + table_name_converter = lambda x: x # Get a list of already installed *models* so that references work right. seen_models = _get_installed_models(table_list) @@ -497,7 +558,7 @@ def syncdb(verbosity=1, interactive=True): # Create the model's database table, if it doesn't already exist. if verbosity >= 2: print "Processing %s.%s model" % (app_name, model._meta.object_name) - if model._meta.db_table in table_list: + if table_name_converter(model._meta.db_table) in table_list: continue sql, references = _get_sql_model_create(model, seen_models) seen_models.add(model) @@ -509,7 +570,7 @@ def syncdb(verbosity=1, interactive=True): print "Creating table %s" % model._meta.db_table for statement in sql: cursor.execute(statement) - table_list.append(model._meta.db_table) + table_list.append(table_name_converter(model._meta.db_table)) # Create the m2m tables. This must be done after all tables have been created # to ensure that all referred tables will exist. @@ -828,7 +889,7 @@ def inspectdb(): except NotImplementedError: indexes = {} for i, row in enumerate(introspection_module.get_table_description(cursor, table_name)): - att_name = row[0] + att_name = row[0].lower() comment_notes = [] # Holds Field notes, to be displayed in a Python comment. extra_params = {} # Holds Field parameters such as 'db_column'. @@ -1324,7 +1385,7 @@ def load_data(fixture_labels, verbosity=1): # Keep a count of the installed objects and fixtures count = [0,0] models = set() - + humanize = lambda dirname: dirname and "'%s'" % dirname or 'absolute path' # Get a cursor (even though we don't need one yet). This has @@ -1402,7 +1463,7 @@ def load_data(fixture_labels, verbosity=1): if verbosity > 1: print "No %s fixture '%s' in %s." % \ (format, fixture_name, humanize(fixture_dir)) - + if count[0] > 0: sequence_sql = backend.get_sql_sequence_reset(style, models) if sequence_sql: @@ -1410,10 +1471,10 @@ def load_data(fixture_labels, verbosity=1): print "Resetting sequences" for line in sequence_sql: cursor.execute(line) - + transaction.commit() transaction.leave_transaction_management() - + if count[0] == 0: if verbosity > 0: print "No fixtures found." @@ -1628,7 +1689,9 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING, argv=None): if not mod_list: parser.print_usage_and_exit() if action not in NO_SQL_TRANSACTION: - print style.SQL_KEYWORD("BEGIN;") + from django.db import backend + if backend.get_start_transaction_sql(): + print style.SQL_KEYWORD(backend.get_start_transaction_sql()) for mod in mod_list: if action == 'reset': output = action_mapping[action](mod, options.interactive) diff --git a/django/core/servers/basehttp.py b/django/core/servers/basehttp.py index 80a0bf6a91..64ed739473 100644 --- a/django/core/servers/basehttp.py +++ b/django/core/servers/basehttp.py @@ -9,7 +9,7 @@ been reviewed for security issues. Don't use it for production use. from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer from types import ListType, StringType -import os, re, sys, time, urllib +import os, re, sys, time, urllib, mimetypes __version__ = "0.1" __all__ = ['WSGIServer','WSGIRequestHandler','demo_app'] @@ -630,6 +630,9 @@ class AdminMediaHandler(object): else: status = '200 OK' headers = {} + mime_type = mimetypes.guess_type(file_path)[0] + if mime_type: + headers['Content-Type'] = mime_type output = [fp.read()] fp.close() start_response(status, headers.items()) diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index 38b3263da1..f4c2dc4677 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -9,8 +9,17 @@ a string) and returns a tuple in this format: from django.http import Http404 from django.core.exceptions import ImproperlyConfigured, ViewDoesNotExist +from django.utils.functional import memoize import re +try: + reversed +except NameError: + from django.utils.itercompat import reversed # Python 2.3 fallback + +_resolver_cache = {} # Maps urlconf modules to RegexURLResolver instances. +_callable_cache = {} # Maps view and url pattern names to their view functions. + class Resolver404(Http404): pass @@ -18,6 +27,34 @@ class NoReverseMatch(Exception): # Don't make this raise an error when used in a template. silent_variable_failure = True +def get_callable(lookup_view, can_fail=False): + """ + Convert a string version of a function name to the callable object. + + If the lookup_view is not an import path, it is assumed to be a URL pattern + label and the original string is returned. + + If can_fail is True, lookup_view might be a URL pattern label, so errors + during the import fail and the string is returned. + """ + if not callable(lookup_view): + mod_name, func_name = get_mod_func(lookup_view) + try: + if func_name != '': + lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name) + except (ImportError, AttributeError): + if not can_fail: + raise + return lookup_view +get_callable = memoize(get_callable, _callable_cache) + +def get_resolver(urlconf): + if urlconf is None: + from django.conf import settings + urlconf = settings.ROOT_URLCONF + return RegexURLResolver(r'^/', urlconf) +get_resolver = memoize(get_resolver, _resolver_cache) + def get_mod_func(callback): # Converts 'django.views.news.stories.story_detail' to # ['django.views.news.stories', 'story_detail'] @@ -129,12 +166,13 @@ class RegexURLPattern(object): def _get_callback(self): if self._callback is not None: return self._callback - mod_name, func_name = get_mod_func(self._callback_str) try: - self._callback = getattr(__import__(mod_name, {}, {}, ['']), func_name) + self._callback = get_callable(self._callback_str) except ImportError, e: + mod_name, _ = get_mod_func(self._callback_str) raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e)) except AttributeError, e: + mod_name, func_name = get_mod_func(self._callback_str) raise ViewDoesNotExist, "Tried %s in module %s. Error was: %s" % (func_name, mod_name, str(e)) return self._callback callback = property(_get_callback) @@ -160,6 +198,19 @@ class RegexURLResolver(object): self.urlconf_name = urlconf_name self.callback = None self.default_kwargs = default_kwargs or {} + self._reverse_dict = {} + + def _get_reverse_dict(self): + if not self._reverse_dict and hasattr(self.urlconf_module, 'urlpatterns'): + for pattern in reversed(self.urlconf_module.urlpatterns): + if isinstance(pattern, RegexURLResolver): + for key, value in pattern.reverse_dict.iteritems(): + self._reverse_dict[key] = (pattern,) + value + else: + self._reverse_dict[pattern.callback] = (pattern,) + self._reverse_dict[pattern.name] = (pattern,) + return self._reverse_dict + reverse_dict = property(_get_reverse_dict) def resolve(self, path): tried = [] @@ -209,24 +260,12 @@ class RegexURLResolver(object): return self._resolve_special('500') def reverse(self, lookup_view, *args, **kwargs): - if not callable(lookup_view): - mod_name, func_name = get_mod_func(lookup_view) - try: - lookup_view = getattr(__import__(mod_name, {}, {}, ['']), func_name) - except (ImportError, AttributeError): - if func_name != '': - raise NoReverseMatch - for pattern in self.urlconf_module.urlpatterns: - if isinstance(pattern, RegexURLResolver): - try: - return pattern.reverse_helper(lookup_view, *args, **kwargs) - except NoReverseMatch: - continue - elif pattern.callback == lookup_view or pattern.name == lookup_view: - try: - return pattern.reverse_helper(*args, **kwargs) - except NoReverseMatch: - continue + try: + lookup_view = get_callable(lookup_view, True) + except (ImportError, AttributeError): + raise NoReverseMatch + if lookup_view in self.reverse_dict: + return ''.join([reverse_helper(part.regex, *args, **kwargs) for part in self.reverse_dict[lookup_view]]) raise NoReverseMatch def reverse_helper(self, lookup_view, *args, **kwargs): @@ -235,17 +274,10 @@ class RegexURLResolver(object): return result + sub_match def resolve(path, urlconf=None): - if urlconf is None: - from django.conf import settings - urlconf = settings.ROOT_URLCONF - resolver = RegexURLResolver(r'^/', urlconf) - return resolver.resolve(path) + return get_resolver(urlconf).resolve(path) def reverse(viewname, urlconf=None, args=None, kwargs=None): args = args or [] kwargs = kwargs or {} - if urlconf is None: - from django.conf import settings - urlconf = settings.ROOT_URLCONF - resolver = RegexURLResolver(r'^/', urlconf) - return '/' + resolver.reverse(viewname, *args, **kwargs) + return '/' + get_resolver(urlconf).reverse(viewname, *args, **kwargs) + diff --git a/django/db/backends/ado_mssql/base.py b/django/db/backends/ado_mssql/base.py index 52363ed705..0deb6aae64 100644 --- a/django/db/backends/ado_mssql/base.py +++ b/django/db/backends/ado_mssql/base.py @@ -89,7 +89,14 @@ class DatabaseWrapper(local): self.connection.close() self.connection = None +allows_group_by_ordinal = True +allows_unique_and_pk = True +autoindexes_primary_keys = True +needs_datetime_string_cast = True +needs_upper_for_iops = False supports_constraints = True +supports_tablespaces = True +uses_case_insensitive_names = False def quote_name(name): if name.startswith('[') and name.endswith(']'): @@ -117,6 +124,9 @@ def get_date_trunc_sql(lookup_type, field_name): if lookup_type=='day': return "Convert(datetime, Convert(varchar(12), %s))" % field_name +def get_datetime_cast_sql(): + return None + def get_limit_offset_sql(limit, offset=None): # TODO: This is a guess. Make sure this is correct. sql = "LIMIT %s" % limit @@ -139,6 +149,18 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "DEFAULT" +def get_max_name_length(): + return None + +def get_start_transaction_sql(): + return "BEGIN;" + +def get_tablespace_sql(tablespace, inline=False): + return "ON %s" % quote_name(tablespace) + +def get_autoinc_sql(table): + return None + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables diff --git a/django/db/backends/dummy/base.py b/django/db/backends/dummy/base.py index d0ec897407..f47cbdf3d4 100644 --- a/django/db/backends/dummy/base.py +++ b/django/db/backends/dummy/base.py @@ -33,6 +33,7 @@ class DatabaseWrapper: pass # close() supports_constraints = False +supports_tablespaces = False quote_name = complain dictfetchone = complain dictfetchmany = complain @@ -40,11 +41,16 @@ dictfetchall = complain get_last_insert_id = complain get_date_extract_sql = complain get_date_trunc_sql = complain +get_datetime_cast_sql = complain get_limit_offset_sql = complain get_random_function_sql = complain get_deferrable_sql = complain get_fulltext_search_sql = complain get_drop_foreignkey_sql = complain +get_pk_default_value = complain +get_max_name_length = ignore +get_start_transaction_sql = complain +get_autoinc_sql = complain get_sql_flush = complain get_sql_sequence_reset = complain diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index d4cb1fa964..4c64134118 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -134,7 +134,14 @@ class DatabaseWrapper(local): self.server_version = tuple([int(x) for x in m.groups()]) return self.server_version +allows_group_by_ordinal = True +allows_unique_and_pk = True +autoindexes_primary_keys = False +needs_datetime_string_cast = True # MySQLdb requires a typecast for dates +needs_upper_for_iops = False supports_constraints = True +supports_tablespaces = False +uses_case_insensitive_names = False def quote_name(name): if name.startswith("`") and name.endswith("`"): @@ -167,6 +174,9 @@ def get_date_trunc_sql(lookup_type, field_name): sql = "CAST(DATE_FORMAT(%s, '%s') AS DATETIME)" % (field_name, format_str) return sql +def get_datetime_cast_sql(): + return None + def get_limit_offset_sql(limit, offset=None): sql = "LIMIT " if offset and offset != 0: @@ -188,11 +198,20 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "DEFAULT" +def get_max_name_length(): + return None; + +def get_start_transaction_sql(): + return "BEGIN;" + +def get_autoinc_sql(table): + return None + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables themselves) and put the database in an empty 'initial' state - + """ # NB: The generated SQL below is specific to MySQL # 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements @@ -204,7 +223,7 @@ def get_sql_flush(style, tables, sequences): style.SQL_FIELD(quote_name(table)) ) for table in tables] + \ ['SET FOREIGN_KEY_CHECKS = 1;'] - + # 'ALTER TABLE table AUTO_INCREMENT = 1;'... style SQL statements # to reset sequence indices sql.extend(["%s %s %s %s %s;" % \ @@ -228,6 +247,8 @@ OPERATOR_MAPPING = { 'iexact': 'LIKE %s', 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', + 'regex': 'REGEXP BINARY %s', + 'iregex': 'REGEXP %s', 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', diff --git a/django/db/backends/mysql_old/base.py b/django/db/backends/mysql_old/base.py index ac3b75efde..ca9d2c8b50 100644 --- a/django/db/backends/mysql_old/base.py +++ b/django/db/backends/mysql_old/base.py @@ -135,7 +135,14 @@ class DatabaseWrapper(local): self.server_version = tuple([int(x) for x in m.groups()]) return self.server_version +allows_group_by_ordinal = True +allows_unique_and_pk = True +autoindexes_primary_keys = False +needs_datetime_string_cast = True # MySQLdb requires a typecast for dates +needs_upper_for_iops = False supports_constraints = True +supports_tablespaces = False +uses_case_insensitive_names = False def quote_name(name): if name.startswith("`") and name.endswith("`"): @@ -168,6 +175,9 @@ def get_date_trunc_sql(lookup_type, field_name): sql = "CAST(DATE_FORMAT(%s, '%s') AS DATETIME)" % (field_name, format_str) return sql +def get_datetime_cast_sql(): + return None + def get_limit_offset_sql(limit, offset=None): sql = "LIMIT " if offset and offset != 0: @@ -189,11 +199,20 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "DEFAULT" +def get_max_name_length(): + return None; + +def get_start_transaction_sql(): + return "BEGIN;" + +def get_autoinc_sql(table): + return None + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables themselves) and put the database in an empty 'initial' state - + """ # NB: The generated SQL below is specific to MySQL # 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements @@ -205,7 +224,7 @@ def get_sql_flush(style, tables, sequences): style.SQL_FIELD(quote_name(table)) ) for table in tables] + \ ['SET FOREIGN_KEY_CHECKS = 1;'] - + # 'ALTER TABLE table AUTO_INCREMENT = 1;'... style SQL statements # to reset sequence indices sql.extend(["%s %s %s %s %s;" % \ @@ -229,6 +248,8 @@ OPERATOR_MAPPING = { 'iexact': 'LIKE %s', 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', + 'regex': 'REGEXP BINARY %s', + 'iregex': 'REGEXP %s', 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 2bc88bb7b9..48b3c27355 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -4,12 +4,16 @@ Oracle database backend for Django. Requires cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/ """ +from django.conf import settings from django.db.backends import util try: import cx_Oracle as Database except ImportError, e: from django.core.exceptions import ImproperlyConfigured raise ImproperlyConfigured, "Error loading cx_Oracle module: %s" % e +import datetime +from django.utils.datastructures import SortedDict + DatabaseError = Database.Error IntegrityError = Database.IntegrityError @@ -31,7 +35,6 @@ class DatabaseWrapper(local): return self.connection is not None def cursor(self): - from django.conf import settings if not self._valid_connection(): if len(settings.DATABASE_HOST.strip()) == 0: settings.DATABASE_HOST = 'localhost' @@ -41,25 +44,37 @@ class DatabaseWrapper(local): else: conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME) self.connection = Database.connect(conn_string, **self.options) - return FormatStylePlaceholderCursor(self.connection) + cursor = FormatStylePlaceholderCursor(self.connection) + # default arraysize of 1 is highly sub-optimal + cursor.arraysize = 100 + # set oracle date to ansi date format + cursor.execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'") + cursor.execute("ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS.FF'") + if settings.DEBUG: + return util.CursorDebugWrapper(cursor, self) + return cursor def _commit(self): if self.connection is not None: - self.connection.commit() + return self.connection.commit() def _rollback(self): if self.connection is not None: - try: - self.connection.rollback() - except Database.NotSupportedError: - pass + return self.connection.rollback() def close(self): if self.connection is not None: self.connection.close() self.connection = None +allows_group_by_ordinal = False +allows_unique_and_pk = False # Suppress UNIQUE/PK for Oracle (ORA-02259) +autoindexes_primary_keys = True +needs_datetime_string_cast = False +needs_upper_for_iops = True supports_constraints = True +supports_tablespaces = True +uses_case_insensitive_names = True class FormatStylePlaceholderCursor(Database.Cursor): """ @@ -67,45 +82,75 @@ class FormatStylePlaceholderCursor(Database.Cursor): This fixes it -- but note that if you want to use a literal "%s" in a query, you'll need to use "%%s". """ + def _rewrite_args(self, query, params=None): + if params is None: + params = [] + else: + # cx_Oracle can't handle unicode parameters, so cast to str for now + for i, param in enumerate(params): + if type(param) == unicode: + try: + params[i] = param.encode('utf-8') + except UnicodeError: + params[i] = str(param) + args = [(':arg%d' % i) for i in range(len(params))] + query = query % tuple(args) + # cx_Oracle wants no trailing ';' for SQL statements. For PL/SQL, it + # it does want a trailing ';' but not a trailing '/'. However, these + # characters must be included in the original query in case the query + # is being passed to SQL*Plus. + if query.endswith(';') or query.endswith('/'): + query = query[:-1] + return query, params + def execute(self, query, params=None): - if params is None: params = [] - query = self.convert_arguments(query, len(params)) + query, params = self._rewrite_args(query, params) return Database.Cursor.execute(self, query, params) def executemany(self, query, params=None): - if params is None: params = [] - query = self.convert_arguments(query, len(params[0])) + query, params = self._rewrite_args(query, params) return Database.Cursor.executemany(self, query, params) - def convert_arguments(self, query, num_params): - # replace occurances of "%s" with ":arg" - Oracle requires colons for parameter placeholders. - args = [':arg' for i in range(num_params)] - return query % tuple(args) - def quote_name(name): - return name + # SQL92 requires delimited (quoted) names to be case-sensitive. When + # not quoted, Oracle has case-insensitive behavior for identifiers, but + # always defaults to uppercase. + # We simplify things by making Oracle identifiers always uppercase. + if not name.startswith('"') and not name.endswith('"'): + name = '"%s"' % util.truncate_name(name.upper(), get_max_name_length()) + return name.upper() dictfetchone = util.dictfetchone dictfetchmany = util.dictfetchmany dictfetchall = util.dictfetchall def get_last_insert_id(cursor, table_name, pk_name): - query = "SELECT %s_sq.currval from dual" % table_name - cursor.execute(query) + sq_name = util.truncate_name(table_name, get_max_name_length()-3) + cursor.execute('SELECT %s_sq.currval FROM dual' % sq_name) return cursor.fetchone()[0] def get_date_extract_sql(lookup_type, table_name): # lookup_type is 'year', 'month', 'day' - # http://www.psoug.org/reference/date_func.html + # http://download-east.oracle.com/docs/cd/B10501_01/server.920/a96540/functions42a.htm#1017163 return "EXTRACT(%s FROM %s)" % (lookup_type, table_name) def get_date_trunc_sql(lookup_type, field_name): - return "EXTRACT(%s FROM TRUNC(%s))" % (lookup_type, field_name) + # lookup_type is 'year', 'month', 'day' + # Oracle uses TRUNC() for both dates and numbers. + # http://download-east.oracle.com/docs/cd/B10501_01/server.920/a96540/functions155a.htm#SQLRF06151 + if lookup_type == 'day': + sql = 'TRUNC(%s)' % (field_name,) + else: + sql = "TRUNC(%s, '%s')" % (field_name, lookup_type) + return sql + +def get_datetime_cast_sql(): + return "TO_TIMESTAMP(%s, 'YYYY-MM-DD HH24:MI:SS.FF')" def get_limit_offset_sql(limit, offset=None): # Limits and offset are too complicated to be handled here. - # Instead, they are handled in django/db/query.py. - pass + # Instead, they are handled in django/db/backends/oracle/query.py. + return "" def get_random_function_sql(): return "DBMS_RANDOM.RANDOM" @@ -117,40 +162,363 @@ def get_fulltext_search_sql(field_name): raise NotImplementedError def get_drop_foreignkey_sql(): - return "DROP FOREIGN KEY" + return "DROP CONSTRAINT" def get_pk_default_value(): return "DEFAULT" +def get_max_name_length(): + return 30 + +def get_start_transaction_sql(): + return None + +def get_tablespace_sql(tablespace, inline=False): + return "%sTABLESPACE %s" % ((inline and "USING INDEX " or ""), quote_name(tablespace)) + +def get_autoinc_sql(table): + # To simulate auto-incrementing primary keys in Oracle, we have to + # create a sequence and a trigger. + sq_name = get_sequence_name(table) + tr_name = get_trigger_name(table) + sequence_sql = 'CREATE SEQUENCE %s;' % sq_name + trigger_sql = """CREATE OR REPLACE TRIGGER %s + BEFORE INSERT ON %s + FOR EACH ROW + WHEN (new.id IS NULL) + BEGIN + SELECT %s.nextval INTO :new.id FROM dual; + END; + /""" % (tr_name, quote_name(table), sq_name) + return sequence_sql, trigger_sql + +def get_drop_sequence(table): + return "DROP SEQUENCE %s;" % quote_name(get_sequence_name(table)) + +def _get_sequence_reset_sql(): + # TODO: colorize this SQL code with style.SQL_KEYWORD(), etc. + return """ + DECLARE + startvalue integer; + cval integer; + BEGIN + LOCK TABLE %(table)s IN SHARE MODE; + SELECT NVL(MAX(id), 0) INTO startvalue FROM %(table)s; + SELECT %(sequence)s.nextval INTO cval FROM dual; + cval := startvalue - cval; + IF cval != 0 THEN + EXECUTE IMMEDIATE 'ALTER SEQUENCE %(sequence)s MINVALUE 0 INCREMENT BY '||cval; + SELECT %(sequence)s.nextval INTO cval FROM dual; + EXECUTE IMMEDIATE 'ALTER SEQUENCE %(sequence)s INCREMENT BY 1'; + END IF; + COMMIT; + END; + /""" + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables themselves) and put the database in an empty 'initial' state """ - # Return a list of 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements - # TODO - SQL not actually tested against Oracle yet! - # TODO - autoincrement indices reset required? See other get_sql_flush() implementations - sql = ['%s %s;' % \ - (style.SQL_KEYWORD('TRUNCATE'), - style.SQL_FIELD(quote_name(table)) - ) for table in tables] + # Return a list of 'TRUNCATE x;', 'TRUNCATE y;', + # 'TRUNCATE z;'... style SQL statements + if tables: + # Oracle does support TRUNCATE, but it seems to get us into + # FK referential trouble, whereas DELETE FROM table works. + sql = ['%s %s %s;' % \ + (style.SQL_KEYWORD('DELETE'), + style.SQL_KEYWORD('FROM'), + style.SQL_FIELD(quote_name(table)) + ) for table in tables] + # Since we've just deleted all the rows, running our sequence + # ALTER code will reset the sequence to 0. + for sequence_info in sequences: + table_name = sequence_info['table'] + seq_name = get_sequence_name(table_name) + query = _get_sequence_reset_sql() % {'sequence':seq_name, + 'table':quote_name(table_name)} + sql.append(query) + return sql + else: + return [] + +def get_sequence_name(table): + name_length = get_max_name_length() - 3 + return '%s_SQ' % util.truncate_name(table, name_length).upper() def get_sql_sequence_reset(style, model_list): "Returns a list of the SQL statements to reset sequences for the given models." - # No sequence reset required - return [] + from django.db import models + output = [] + query = _get_sequence_reset_sql() + for model in model_list: + for f in model._meta.fields: + if isinstance(f, models.AutoField): + sequence_name = get_sequence_name(model._meta.db_table) + output.append(query % {'sequence':sequence_name, + 'table':model._meta.db_table}) + break # Only one AutoField is allowed per model, so don't bother continuing. + for f in model._meta.many_to_many: + sequence_name = get_sequence_name(f.m2m_db_table()) + output.append(query % {'sequence':sequence_name, + 'table':f.m2m_db_table()}) + return output + +def get_trigger_name(table): + name_length = get_max_name_length() - 3 + return '%s_TR' % util.truncate_name(table, name_length).upper() + +def get_query_set_class(DefaultQuerySet): + "Create a custom QuerySet class for Oracle." + + from django.db import backend, connection + from django.db.models.query import EmptyResultSet, GET_ITERATOR_CHUNK_SIZE, quote_only_if_word + + class OracleQuerySet(DefaultQuerySet): + + def iterator(self): + "Performs the SELECT database lookup of this QuerySet." + + from django.db.models.query import get_cached_row + + # self._select is a dictionary, and dictionaries' key order is + # undefined, so we convert it to a list of tuples. + extra_select = self._select.items() + + full_query = None + + try: + try: + select, sql, params, full_query = self._get_sql_clause(get_full_query=True) + except TypeError: + select, sql, params = self._get_sql_clause() + except EmptyResultSet: + raise StopIteration + if not full_query: + full_query = "SELECT %s%s\n%s" % \ + ((self._distinct and "DISTINCT " or ""), + ', '.join(select), sql) + + cursor = connection.cursor() + cursor.execute(full_query, params) + + fill_cache = self._select_related + fields = self.model._meta.fields + index_end = len(fields) + + # so here's the logic; + # 1. retrieve each row in turn + # 2. convert NCLOBs + + while 1: + rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE) + if not rows: + raise StopIteration + for row in rows: + row = self.resolve_columns(row, fields) + if fill_cache: + obj, index_end = get_cached_row(klass=self.model, row=row, + index_start=0, max_depth=self._max_related_depth) + else: + obj = self.model(*row[:index_end]) + for i, k in enumerate(extra_select): + setattr(obj, k[0], row[index_end+i]) + yield obj + + + def _get_sql_clause(self, get_full_query=False): + from django.db.models.query import fill_table_cache, \ + handle_legacy_orderlist, orderfield2column + + opts = self.model._meta + + # Construct the fundamental parts of the query: SELECT X FROM Y WHERE Z. + select = ["%s.%s" % (backend.quote_name(opts.db_table), backend.quote_name(f.column)) for f in opts.fields] + tables = [quote_only_if_word(t) for t in self._tables] + joins = SortedDict() + where = self._where[:] + params = self._params[:] + + # Convert self._filters into SQL. + joins2, where2, params2 = self._filters.get_sql(opts) + joins.update(joins2) + where.extend(where2) + params.extend(params2) + + # Add additional tables and WHERE clauses based on select_related. + if self._select_related: + fill_table_cache(opts, select, tables, where, opts.db_table, [opts.db_table]) + + # Add any additional SELECTs. + if self._select: + select.extend(['(%s) AS %s' % (quote_only_if_word(s[1]), backend.quote_name(s[0])) for s in self._select.items()]) + + # Start composing the body of the SQL statement. + sql = [" FROM", backend.quote_name(opts.db_table)] + + # Compose the join dictionary into SQL describing the joins. + if joins: + sql.append(" ".join(["%s %s %s ON %s" % (join_type, table, alias, condition) + for (alias, (table, join_type, condition)) in joins.items()])) + + # Compose the tables clause into SQL. + if tables: + sql.append(", " + ", ".join(tables)) + + # Compose the where clause into SQL. + if where: + sql.append(where and "WHERE " + " AND ".join(where)) + + # ORDER BY clause + order_by = [] + if self._order_by is not None: + ordering_to_use = self._order_by + else: + ordering_to_use = opts.ordering + for f in handle_legacy_orderlist(ordering_to_use): + if f == '?': # Special case. + order_by.append(backend.get_random_function_sql()) + else: + if f.startswith('-'): + col_name = f[1:] + order = "DESC" + else: + col_name = f + order = "ASC" + if "." in col_name: + table_prefix, col_name = col_name.split('.', 1) + table_prefix = backend.quote_name(table_prefix) + '.' + else: + # Use the database table as a column prefix if it wasn't given, + # and if the requested column isn't a custom SELECT. + if "." not in col_name and col_name not in (self._select or ()): + table_prefix = backend.quote_name(opts.db_table) + '.' + else: + table_prefix = '' + order_by.append('%s%s %s' % (table_prefix, backend.quote_name(orderfield2column(col_name, opts)), order)) + if order_by: + sql.append("ORDER BY " + ", ".join(order_by)) + + # Look for column name collisions in the select elements + # and fix them with an AS alias. This allows us to do a + # SELECT * later in the paging query. + cols = [clause.split('.')[-1] for clause in select] + for index, col in enumerate(cols): + if cols.count(col) > 1: + col = '%s%d' % (col.replace('"', ''), index) + cols[index] = col + select[index] = '%s AS %s' % (select[index], col) + + # LIMIT and OFFSET clauses + # To support limits and offsets, Oracle requires some funky rewriting of an otherwise normal looking query. + select_clause = ",".join(select) + distinct = (self._distinct and "DISTINCT " or "") + + if order_by: + order_by_clause = " OVER (ORDER BY %s )" % (", ".join(order_by)) + else: + #Oracle's row_number() function always requires an order-by clause. + #So we need to define a default order-by, since none was provided. + order_by_clause = " OVER (ORDER BY %s.%s)" % \ + (backend.quote_name(opts.db_table), + backend.quote_name(opts.fields[0].db_column or opts.fields[0].column)) + # limit_and_offset_clause + if self._limit is None: + assert self._offset is None, "'offset' is not allowed without 'limit'" + + if self._offset is not None: + offset = int(self._offset) + else: + offset = 0 + if self._limit is not None: + limit = int(self._limit) + else: + limit = None + + limit_and_offset_clause = '' + if limit is not None: + limit_and_offset_clause = "WHERE rn > %s AND rn <= %s" % (offset, limit+offset) + elif offset: + limit_and_offset_clause = "WHERE rn > %s" % (offset) + + if len(limit_and_offset_clause) > 0: + fmt = \ +"""SELECT * FROM + (SELECT %s%s, + ROW_NUMBER()%s AS rn + %s) +%s""" + full_query = fmt % (distinct, select_clause, + order_by_clause, ' '.join(sql).strip(), + limit_and_offset_clause) + else: + full_query = None + + if get_full_query: + return select, " ".join(sql), params, full_query + else: + return select, " ".join(sql), params + + def resolve_columns(self, row, fields=()): + from django.db.models.fields import DateField, DateTimeField, \ + TimeField, BooleanField, NullBooleanField, DecimalField, Field + values = [] + for value, field in map(None, row, fields): + if isinstance(value, Database.LOB): + value = value.read() + # Oracle stores empty strings as null. We need to undo this in + # order to adhere to the Django convention of using the empty + # string instead of null, but only if the field accepts the + # empty string. + if value is None and isinstance(field, Field) and field.empty_strings_allowed: + value = '' + # Convert 1 or 0 to True or False + elif value in (1, 0) and isinstance(field, (BooleanField, NullBooleanField)): + value = bool(value) + # Convert floats to decimals + elif value is not None and isinstance(field, DecimalField): + value = util.typecast_decimal(field.format_number(value)) + # cx_Oracle always returns datetime.datetime objects for + # DATE and TIMESTAMP columns, but Django wants to see a + # python datetime.date, .time, or .datetime. We use the type + # of the Field to determine which to cast to, but it's not + # always available. + # As a workaround, we cast to date if all the time-related + # values are 0, or to time if the date is 1/1/1900. + # This could be cleaned a bit by adding a method to the Field + # classes to normalize values from the database (the to_python + # method is used for validation and isn't what we want here). + elif isinstance(value, Database.Timestamp): + # In Python 2.3, the cx_Oracle driver returns its own + # Timestamp object that we must convert to a datetime class. + if not isinstance(value, datetime.datetime): + value = datetime.datetime(value.year, value.month, value.day, value.hour, + value.minute, value.second, value.fsecond) + if isinstance(field, DateTimeField): + pass # DateTimeField subclasses DateField so must be checked first. + elif isinstance(field, DateField): + value = value.date() + elif isinstance(field, TimeField) or (value.year == 1900 and value.month == value.day == 1): + value = value.time() + elif value.hour == value.minute == value.second == value.microsecond == 0: + value = value.date() + values.append(value) + return values + + return OracleQuerySet + OPERATOR_MAPPING = { 'exact': '= %s', - 'iexact': 'LIKE %s', - 'contains': 'LIKE %s', - 'icontains': 'LIKE %s', + 'iexact': '= UPPER(%s)', + 'contains': "LIKE %s ESCAPE '\\'", + 'icontains': "LIKE UPPER(%s) ESCAPE '\\'", 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', 'lte': '<= %s', - 'startswith': 'LIKE %s', - 'endswith': 'LIKE %s', - 'istartswith': 'LIKE %s', - 'iendswith': 'LIKE %s', + 'startswith': "LIKE %s ESCAPE '\\'", + 'endswith': "LIKE %s ESCAPE '\\'", + 'istartswith': "LIKE UPPER(%s) ESCAPE '\\'", + 'iendswith': "LIKE UPPER(%s) ESCAPE '\\'", } diff --git a/django/db/backends/oracle/client.py b/django/db/backends/oracle/client.py index 7e32ebef2f..372783aa97 100644 --- a/django/db/backends/oracle/client.py +++ b/django/db/backends/oracle/client.py @@ -2,9 +2,10 @@ from django.conf import settings import os def runshell(): - args = '' - args += settings.DATABASE_USER + dsn = settings.DATABASE_USER if settings.DATABASE_PASSWORD: - args += "/%s" % settings.DATABASE_PASSWORD - args += "@%s" % settings.DATABASE_NAME - os.execvp('sqlplus', args) + dsn += "/%s" % settings.DATABASE_PASSWORD + if settings.DATABASE_NAME: + dsn += "@%s" % settings.DATABASE_NAME + args = ["sqlplus", "-L", dsn] + os.execvp("sqlplus", args) diff --git a/django/db/backends/oracle/creation.py b/django/db/backends/oracle/creation.py index 14a864ac28..6b1a30d55d 100644 --- a/django/db/backends/oracle/creation.py +++ b/django/db/backends/oracle/creation.py @@ -1,26 +1,304 @@ +import sys, time +from django.core import management + +# This dictionary maps Field objects to their associated Oracle column +# types, as strings. Column-type strings can contain format strings; they'll +# be interpolated against the values of Field.__dict__ before being output. +# If a column type is set to None, it won't be included in the output. DATA_TYPES = { - 'AutoField': 'number(38)', - 'BooleanField': 'number(1)', - 'CharField': 'varchar2(%(maxlength)s)', - 'CommaSeparatedIntegerField': 'varchar2(%(maxlength)s)', - 'DateField': 'date', - 'DateTimeField': 'date', - 'DecimalField': 'number(%(max_digits)s, %(decimal_places)s)', - 'FileField': 'varchar2(100)', - 'FilePathField': 'varchar2(100)', - 'FloatField': 'double precision', - 'ImageField': 'varchar2(100)', - 'IntegerField': 'integer', - 'IPAddressField': 'char(15)', - 'ManyToManyField': None, - 'NullBooleanField': 'integer', - 'OneToOneField': 'integer', - 'PhoneNumberField': 'varchar(20)', - 'PositiveIntegerField': 'integer', - 'PositiveSmallIntegerField': 'smallint', - 'SlugField': 'varchar(50)', - 'SmallIntegerField': 'smallint', - 'TextField': 'long', - 'TimeField': 'timestamp', - 'USStateField': 'varchar(2)', + 'AutoField': 'NUMBER(11)', + 'BooleanField': 'NUMBER(1) CHECK (%(column)s IN (0,1))', + 'CharField': 'VARCHAR2(%(maxlength)s)', + 'CommaSeparatedIntegerField': 'VARCHAR2(%(maxlength)s)', + 'DateField': 'DATE', + 'DateTimeField': 'TIMESTAMP', + 'DecimalField': 'NUMBER(%(max_digits)s, %(decimal_places)s)', + 'FileField': 'VARCHAR2(100)', + 'FilePathField': 'VARCHAR2(100)', + 'FloatField': 'DOUBLE PRECISION', + 'ImageField': 'VARCHAR2(100)', + 'IntegerField': 'NUMBER(11)', + 'IPAddressField': 'VARCHAR2(15)', + 'ManyToManyField': None, + 'NullBooleanField': 'NUMBER(1) CHECK ((%(column)s IN (0,1)) OR (%(column)s IS NULL))', + 'OneToOneField': 'NUMBER(11)', + 'PhoneNumberField': 'VARCHAR2(20)', + 'PositiveIntegerField': 'NUMBER(11) CHECK (%(column)s >= 0)', + 'PositiveSmallIntegerField': 'NUMBER(11) CHECK (%(column)s >= 0)', + 'SlugField': 'VARCHAR2(50)', + 'SmallIntegerField': 'NUMBER(11)', + 'TextField': 'NCLOB', + 'TimeField': 'TIMESTAMP', + 'URLField': 'VARCHAR2(200)', + 'USStateField': 'CHAR(2)', } + +TEST_DATABASE_PREFIX = 'test_' +PASSWORD = 'Im_a_lumberjack' +REMEMBER = {} + + +def create_test_db(settings, connection, backend, verbosity=1, autoclobber=False): + + TEST_DATABASE_NAME = _test_database_name(settings) + TEST_DATABASE_USER = _test_database_user(settings) + TEST_DATABASE_PASSWD = _test_database_passwd(settings) + TEST_DATABASE_TBLSPACE = _test_database_tblspace(settings) + TEST_DATABASE_TBLSPACE_TMP = _test_database_tblspace_tmp(settings) + + parameters = { + 'dbname': TEST_DATABASE_NAME, + 'user': TEST_DATABASE_USER, + 'password': TEST_DATABASE_PASSWD, + 'tblspace': TEST_DATABASE_TBLSPACE, + 'tblspace_temp': TEST_DATABASE_TBLSPACE_TMP, + } + + REMEMBER['user'] = settings.DATABASE_USER + REMEMBER['passwd'] = settings.DATABASE_PASSWORD + + cursor = connection.cursor() + if _test_database_create(settings): + if verbosity >= 1: + print 'Creating test database...' + try: + _create_test_db(cursor, parameters, verbosity) + except Exception, e: + sys.stderr.write("Got an error creating the test database: %s\n" % e) + if not autoclobber: + confirm = raw_input("It appears the test database, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_DATABASE_NAME) + if autoclobber or confirm == 'yes': + try: + if verbosity >= 1: + print "Destroying old test database..." + _destroy_test_db(cursor, parameters, verbosity) + if verbosity >= 1: + print "Creating test database..." + _create_test_db(cursor, parameters, verbosity) + except Exception, e: + sys.stderr.write("Got an error recreating the test database: %s\n" % e) + sys.exit(2) + else: + print "Tests cancelled." + sys.exit(1) + + if _test_user_create(settings): + if verbosity >= 1: + print "Creating test user..." + try: + _create_test_user(cursor, parameters, verbosity) + except Exception, e: + sys.stderr.write("Got an error creating the test user: %s\n" % e) + if not autoclobber: + confirm = raw_input("It appears the test user, %s, already exists. Type 'yes' to delete it, or 'no' to cancel: " % TEST_DATABASE_USER) + if autoclobber or confirm == 'yes': + try: + if verbosity >= 1: + print "Destroying old test user..." + _destroy_test_user(cursor, parameters, verbosity) + if verbosity >= 1: + print "Creating test user..." + _create_test_user(cursor, parameters, verbosity) + except Exception, e: + sys.stderr.write("Got an error recreating the test user: %s\n" % e) + sys.exit(2) + else: + print "Tests cancelled." + sys.exit(1) + + connection.close() + settings.DATABASE_USER = TEST_DATABASE_USER + settings.DATABASE_PASSWORD = TEST_DATABASE_PASSWD + + management.syncdb(verbosity, interactive=False) + + # Get a cursor (even though we don't need one yet). This has + # the side effect of initializing the test database. + cursor = connection.cursor() + + +def destroy_test_db(settings, connection, backend, old_database_name, verbosity=1): + connection.close() + + TEST_DATABASE_NAME = _test_database_name(settings) + TEST_DATABASE_USER = _test_database_user(settings) + TEST_DATABASE_PASSWD = _test_database_passwd(settings) + TEST_DATABASE_TBLSPACE = _test_database_tblspace(settings) + TEST_DATABASE_TBLSPACE_TMP = _test_database_tblspace_tmp(settings) + + settings.DATABASE_NAME = old_database_name + settings.DATABASE_USER = REMEMBER['user'] + settings.DATABASE_PASSWORD = REMEMBER['passwd'] + + parameters = { + 'dbname': TEST_DATABASE_NAME, + 'user': TEST_DATABASE_USER, + 'password': TEST_DATABASE_PASSWD, + 'tblspace': TEST_DATABASE_TBLSPACE, + 'tblspace_temp': TEST_DATABASE_TBLSPACE_TMP, + } + + REMEMBER['user'] = settings.DATABASE_USER + REMEMBER['passwd'] = settings.DATABASE_PASSWORD + + cursor = connection.cursor() + time.sleep(1) # To avoid "database is being accessed by other users" errors. + if _test_user_create(settings): + if verbosity >= 1: + print 'Destroying test user...' + _destroy_test_user(cursor, parameters, verbosity) + if _test_database_create(settings): + if verbosity >= 1: + print 'Destroying test database...' + _destroy_test_db(cursor, parameters, verbosity) + connection.close() + + +def _create_test_db(cursor, parameters, verbosity): + if verbosity >= 2: + print "_create_test_db(): dbname = %s" % parameters['dbname'] + statements = [ + """CREATE TABLESPACE %(tblspace)s + DATAFILE '%(tblspace)s.dbf' SIZE 20M + REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 100M + """, + """CREATE TEMPORARY TABLESPACE %(tblspace_temp)s + TEMPFILE '%(tblspace_temp)s.dbf' SIZE 20M + REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 100M + """, + ] + _execute_statements(cursor, statements, parameters, verbosity) + + +def _create_test_user(cursor, parameters, verbosity): + if verbosity >= 2: + print "_create_test_user(): username = %s" % parameters['user'] + statements = [ + """CREATE USER %(user)s + IDENTIFIED BY %(password)s + DEFAULT TABLESPACE %(tblspace)s + TEMPORARY TABLESPACE %(tblspace_temp)s + """, + """GRANT CONNECT, RESOURCE TO %(user)s""", + ] + _execute_statements(cursor, statements, parameters, verbosity) + + +def _destroy_test_db(cursor, parameters, verbosity): + if verbosity >= 2: + print "_destroy_test_db(): dbname=%s" % parameters['dbname'] + statements = [ + 'DROP TABLESPACE %(tblspace)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS', + 'DROP TABLESPACE %(tblspace_temp)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS', + ] + _execute_statements(cursor, statements, parameters, verbosity) + + +def _destroy_test_user(cursor, parameters, verbosity): + if verbosity >= 2: + print "_destroy_test_user(): user=%s" % parameters['user'] + print "Be patient. This can take some time..." + statements = [ + 'DROP USER %(user)s CASCADE', + ] + _execute_statements(cursor, statements, parameters, verbosity) + + +def _execute_statements(cursor, statements, parameters, verbosity): + for template in statements: + stmt = template % parameters + if verbosity >= 2: + print stmt + try: + cursor.execute(stmt) + except Exception, err: + sys.stderr.write("Failed (%s)\n" % (err)) + raise + + +def _test_database_name(settings): + name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME + try: + if settings.TEST_DATABASE_NAME: + name = settings.TEST_DATABASE_NAME + except AttributeError: + pass + except: + raise + return name + + +def _test_database_create(settings): + name = True + try: + if settings.TEST_DATABASE_CREATE: + name = True + else: + name = False + except AttributeError: + pass + except: + raise + return name + + +def _test_user_create(settings): + name = True + try: + if settings.TEST_USER_CREATE: + name = True + else: + name = False + except AttributeError: + pass + except: + raise + return name + + +def _test_database_user(settings): + name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME + try: + if settings.TEST_DATABASE_USER: + name = settings.TEST_DATABASE_USER + except AttributeError: + pass + except: + raise + return name + + +def _test_database_passwd(settings): + name = PASSWORD + try: + if settings.TEST_DATABASE_PASSWD: + name = settings.TEST_DATABASE_PASSWD + except AttributeError: + pass + except: + raise + return name + + +def _test_database_tblspace(settings): + name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME + try: + if settings.TEST_DATABASE_TBLSPACE: + name = settings.TEST_DATABASE_TBLSPACE + except AttributeError: + pass + except: + raise + return name + + +def _test_database_tblspace_tmp(settings): + name = TEST_DATABASE_PREFIX + settings.DATABASE_NAME + '_temp' + try: + if settings.TEST_DATABASE_TBLSPACE_TMP: + name = settings.TEST_DATABASE_TBLSPACE_TMP + except AttributeError: + pass + except: + raise + return name diff --git a/django/db/backends/oracle/introspection.py b/django/db/backends/oracle/introspection.py index 7634206178..44430a0029 100644 --- a/django/db/backends/oracle/introspection.py +++ b/django/db/backends/oracle/introspection.py @@ -1,14 +1,19 @@ +from django.db.backends.oracle.base import quote_name import re +import cx_Oracle + foreign_key_re = re.compile(r"\sCONSTRAINT `[^`]*` FOREIGN KEY \(`([^`]*)`\) REFERENCES `([^`]*)` \(`([^`]*)`\)") def get_table_list(cursor): "Returns a list of table names in the current database." cursor.execute("SELECT TABLE_NAME FROM USER_TABLES") - return [row[0] for row in cursor.fetchall()] + return [row[0].upper() for row in cursor.fetchall()] def get_table_description(cursor, table_name): - return table_name + "Returns a description of the table, with the DB-API cursor.description interface." + cursor.execute("SELECT * FROM %s WHERE ROWNUM < 2" % quote_name(table_name)) + return cursor.description def _name_to_index(cursor, table_name): """ @@ -22,7 +27,24 @@ def get_relations(cursor, table_name): Returns a dictionary of {field_index: (field_index_other_table, other_table)} representing all relationships to the given table. Indexes are 0-based. """ - raise NotImplementedError + cursor.execute(""" +SELECT ta.column_id - 1, tb.table_name, tb.column_id - 1 +FROM user_constraints, USER_CONS_COLUMNS ca, USER_CONS_COLUMNS cb, + user_tab_cols ta, user_tab_cols tb +WHERE user_constraints.table_name = %s AND + ta.table_name = %s AND + ta.column_name = ca.column_name AND + ca.table_name = %s AND + user_constraints.constraint_name = ca.constraint_name AND + user_constraints.r_constraint_name = cb.constraint_name AND + cb.table_name = tb.table_name AND + cb.column_name = tb.column_name AND + ca.position = cb.position""", [table_name, table_name, table_name]) + + relations = {} + for row in cursor.fetchall(): + relations[row[0]] = (row[2], row[1]) + return relations def get_indexes(cursor, table_name): """ @@ -31,20 +53,46 @@ def get_indexes(cursor, table_name): {'primary_key': boolean representing whether it's the primary key, 'unique': boolean representing whether it's a unique index} """ - raise NotImplementedError + # This query retrieves each index on the given table, including the + # first associated field name + # "We were in the nick of time; you were in great peril!" + sql = """ +WITH primarycols AS ( + SELECT user_cons_columns.table_name, user_cons_columns.column_name, 1 AS PRIMARYCOL + FROM user_cons_columns, user_constraints + WHERE user_cons_columns.constraint_name = user_constraints.constraint_name AND + user_constraints.constraint_type = 'P' AND + user_cons_columns.table_name = %s), + uniquecols AS ( + SELECT user_ind_columns.table_name, user_ind_columns.column_name, 1 AS UNIQUECOL + FROM user_indexes, user_ind_columns + WHERE uniqueness = 'UNIQUE' AND + user_indexes.index_name = user_ind_columns.index_name AND + user_ind_columns.table_name = %s) +SELECT allcols.column_name, primarycols.primarycol, uniquecols.UNIQUECOL +FROM (SELECT column_name FROM primarycols UNION SELECT column_name FROM +uniquecols) allcols, + primarycols, uniquecols +WHERE allcols.column_name = primarycols.column_name (+) AND + allcols.column_name = uniquecols.column_name (+) + """ + cursor.execute(sql, [table_name, table_name]) + indexes = {} + for row in cursor.fetchall(): + # row[1] (idx.indkey) is stored in the DB as an array. It comes out as + # a string of space-separated integers. This designates the field + # indexes (1-based) of the fields that have indexes on the table. + # Here, we skip any indexes across multiple fields. + indexes[row[0]] = {'primary_key': row[1], 'unique': row[2]} + return indexes -# Maps type codes to Django Field types. +# Maps type objects to Django Field types. DATA_TYPES_REVERSE = { - 16: 'BooleanField', - 21: 'SmallIntegerField', - 23: 'IntegerField', - 25: 'TextField', - 869: 'IPAddressField', - 1043: 'CharField', - 1082: 'DateField', - 1083: 'TimeField', - 1114: 'DateTimeField', - 1184: 'DateTimeField', - 1266: 'TimeField', - 1700: 'DecimalField', + cx_Oracle.CLOB: 'TextField', + cx_Oracle.DATETIME: 'DateTimeField', + cx_Oracle.FIXED_CHAR: 'CharField', + cx_Oracle.NCLOB: 'TextField', + cx_Oracle.NUMBER: 'DecimalField', + cx_Oracle.STRING: 'CharField', + cx_Oracle.TIMESTAMP: 'DateTimeField', } diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index fedbb6b7f1..611852e0dc 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -87,7 +87,7 @@ class DatabaseWrapper(local): global postgres_version if not postgres_version: cursor.execute("SELECT version()") - postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')] + postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')] if settings.DEBUG: return util.CursorDebugWrapper(cursor, self) return cursor @@ -105,7 +105,14 @@ class DatabaseWrapper(local): self.connection.close() self.connection = None +allows_group_by_ordinal = True +allows_unique_and_pk = True +autoindexes_primary_keys = True +needs_datetime_string_cast = True +needs_upper_for_iops = False supports_constraints = True +supports_tablespaces = False +uses_case_insensitive_names = False def quote_name(name): if name.startswith('"') and name.endswith('"'): @@ -138,6 +145,9 @@ def get_date_trunc_sql(lookup_type, field_name): # http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name) +def get_datetime_cast_sql(): + return None + def get_limit_offset_sql(limit, offset=None): sql = "LIMIT %s" % limit if offset and offset != 0: @@ -149,7 +159,7 @@ def get_random_function_sql(): def get_deferrable_sql(): return " DEFERRABLE INITIALLY DEFERRED" - + def get_fulltext_search_sql(field_name): raise NotImplementedError @@ -159,12 +169,21 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "DEFAULT" +def get_max_name_length(): + return None + +def get_start_transaction_sql(): + return "BEGIN;" + +def get_autoinc_sql(table): + return None + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables themselves) and put the database in an empty 'initial' state - - """ + + """ if tables: if postgres_version[0] >= 8 and postgres_version[1] >= 1: # Postgres 8.1+ can do 'TRUNCATE x, y, z...;'. In fact, it *has to* in order to be able to @@ -175,7 +194,7 @@ def get_sql_flush(style, tables, sequences): style.SQL_FIELD(', '.join([quote_name(table) for table in tables])) )] else: - # Older versions of Postgres can't do TRUNCATE in a single call, so they must use + # Older versions of Postgres can't do TRUNCATE in a single call, so they must use # a simple delete. sql = ['%s %s %s;' % \ (style.SQL_KEYWORD('DELETE'), @@ -243,7 +262,7 @@ def get_sql_sequence_reset(style, model_list): style.SQL_KEYWORD('FROM'), style.SQL_TABLE(f.m2m_db_table()))) return output - + # Register these custom typecasts, because Django expects dates/times to be # in Python's native (standard-library) datetime/time format, whereas psycopg # use mx.DateTime by default. @@ -261,6 +280,8 @@ OPERATOR_MAPPING = { 'iexact': 'ILIKE %s', 'contains': 'LIKE %s', 'icontains': 'ILIKE %s', + 'regex': '~ %s', + 'iregex': '~* %s', 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', diff --git a/django/db/backends/postgresql_psycopg2/base.py b/django/db/backends/postgresql_psycopg2/base.py index d9ad363ac1..17d36a8613 100644 --- a/django/db/backends/postgresql_psycopg2/base.py +++ b/django/db/backends/postgresql_psycopg2/base.py @@ -55,7 +55,7 @@ class DatabaseWrapper(local): global postgres_version if not postgres_version: cursor.execute("SELECT version()") - postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')] + postgres_version = [int(val) for val in cursor.fetchone()[0].split()[1].split('.')] if settings.DEBUG: return util.CursorDebugWrapper(cursor, self) return cursor @@ -73,7 +73,14 @@ class DatabaseWrapper(local): self.connection.close() self.connection = None +allows_group_by_ordinal = True +allows_unique_and_pk = True +autoindexes_primary_keys = True +needs_datetime_string_cast = False +needs_upper_for_iops = False supports_constraints = True +supports_tablespaces = False +uses_case_insensitive_names = False def quote_name(name): if name.startswith('"') and name.endswith('"'): @@ -98,6 +105,9 @@ def get_date_trunc_sql(lookup_type, field_name): # http://www.postgresql.org/docs/8.0/static/functions-datetime.html#FUNCTIONS-DATETIME-TRUNC return "DATE_TRUNC('%s', %s)" % (lookup_type, field_name) +def get_datetime_cast_sql(): + return None + def get_limit_offset_sql(limit, offset=None): sql = "LIMIT %s" % limit if offset and offset != 0: @@ -119,6 +129,15 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "DEFAULT" +def get_max_name_length(): + return None + +def get_start_transaction_sql(): + return "BEGIN;" + +def get_autoinc_sql(table): + return None + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables @@ -139,7 +158,7 @@ def get_sql_flush(style, tables, sequences): style.SQL_KEYWORD('FROM'), style.SQL_FIELD(quote_name(table)) ) for table in tables] - + # 'ALTER SEQUENCE sequence_name RESTART WITH 1;'... style SQL statements # to reset sequence indices for sequence in sequences: @@ -200,12 +219,14 @@ def get_sql_sequence_reset(style, model_list): style.SQL_KEYWORD('FROM'), style.SQL_TABLE(f.m2m_db_table()))) return output - + OPERATOR_MAPPING = { 'exact': '= %s', 'iexact': 'ILIKE %s', 'contains': 'LIKE %s', 'icontains': 'ILIKE %s', + 'regex': '~ %s', + 'iregex': '~* %s', 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 5cd67a32f5..c4ecf5f578 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -64,9 +64,10 @@ class DatabaseWrapper(local): } kwargs.update(self.options) self.connection = Database.connect(**kwargs) - # Register extract and date_trunc functions. + # Register extract, date_trunc, and regexp functions. self.connection.create_function("django_extract", 2, _sqlite_extract) self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc) + self.connection.create_function("regexp", 2, _sqlite_regexp) cursor = self.connection.cursor(factory=SQLiteCursorWrapper) cursor.row_factory = utf8rowFactory if settings.DEBUG: @@ -107,7 +108,14 @@ class SQLiteCursorWrapper(Database.Cursor): def convert_query(self, query, num_params): return query % tuple("?" * num_params) +allows_group_by_ordinal = True +allows_unique_and_pk = True +autoindexes_primary_keys = True +needs_datetime_string_cast = True +needs_upper_for_iops = False supports_constraints = False +supports_tablespaces = False +uses_case_insensitive_names = False def quote_name(name): if name.startswith('"') and name.endswith('"'): @@ -139,6 +147,9 @@ def get_date_trunc_sql(lookup_type, field_name): # sqlite doesn't support DATE_TRUNC, so we fake it as above. return 'django_date_trunc("%s", %s)' % (lookup_type.lower(), field_name) +def get_datetime_cast_sql(): + return None + def get_limit_offset_sql(limit, offset=None): sql = "LIMIT %s" % limit if offset and offset != 0: @@ -160,11 +171,20 @@ def get_drop_foreignkey_sql(): def get_pk_default_value(): return "NULL" +def get_max_name_length(): + return None + +def get_start_transaction_sql(): + return "BEGIN;" + +def get_autoinc_sql(table): + return None + def get_sql_flush(style, tables, sequences): """Return a list of SQL statements required to remove all data from all tables in the database (without actually removing the tables themselves) and put the database in an empty 'initial' state - + """ # NB: The generated SQL below is specific to SQLite # Note: The DELETE FROM... SQL generated below works for SQLite databases @@ -182,7 +202,7 @@ def get_sql_sequence_reset(style, model_list): "Returns a list of the SQL statements to reset sequences for the given models." # No sequence reset required return [] - + def _sqlite_date_trunc(lookup_type, dt): try: dt = util.typecast_timestamp(dt) @@ -195,6 +215,13 @@ def _sqlite_date_trunc(lookup_type, dt): elif lookup_type == 'day': return "%i-%02i-%02i 00:00:00" % (dt.year, dt.month, dt.day) +def _sqlite_regexp(re_pattern, re_string): + import re + try: + return bool(re.search(re_pattern, re_string)) + except: + return False + # SQLite requires LIKE statements to include an ESCAPE clause if the value # being escaped has a percent or underscore in it. # See http://www.sqlite.org/lang_expr.html for an explanation. @@ -203,6 +230,8 @@ OPERATOR_MAPPING = { 'iexact': "LIKE %s ESCAPE '\\'", 'contains': "LIKE %s ESCAPE '\\'", 'icontains': "LIKE %s ESCAPE '\\'", + 'regex': 'REGEXP %s', + 'iregex': "REGEXP '(?i)' || %s", 'gt': '> %s', 'gte': '>= %s', 'lt': '< %s', diff --git a/django/db/backends/util.py b/django/db/backends/util.py index 81c752e664..58f2d1e990 100644 --- a/django/db/backends/util.py +++ b/django/db/backends/util.py @@ -1,4 +1,5 @@ import datetime +import md5 from time import time try: @@ -107,6 +108,16 @@ def rev_typecast_decimal(d): return None return str(d) +def truncate_name(name, length=None): + """Shortens a string to a repeatable mangled version with the given length. + """ + if length is None or len(name) <= length: + return name + + hash = md5.md5(name).hexdigest()[:4] + + return '%s%s' % (name[:length-4], hash) + ################################################################################## # Helper functions for dictfetch* for databases that don't natively support them # ################################################################################## diff --git a/django/db/models/base.py b/django/db/models/base.py index 899b1086c9..7a1110a718 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -96,9 +96,9 @@ class Model(object): def __init__(self, *args, **kwargs): dispatcher.send(signal=signals.pre_init, sender=self.__class__, args=args, kwargs=kwargs) - + # There is a rather weird disparity here; if kwargs, it's set, then args - # overrides it. It should be one or the other; don't duplicate the work + # overrides it. It should be one or the other; don't duplicate the work # The reason for the kwargs check is that standard iterator passes in by # args, and nstantiation for iteration is 33% faster. args_len = len(args) @@ -122,10 +122,10 @@ class Model(object): # Maintain compatibility with existing calls. if isinstance(field.rel, ManyToOneRel): kwargs.pop(field.attname, None) - + # Now we're left with the unprocessed fields that *must* come from # keywords, or default. - + for field in fields_iter: if kwargs: if isinstance(field.rel, ManyToOneRel): @@ -147,7 +147,7 @@ class Model(object): try: val = getattr(rel_obj, field.rel.get_related_field().attname) except AttributeError: - raise TypeError("Invalid value: %r should be a %s instance, not a %s" % + raise TypeError("Invalid value: %r should be a %s instance, not a %s" % (field.name, field.rel.to, type(rel_obj))) else: val = kwargs.pop(field.attname, field.get_default()) @@ -215,17 +215,18 @@ class Model(object): record_exists = True if pk_set: # Determine whether a record with the primary key already exists. - cursor.execute("SELECT 1 FROM %s WHERE %s=%%s LIMIT 1" % \ - (backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.pk.column)), [pk_val]) + cursor.execute("SELECT COUNT(*) FROM %s WHERE %s=%%s" % \ + (backend.quote_name(self._meta.db_table), backend.quote_name(self._meta.pk.column)), + self._meta.pk.get_db_prep_lookup('exact', pk_val)) # If it does already exist, do an UPDATE. - if cursor.fetchone(): + if cursor.fetchone()[0] > 0: db_values = [f.get_db_prep_save(f.pre_save(self, False)) for f in non_pks] if db_values: cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \ (backend.quote_name(self._meta.db_table), ','.join(['%s=%%s' % backend.quote_name(f.column) for f in non_pks]), backend.quote_name(self._meta.pk.column)), - db_values + [pk_val]) + db_values + self._meta.pk.get_db_prep_lookup('exact', pk_val)) else: record_exists = False if not pk_set or not record_exists: diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 9ba3ac96c6..34cf2f0eee 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -72,12 +72,17 @@ class Field(object): maxlength=None, unique=False, blank=False, null=False, db_index=False, core=False, rel=None, default=NOT_PROVIDED, editable=True, serialize=True, unique_for_date=None, unique_for_month=None, unique_for_year=None, - validator_list=None, choices=None, radio_admin=None, help_text='', db_column=None): + validator_list=None, choices=None, radio_admin=None, help_text='', db_column=None, + db_tablespace=None): self.name = name self.verbose_name = verbose_name self.primary_key = primary_key self.maxlength, self.unique = maxlength, unique self.blank, self.null = blank, null + # Oracle treats the empty string ('') as null, so coerce the null + # option whenever '' is a possible value. + if self.empty_strings_allowed and settings.DATABASE_ENGINE == 'oracle': + self.null = True self.core, self.rel, self.default = core, rel, default self.editable = editable self.serialize = serialize @@ -88,6 +93,7 @@ class Field(object): self.radio_admin = radio_admin self.help_text = help_text self.db_column = db_column + self.db_tablespace = db_tablespace # Set db_index to True if the field has a relationship and doesn't explicitly set db_index. self.db_index = db_index @@ -166,7 +172,7 @@ class Field(object): def get_db_prep_lookup(self, lookup_type, value): "Returns field's value prepared for database lookup." - if lookup_type in ('exact', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'): + if lookup_type in ('exact', 'regex', 'iregex', 'gt', 'gte', 'lt', 'lte', 'month', 'day', 'search'): return [value] elif lookup_type in ('range', 'in'): return value @@ -198,7 +204,7 @@ class Field(object): if callable(self.default): return self.default() return self.default - if not self.empty_strings_allowed or self.null: + if not self.empty_strings_allowed or (self.null and settings.DATABASE_ENGINE != 'oracle'): return None return "" @@ -792,6 +798,7 @@ class IntegerField(Field): return super(IntegerField, self).formfield(**defaults) class IPAddressField(Field): + empty_strings_allowed = False def __init__(self, *args, **kwargs): kwargs['maxlength'] = 15 Field.__init__(self, *args, **kwargs) @@ -803,6 +810,7 @@ class IPAddressField(Field): validators.isValidIPAddress4(field_data, None) class NullBooleanField(Field): + empty_strings_allowed = False def __init__(self, *args, **kwargs): kwargs['null'] = True Field.__init__(self, *args, **kwargs) @@ -877,10 +885,18 @@ class TimeField(Field): Field.__init__(self, verbose_name, name, **kwargs) def get_db_prep_lookup(self, lookup_type, value): - if lookup_type == 'range': - value = [str(v) for v in value] + if settings.DATABASE_ENGINE == 'oracle': + # Oracle requires a date in order to parse. + def prep(value): + if isinstance(value, datetime.time): + value = datetime.datetime.combine(datetime.date(1900, 1, 1), value) + return str(value) else: - value = str(value) + prep = str + if lookup_type == 'range': + value = [prep(v) for v in value] + else: + value = prep(value) return Field.get_db_prep_lookup(self, lookup_type, value) def pre_save(self, model_instance, add): @@ -898,7 +914,15 @@ class TimeField(Field): # doesn't support microseconds. if settings.DATABASE_ENGINE == 'mysql' and hasattr(value, 'microsecond'): value = value.replace(microsecond=0) - value = str(value) + if settings.DATABASE_ENGINE == 'oracle': + # cx_Oracle expects a datetime.datetime to persist into TIMESTAMP field. + if isinstance(value, datetime.time): + value = datetime.datetime(1900, 1, 1, value.hour, value.minute, + value.second, value.microsecond) + elif isinstance(value, basestring): + value = datetime.datetime(*(time.strptime(value, '%H:%M:%S')[:6])) + else: + value = str(value) return Field.get_db_prep_save(self, value) def get_manipulator_field_objs(self): diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index 1b5716eb00..347ec8feb8 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -10,9 +10,10 @@ from django import oldforms from django import newforms as forms from django.dispatch import dispatcher -# For Python 2.3 -if not hasattr(__builtins__, 'set'): - from sets import Set as set +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback # Values for Relation.edit_inline. TABULAR, STACKED = 1, 2 @@ -335,10 +336,7 @@ def create_many_related_manager(superclass): (target_col_name, self.join_table, source_col_name, target_col_name, ",".join(['%s'] * len(new_ids))), [self._pk_val] + list(new_ids)) - if cursor.rowcount is not None and cursor.rowcount != 0: - existing_ids = set([row[0] for row in cursor.fetchmany(cursor.rowcount)]) - else: - existing_ids = set() + existing_ids = set([row[0] for row in cursor.fetchall()]) # Add the ones that aren't there already for obj_id in (new_ids - existing_ids): diff --git a/django/db/models/options.py b/django/db/models/options.py index d75bfd495d..d804cc944d 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -12,7 +12,7 @@ get_verbose_name = lambda class_name: re.sub('(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]| DEFAULT_NAMES = ('verbose_name', 'db_table', 'ordering', 'unique_together', 'permissions', 'get_latest_by', - 'order_with_respect_to', 'app_label') + 'order_with_respect_to', 'app_label', 'db_tablespace') class Options(object): def __init__(self, meta): @@ -26,6 +26,7 @@ class Options(object): self.object_name, self.app_label = None, None self.get_latest_by = None self.order_with_respect_to = None + self.db_tablespace = None self.admin = None self.meta = meta self.pk = None @@ -58,6 +59,8 @@ class Options(object): del self.meta def _prepare(self, model): + from django.db import backend + from django.db.backends.util import truncate_name if self.order_with_respect_to: self.order_with_respect_to = self.get_field(self.order_with_respect_to) self.ordering = ('_order',) @@ -72,6 +75,8 @@ class Options(object): # If the db_table wasn't provided, use the app_label + module_name. if not self.db_table: self.db_table = "%s_%s" % (self.app_label, self.module_name) + self.db_table = truncate_name(self.db_table, + backend.get_max_name_length()) def add_field(self, field): # Insert the given field in the order in which it was created, using diff --git a/django/db/models/query.py b/django/db/models/query.py index a6e702be18..92bc9d78ed 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -1,15 +1,18 @@ +from django.conf import settings from django.db import backend, connection, transaction from django.db.models.fields import DateField, FieldDoesNotExist from django.db.models import signals, loading from django.dispatch import dispatcher from django.utils.datastructures import SortedDict from django.contrib.contenttypes import generic +import datetime import operator import re -# For Python 2.3 -if not hasattr(__builtins__, 'set'): - from sets import Set as set +try: + set +except NameError: + from sets import Set as set # Python 2.3 fallback # The string constant used to separate query parts LOOKUP_SEPARATOR = '__' @@ -20,6 +23,7 @@ QUERY_TERMS = ( 'gt', 'gte', 'lt', 'lte', 'in', 'startswith', 'istartswith', 'endswith', 'iendswith', 'range', 'year', 'month', 'day', 'isnull', 'search', + 'regex', 'iregex', ) # Size of each "chunk" for get_iterator calls. @@ -77,7 +81,7 @@ def quote_only_if_word(word): else: return backend.quote_name(word) -class QuerySet(object): +class _QuerySet(object): "Represents a lazy database lookup for a set of objects" def __init__(self, model=None): self.model = model @@ -181,13 +185,18 @@ class QuerySet(object): cursor = connection.cursor() cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) + fill_cache = self._select_related - index_end = len(self.model._meta.fields) + fields = self.model._meta.fields + index_end = len(fields) + has_resolve_columns = hasattr(self, 'resolve_columns') while 1: rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE) if not rows: raise StopIteration for row in rows: + if has_resolve_columns: + row = self.resolve_columns(row, fields) if fill_cache: obj, index_end = get_cached_row(klass=self.model, row=row, index_start=0, max_depth=self._max_related_depth) @@ -551,6 +560,12 @@ class QuerySet(object): return select, " ".join(sql), params +# Use the backend's QuerySet class if it defines one, otherwise use _QuerySet. +if hasattr(backend, 'get_query_set_class'): + QuerySet = backend.get_query_set_class(_QuerySet) +else: + QuerySet = _QuerySet + class ValuesQuerySet(QuerySet): def __init__(self, *args, **kwargs): super(ValuesQuerySet, self).__init__(*args, **kwargs) @@ -565,35 +580,38 @@ class ValuesQuerySet(QuerySet): # self._fields is a list of field names to fetch. if self._fields: - #columns = [self.model._meta.get_field(f, many_to_many=False).column for f in self._fields] if not self._select: - columns = [self.model._meta.get_field(f, many_to_many=False).column for f in self._fields] + fields = [self.model._meta.get_field(f, many_to_many=False) for f in self._fields] else: - columns = [] + fields = [] for f in self._fields: if f in [field.name for field in self.model._meta.fields]: - columns.append( self.model._meta.get_field(f, many_to_many=False).column ) + fields.append(self.model._meta.get_field(f, many_to_many=False)) elif not self._select.has_key( f ): raise FieldDoesNotExist, '%s has no field named %r' % ( self.model._meta.object_name, f ) field_names = self._fields else: # Default to all fields. - columns = [f.column for f in self.model._meta.fields] - field_names = [f.attname for f in self.model._meta.fields] + fields = self.model._meta.fields + field_names = [f.attname for f in fields] + columns = [f.column for f in fields] select = ['%s.%s' % (backend.quote_name(self.model._meta.db_table), backend.quote_name(c)) for c in columns] - # Add any additional SELECTs. if self._select: select.extend(['(%s) AS %s' % (quote_only_if_word(s[1]), backend.quote_name(s[0])) for s in self._select.items()]) cursor = connection.cursor() cursor.execute("SELECT " + (self._distinct and "DISTINCT " or "") + ",".join(select) + sql, params) + + has_resolve_columns = hasattr(self, 'resolve_columns') while 1: rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE) if not rows: raise StopIteration for row in rows: + if has_resolve_columns: + row = self.resolve_columns(row, fields) yield dict(zip(field_names, row)) def _clone(self, klass=None, **kwargs): @@ -604,25 +622,49 @@ class ValuesQuerySet(QuerySet): class DateQuerySet(QuerySet): def iterator(self): from django.db.backends.util import typecast_timestamp + from django.db.models.fields import DateTimeField self._order_by = () # Clear this because it'll mess things up otherwise. if self._field.null: self._where.append('%s.%s IS NOT NULL' % \ (backend.quote_name(self.model._meta.db_table), backend.quote_name(self._field.column))) - try: select, sql, params = self._get_sql_clause() except EmptyResultSet: raise StopIteration - sql = 'SELECT %s %s GROUP BY 1 ORDER BY 1 %s' % \ + table_name = backend.quote_name(self.model._meta.db_table) + field_name = backend.quote_name(self._field.column) + + if backend.allows_group_by_ordinal: + group_by = '1' + else: + group_by = backend.get_date_trunc_sql(self._kind, + '%s.%s' % (table_name, field_name)) + + sql = 'SELECT %s %s GROUP BY %s ORDER BY 1 %s' % \ (backend.get_date_trunc_sql(self._kind, '%s.%s' % (backend.quote_name(self.model._meta.db_table), - backend.quote_name(self._field.column))), sql, self._order) + backend.quote_name(self._field.column))), sql, group_by, self._order) cursor = connection.cursor() cursor.execute(sql, params) - # We have to manually run typecast_timestamp(str()) on the results, because - # MySQL doesn't automatically cast the result of date functions as datetime - # objects -- MySQL returns the values as strings, instead. - return [typecast_timestamp(str(row[0])) for row in cursor.fetchall()] + + has_resolve_columns = hasattr(self, 'resolve_columns') + needs_datetime_string_cast = backend.needs_datetime_string_cast + dates = [] + # It would be better to use self._field here instead of DateTimeField(), + # but in Oracle that will result in a list of datetime.date instead of + # datetime.datetime. + fields = [DateTimeField()] + while 1: + rows = cursor.fetchmany(GET_ITERATOR_CHUNK_SIZE) + if not rows: + return dates + for row in rows: + date = row[0] + if has_resolve_columns: + date = self.resolve_columns([date], fields)[0] + elif needs_datetime_string_cast: + date = typecast_timestamp(str(date)) + dates.append(date) def _clone(self, klass=None, **kwargs): c = super(DateQuerySet, self)._clone(klass, **kwargs) @@ -730,8 +772,17 @@ def get_where_clause(lookup_type, table_prefix, field_name, value): if table_prefix.endswith('.'): table_prefix = backend.quote_name(table_prefix[:-1])+'.' field_name = backend.quote_name(field_name) + if type(value) == datetime.datetime and backend.get_datetime_cast_sql(): + cast_sql = backend.get_datetime_cast_sql() + else: + cast_sql = '%s' + if lookup_type in ('iexact', 'icontains', 'istartswith', 'iendswith') and backend.needs_upper_for_iops: + format = 'UPPER(%s%s) %s' + else: + format = '%s%s %s' try: - return '%s%s %s' % (table_prefix, field_name, (backend.OPERATOR_MAPPING[lookup_type] % '%s')) + return format % (table_prefix, field_name, + backend.OPERATOR_MAPPING[lookup_type] % cast_sql) except KeyError: pass if lookup_type == 'in': @@ -748,6 +799,15 @@ def get_where_clause(lookup_type, table_prefix, field_name, value): return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or '')) elif lookup_type == 'search': return backend.get_fulltext_search_sql(table_prefix + field_name) + elif lookup_type in ('regex', 'iregex'): + if settings.DATABASE_ENGINE == 'oracle': + if lookup_type == 'regex': + match_option = 'c' + else: + match_option = 'i' + return "REGEXP_LIKE(%s%s, %s, '%s')" % (table_prefix, field_name, cast_sql, match_option) + else: + raise NotImplementedError raise TypeError, "Got invalid lookup_type: %s" % repr(lookup_type) def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0): diff --git a/django/http/__init__.py b/django/http/__init__.py index ca3b5eab24..1b2abe5049 100644 --- a/django/http/__init__.py +++ b/django/http/__init__.py @@ -162,7 +162,7 @@ class HttpResponse(object): status_code = 200 - def __init__(self, content='', mimetype=None): + def __init__(self, content='', mimetype=None, status=None): from django.conf import settings self._charset = settings.DEFAULT_CHARSET if not mimetype: @@ -175,6 +175,8 @@ class HttpResponse(object): self._is_string = True self.headers = {'Content-Type': mimetype} self.cookies = SimpleCookie() + if status: + self.status_code = status def __str__(self): "Full HTTP message, including headers" diff --git a/django/middleware/common.py b/django/middleware/common.py index 5f671dff7d..9610e1e952 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -11,7 +11,8 @@ class CommonMiddleware(object): - Forbids access to User-Agents in settings.DISALLOWED_USER_AGENTS - URL rewriting: Based on the APPEND_SLASH and PREPEND_WWW settings, - this middleware appends missing slashes and/or prepends missing "www."s. + this middleware appends missing slashes and/or prepends missing + "www."s. - ETags: If the USE_ETAGS setting is set, ETags will be calculated from the entire page content and Not Modified responses will be returned @@ -74,7 +75,10 @@ class CommonMiddleware(object): # Use ETags, if requested. if settings.USE_ETAGS: - etag = md5.new(response.content).hexdigest() + if response.has_header('ETag'): + etag = response['ETag'] + else: + etag = md5.new(response.content).hexdigest() if response.status_code >= 200 and response.status_code < 300 and request.META.get('HTTP_IF_NONE_MATCH') == etag: response = http.HttpResponseNotModified() else: diff --git a/django/newforms/fields.py b/django/newforms/fields.py index b73dd181e6..167281a061 100644 --- a/django/newforms/fields.py +++ b/django/newforms/fields.py @@ -27,9 +27,9 @@ __all__ = ( EMPTY_VALUES = (None, '') try: - set # Only available in Python 2.4+ + set except NameError: - from sets import Set as set # Python 2.3 fallback + from sets import Set as set # Python 2.3 fallback try: from decimal import Decimal @@ -516,11 +516,13 @@ class MultiValueField(Field): """ clean_data = [] errors = ErrorList() - if self.required and not value: - raise ValidationError(gettext(u'This field is required.')) - elif not self.required and not value: - return self.compress([]) - if not isinstance(value, (list, tuple)): + if not value or isinstance(value, (list, tuple)): + if not value or not [v for v in value if v not in EMPTY_VALUES]: + if self.required: + raise ValidationError(gettext(u'This field is required.')) + else: + return self.compress([]) + else: raise ValidationError(gettext(u'Enter a list of values.')) for i, field in enumerate(self.fields): try: @@ -558,5 +560,11 @@ class SplitDateTimeField(MultiValueField): def compress(self, data_list): if data_list: + # Raise a validation error if time or date is empty + # (possible if SplitDateTimeField has required=False). + if data_list[0] in EMPTY_VALUES: + raise ValidationError(gettext(u'Enter a valid date.')) + if data_list[1] in EMPTY_VALUES: + raise ValidationError(gettext(u'Enter a valid time.')) return datetime.datetime.combine(*data_list) return None diff --git a/django/newforms/forms.py b/django/newforms/forms.py index c15d26ece5..f87f950f04 100644 --- a/django/newforms/forms.py +++ b/django/newforms/forms.py @@ -159,7 +159,7 @@ class BaseForm(StrAndUnicode): def as_p(self): "Returns this form rendered as HTML

                    s." - return self._html_output(u'

                    %(label)s %(field)s%(help_text)s

                    ', u'

                    %s

                    ', '

                    ', u' %s', True) + return self._html_output(u'

                    %(label)s %(field)s%(help_text)s

                    ', u'%s', '

                    ', u' %s', True) def non_field_errors(self): """ diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py index 6ee3177a25..d4b5f596d1 100644 --- a/django/newforms/widgets.py +++ b/django/newforms/widgets.py @@ -3,16 +3,15 @@ HTML Widget classes """ try: - set # Only available in Python 2.4+ + set except NameError: - from sets import Set as set # Python 2.3 fallback -from itertools import chain + from sets import Set as set # Python 2.3 fallback +from itertools import chain from django.utils.datastructures import MultiValueDict from django.utils.html import escape from django.utils.translation import gettext from django.utils.encoding import StrAndUnicode, smart_unicode - from util import flatatt __all__ = ( diff --git a/django/template/__init__.py b/django/template/__init__.py index 4f2ddfc8b3..4cda9bc8d0 100644 --- a/django/template/__init__.py +++ b/django/template/__init__.py @@ -488,9 +488,6 @@ class TokenParser(object): self.pointer = i return s - - - filter_raw_string = r""" ^%(i18n_open)s"(?P%(str)s)"%(i18n_close)s| ^"(?P%(str)s)"| diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 6a6665a445..19beb29141 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -4,16 +4,14 @@ from django.template import Node, NodeList, Template, Context, resolve_variable from django.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, SINGLE_BRACE_START, SINGLE_BRACE_END, COMMENT_TAG_START, COMMENT_TAG_END from django.template import get_library, Library, InvalidTemplateLibrary from django.conf import settings +from django.utils.itercompat import groupby import sys import re -if not hasattr(__builtins__, 'reversed'): - # For Python 2.3. - # From http://www.python.org/doc/current/tut/node11.html - def reversed(data): - for index in xrange(len(data)-1, -1, -1): - yield data[index] - +try: + reversed +except NameError: + from django.utils.itercompat import reversed # Python 2.3 fallback register = Library() @@ -252,15 +250,10 @@ class RegroupNode(Node): if obj_list == None: # target_var wasn't found in context; fail silently context[self.var_name] = [] return '' - output = [] # list of dictionaries in the format {'grouper': 'key', 'list': [list of contents]} - for obj in obj_list: - grouper = self.expression.resolve(obj, True) - # TODO: Is this a sensible way to determine equality? - if output and repr(output[-1]['grouper']) == repr(grouper): - output[-1]['list'].append(obj) - else: - output.append({'grouper': grouper, 'list': [obj]}) - context[self.var_name] = output + # List of dictionaries in the format + # {'grouper': 'key', 'list': [list of contents]}. + context[self.var_name] = [{'grouper':key, 'list':list(val)} for key, val in + groupby(obj_list, lambda v, f=self.expression.resolve: f(v, True))] return '' def include_is_allowed(filepath): diff --git a/django/test/utils.py b/django/test/utils.py index f5122fa96d..4a858a6ec7 100644 --- a/django/test/utils.py +++ b/django/test/utils.py @@ -1,6 +1,7 @@ import sys, time from django.conf import settings -from django.db import connection, transaction, backend +from django.db import connection, backend, get_creation_module +from django.core import management, mail from django.core import management, mail from django.dispatch import dispatcher from django.test import signals @@ -88,6 +89,12 @@ def get_postgresql_create_suffix(): return '' def create_test_db(verbosity=1, autoclobber=False): + # If the database backend wants to create the test DB itself, let it + creation_module = get_creation_module() + if hasattr(creation_module, "create_test_db"): + creation_module.create_test_db(settings, connection, backend, verbosity, autoclobber) + return + if verbosity >= 1: print "Creating test database..." # If we're using SQLite, it's more convenient to test against an @@ -142,6 +149,12 @@ def create_test_db(verbosity=1, autoclobber=False): cursor = connection.cursor() def destroy_test_db(old_database_name, verbosity=1): + # If the database wants to drop the test DB itself, let it + creation_module = get_creation_module() + if hasattr(creation_module, "destroy_test_db"): + creation_module.destroy_test_db(settings, connection, backend, old_database_name, verbosity) + return + # Unless we're using SQLite, remove the test database to clean up after # ourselves. Connect to the previous database (not the test database) # to do so, because it's not allowed to delete a database while being diff --git a/django/utils/functional.py b/django/utils/functional.py index 0c31c1f375..a57546ad2d 100644 --- a/django/utils/functional.py +++ b/django/utils/functional.py @@ -3,6 +3,21 @@ def curry(_curried_func, *args, **kwargs): return _curried_func(*(args+moreargs), **dict(kwargs, **morekwargs)) return _curried +def memoize(func, cache): + """ + Wrap a function so that results for any argument tuple are stored in + 'cache'. Note that the args to the function must be usable as dictionary + keys. + """ + def wrapper(*args): + if args in cache: + return cache[args] + + result = func(*args) + cache[args] = result + return result + return wrapper + class Promise: """ This is just a base class for the proxy class created in diff --git a/django/utils/html.py b/django/utils/html.py index 607362817b..e1860627ce 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -53,16 +53,18 @@ def fix_ampersands(value): def urlize(text, trim_url_limit=None, nofollow=False): """ - Converts any URLs in text into clickable links. Works on http://, https:// and - www. links. Links can have trailing punctuation (periods, commas, close-parens) - and leading punctuation (opening parens) and it'll still do the right thing. + Converts any URLs in text into clickable links. Works on http://, https:// + and www. links. Links can have trailing punctuation (periods, commas, + close-parens) and leading punctuation (opening parens) and it'll still do + the right thing. - If trim_url_limit is not None, the URLs in link text will be limited to - trim_url_limit characters. + If trim_url_limit is not None, the URLs in link text longer than this limit + will truncated to trim_url_limit-3 characters and appended with an elipsis. - If nofollow is True, the URLs in link text will get a rel="nofollow" attribute. + If nofollow is True, the URLs in link text will get a rel="nofollow" + attribute. """ - trim_url = lambda x, limit=trim_url_limit: limit is not None and (x[:limit] + (len(x) >=limit and '...' or '')) or x + trim_url = lambda x, limit=trim_url_limit: limit is not None and (len(x) > limit and ('%s...' % x[:max(0, limit - 3)])) or x words = word_split_re.split(text) nofollow_attr = nofollow and ' rel="nofollow"' or '' for i, word in enumerate(words): diff --git a/django/utils/itercompat.py b/django/utils/itercompat.py index 370988bedb..0de1b6cbe2 100644 --- a/django/utils/itercompat.py +++ b/django/utils/itercompat.py @@ -7,7 +7,8 @@ these implementations if necessary. import itertools def compat_tee(iterable): - """Return two independent iterators from a single iterable. + """ + Return two independent iterators from a single iterable. Based on http://www.python.org/doc/2.3.5/lib/itertools-example.html """ @@ -25,7 +26,34 @@ def compat_tee(iterable): next = iter(iterable).next return gen(next), gen(next) +def groupby(iterable, keyfunc=None): + """ + Taken from http://docs.python.org/lib/itertools-functions.html + """ + if keyfunc is None: + keyfunc = lambda x:x + iterable = iter(iterable) + l = [iterable.next()] + lastkey = keyfunc(l[0]) + for item in iterable: + key = keyfunc(item) + if key != lastkey: + yield lastkey, l + lastkey = key + l = [item] + else: + l.append(item) + yield lastkey, l + +# Not really in itertools, since it's a builtin in Python 2.4 and later, but it +# does operate as an iterator. +def reversed(data): + for index in xrange(len(data)-1, -1, -1): + yield data[index] + if hasattr(itertools, 'tee'): tee = itertools.tee else: tee = compat_tee +if hasattr(itertools, 'groupby'): + groupby = itertools.groupby diff --git a/docs/authentication.txt b/docs/authentication.txt index 12b61db538..efe4d47513 100644 --- a/docs/authentication.txt +++ b/docs/authentication.txt @@ -161,8 +161,8 @@ The ``User`` model has a custom manager that has the following helper functions: * ``make_random_password(length=10, allowed_chars='abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789')`` Returns a random password with the given length and given string of allowed characters. (Note that the default value of ``allowed_chars`` - doesn't contain ``"I"`` or letters that look like it, to avoid user - confusion. + doesn't contain letters that can cause user confusion, including + ``1``, ``I`` and ``0``). Basic usage ----------- @@ -325,7 +325,7 @@ Manually checking a user's password If you'd like to manually authenticate a user by comparing a plain-text password to the hashed password in the database, use the -convenience function `django.contrib.auth.models.check_password`. It +convenience function ``django.contrib.auth.models.check_password``. It takes two arguments: the plain-text password to check, and the full value of a user's ``password`` field in the database to check against, and returns ``True`` if they match, ``False`` otherwise. @@ -461,7 +461,7 @@ block:: Other built-in views -------------------- -In addition to the `login` view, the authentication system includes a +In addition to the ``login`` view, the authentication system includes a few other useful built-in views: ``django.contrib.auth.views.logout`` diff --git a/docs/contributing.txt b/docs/contributing.txt index 31409f27bd..b3c7efa2f7 100644 --- a/docs/contributing.txt +++ b/docs/contributing.txt @@ -382,6 +382,65 @@ Model style ('F', 'Female'), ) +Documentation style +=================== + +We place a high importance on consistency and readability of documentation. +(After all, Django was created in a journalism environment!) + +Guidelines for ReST files +------------------------- + +These guidelines regulate the format of our ReST documentation: + + * In section titles, capitalize only initial words and proper nouns. + + * Wrap the documentation at 80 characters wide, unless a code example + is significantly less readable when split over two lines, or for another + good reason. + +Commonly used terms +------------------- + +Here are some style guidelines on commonly used terms throughout the +documentation: + + * **Django** -- when referring to the framework, capitalize Django. It is + lowercase only in Python code and in the djangoproject.com logo. + + * **e-mail** -- it has a hyphen. + + * **MySQL** + + * **PostgreSQL** + + * **Python** -- when referring to the language, capitalize Python. + + * **realize**, **customize**, **initialize**, etc. -- use the American + "ize" suffix, not "ise." + + * **SQLite** + + * **subclass** -- it's a single word without a hyphen, both as a verb + ("subclass that model") and as a noun ("create a subclass"). + + * **Web**, **World Wide Web**, **the Web** -- note Web is always + capitalized when referring to the World Wide Web. + + * **Web site** -- use two words, with Web capitalized. + +Django-specific terminology +--------------------------- + + * **model** -- it's not capitalized. + + * **template** -- it's not capitalized. + + * **URLconf** -- use three capitalized letters, with no space before + "conf." + + * **view** -- it's not capitalized. + Committing code =============== diff --git a/docs/db-api.txt b/docs/db-api.txt index e7b8183f6c..a4b920fb33 100644 --- a/docs/db-api.txt +++ b/docs/db-api.txt @@ -1173,6 +1173,58 @@ like ``contains`` but is significantly faster due to full-text indexing. Note this is only available in MySQL and requires direct manipulation of the database to add the full-text index. +regex +~~~~~ + +**New in Django development version** + +Case-sensitive regular expression match. + +The regular expression syntax is that of the database backend in use. In the +case of SQLite, which doesn't natively support regular-expression lookups, the +syntax is that of Python's ``re`` module. + +Example:: + + Entry.objects.get(title__regex=r'^(An?|The) +') + +SQL equivalents:: + + SELECT ... WHERE title REGEXP BINARY '^(An?|The) +'; -- MySQL + + SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'c'); -- Oracle + + SELECT ... WHERE title ~ '^(An?|The) +'; -- PostgreSQL + + SELECT ... WHERE title REGEXP '^(An?|The) +'; -- SQLite + +Using raw strings (e.g., ``r'foo'`` instead of ``'foo'``) for passing in the +regular expression syntax is recommended. + +Regular expression matching is not supported on the ``ado_mssql`` backend. +It will raise a ``NotImplementedError`` at runtime. + +iregex +~~~~~~ + +**New in Django development version** + +Case-insensitive regular expression match. + +Example:: + + Entry.objects.get(title__iregex=r'^(an?|the) +') + +SQL equivalents:: + + SELECT ... WHERE title REGEXP '^(an?|the) +'; -- MySQL + + SELECT ... WHERE REGEXP_LIKE(title, '^(an?|the) +', 'i'); -- Oracle + + SELECT ... WHERE title ~* '^(an?|the) +'; -- PostgreSQL + + SELECT ... WHERE title REGEXP '(?i)^(an?|the) +'; -- SQLite + Default lookups are exact ------------------------- @@ -1779,7 +1831,7 @@ use the default manager, or if you want to search a list of related objects, you can provide ``get_object_or_404()`` with a manager object instead. For example:: - # Get the author of blog instance `e` with a name of 'Fred' + # Get the author of blog instance e with a name of 'Fred' a = get_object_or_404(e.authors, name='Fred') # Use a custom manager 'recent_entries' in the search for an diff --git a/docs/django-admin.txt b/docs/django-admin.txt index d20db7edc9..75c2738543 100644 --- a/docs/django-admin.txt +++ b/docs/django-admin.txt @@ -513,7 +513,7 @@ Example usage:: Verbosity determines the amount of notification and debug information that will be printed to the console. '0' is no output, '1' is normal output, -and `2` is verbose output. +and ``2`` is verbose output. --adminmedia ------------ diff --git a/docs/email.txt b/docs/email.txt index 66948e5294..50dafaf8df 100644 --- a/docs/email.txt +++ b/docs/email.txt @@ -28,9 +28,9 @@ settings, if set, are used to authenticate to the SMTP server, and the .. note:: The character set of e-mail sent with ``django.core.mail`` will be set to - the value of your `DEFAULT_CHARSET setting`_. + the value of your `DEFAULT_CHARSET`_ setting. -.. _DEFAULT_CHARSET setting: ../settings/#default-charset +.. _DEFAULT_CHARSET: ../settings/#default-charset .. _EMAIL_HOST: ../settings/#email-host .. _EMAIL_PORT: ../settings/#email-port .. _EMAIL_HOST_USER: ../settings/#email-host-user @@ -198,27 +198,58 @@ e-mail, you can subclass these two classes to suit your needs. .. note:: Not all features of the ``EmailMessage`` class are available through the ``send_mail()`` and related wrapper functions. If you wish to use advanced - features, such as BCC'ed recipients or multi-part e-mail, you'll need to - create ``EmailMessage`` instances directly. + features, such as BCC'ed recipients, file attachments, or multi-part + e-mail, you'll need to create ``EmailMessage`` instances directly. + + This is a design feature. ``send_mail()`` and related functions were + originally the only interface Django provided. However, the list of + parameters they accepted was slowly growing over time. It made sense to + move to a more object-oriented design for e-mail messages and retain the + original functions only for backwards compatibility. In general, ``EmailMessage`` is responsible for creating the e-mail message itself. ``SMTPConnection`` is responsible for the network connection side of the operation. This means you can reuse the same connection (an ``SMTPConnection`` instance) for multiple messages. -The ``EmailMessage`` class is initialized as follows:: +E-mail messages +--------------- - 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 -from ``settings.DEFAULT_FROM_EMAIL`` is used. Both the ``to`` and ``bcc`` -parameters are lists of addresses, as strings. + * ``subject``: The subject line of the e-mail. + + * ``body``: The body text. This should be a plain text message. + + * ``from_email``: The sender's address. Both ``fred@example.com`` and + ``Fred `` 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:: email = EmailMessage('Hello', 'Body goes here', 'from@example.com', - ['to1@example.com', 'to2@example.com'], - ['bcc@example.com']) + ['to1@example.com', 'to2@example.com'], ['bcc@example.com'], + headers = {'Reply-To': 'another@example.com'}) The class has the following methods: @@ -227,18 +258,83 @@ The class has the following methods: if none already exists. * ``message()`` constructs a ``django.core.mail.SafeMIMEText`` object (a - sub-class of Python's ``email.MIMEText.MIMEText`` class) holding the - message to be sent. If you ever need to extend the `EmailMessage` class, - you'll probably want to override this method to put the content you wish + subclass of Python's ``email.MIMEText.MIMEText`` class) or a + ``django.core.mail.SafeMIMEMultipart`` object holding the + message to be sent. If you ever need to extend the ``EmailMessage`` class, + you'll probably want to override this method to put the content you want into the MIME object. * ``recipients()`` returns a list of all the recipients of the message, whether they're recorded in the ``to`` or ``bcc`` attributes. This is - another method you might need to override when sub-classing, because the + another method you might need to override when subclassing, because the SMTP server needs to be told the full list of recipients when the message is sent. If you add another way to specify recipients in your class, they need to be returned from this method as well. + * ``attach()`` creates a new file attachment and adds it to the message. + There are two ways to call ``attach()``: + + * You can pass it a single argument that is an + ``email.MIMBase.MIMEBase`` instance. This will be inserted directly + into the resulting message. + + * Alternatively, you can pass ``attach()`` three arguments: + ``filename``, ``content`` and ``mimetype``. ``filename`` is the name + of the file attachment as it will appear in the e-mail, ``content`` is + the data that will be contained inside the attachment and + ``mimetype`` is the optional MIME type for the attachment. If you + omit ``mimetype``, the MIME content type will be guessed from the + filename of the attachment. + + For example:: + + message.attach('design.png', img_data, 'image/png') + + * ``attach_file()`` creates a new attachment using a file from your + filesystem. Call it with the path of the file to attach and, optionally, + the MIME type to use for the attachment. If the MIME type is omitted, it + will be guessed from the filename. The simplest use would be:: + + message.attach_file('/images/weather_map.png') + +Sending alternative content types +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +It can be useful to include multiple versions of the content in an e-mail; +the classic example is to send both text and HTML versions of a message. With +Django's e-mail library, you can do this using the ``EmailMultiAlternatives`` +class. This subclass of ``EmailMessage`` has an ``attach_alternative()`` method +for including extra versions of the message body in the e-mail. All the other +methods (including the class initialization) are inherited directly from +``EmailMessage``. + +To send a text and HTML combination, you could write:: + + from django.core.mail import EmailMultiAlternatives + + subject, from_email, to = 'hello', 'from@example.com', 'to@example.com' + text_content = 'This is an important message.' + html_content = '

                    This is an important message.' + msg = EmailMultiAlternatives(subject, text_content, from_email, to) + msg.attach_alternative(html_content, "text/html") + msg.send() + +By default, the MIME type of the ``body`` parameter in an ``EmailMessage`` is +``"text/plain"``. It is good practice to leave this alone, because it +guarantees that any recipient will be able to read the e-mail, regardless of +their mail client. However, if you are confident that your recipients can +handle an alternative content type, you can use the ``content_subtype`` +attribute on the ``EmailMessage`` class to change the main content type. The +major type will always be ``"text"``, but you can change it to the subtype. For +example:: + + msg = EmailMessage(subject, html_content, from_email, to) + msg.content_subtype = "html" # Main content is now text/html + msg.send() + +SMTP network connections +------------------------ + The ``SMTPConnection`` class is initialized with the host, port, username and password for the SMTP server. If you don't specify one or more of those options, they are read from your settings file. diff --git a/docs/faq.txt b/docs/faq.txt index bdd8c5360e..67ed8a49a5 100644 --- a/docs/faq.txt +++ b/docs/faq.txt @@ -104,7 +104,7 @@ Lawrence, Kansas, USA. `Wilson Miner`_ Wilson's design-fu makes us all look like rock stars. By day, he's an - interactive designer for `Apple`. Don't ask him what he's working on, or + interactive designer for `Apple`_. Don't ask him what he's working on, or he'll have to kill you. He lives in San Francisco. On IRC, Wilson goes by ``wilsonian``. @@ -301,7 +301,7 @@ means it can run on a variety of server platforms. If you want to use Django with a database, which is probably the case, you'll also need a database engine. PostgreSQL_ is recommended, because we're -PostgreSQL fans, and MySQL_ and `SQLite 3`_ are also supported. +PostgreSQL fans, and MySQL_, `SQLite 3`_, and Oracle_ are also supported. .. _Python: http://www.python.org/ .. _Apache 2: http://httpd.apache.org/ @@ -310,6 +310,7 @@ PostgreSQL fans, and MySQL_ and `SQLite 3`_ are also supported. .. _PostgreSQL: http://www.postgresql.org/ .. _MySQL: http://www.mysql.com/ .. _`SQLite 3`: http://www.sqlite.org/ +.. _Oracle: http://www.oracle.com/ Do I lose anything by using Python 2.3 versus newer Python versions, such as Python 2.5? ---------------------------------------------------------------------------------------- diff --git a/docs/generic_views.txt b/docs/generic_views.txt index 359a82506a..2b80348903 100644 --- a/docs/generic_views.txt +++ b/docs/generic_views.txt @@ -754,10 +754,10 @@ If the results are paginated, the context will contain these extra variables: * ``previous``: The previous page number, as an integer. This is 1-based. - * `last_on_page`: The number of the + * ``last_on_page``: The number of the last result on the current page. This is 1-based. - * `first_on_page`: The number of the + * ``first_on_page``: The number of the first result on the current page. This is 1-based. * ``pages``: The total number of pages, as an integer. diff --git a/docs/install.txt b/docs/install.txt index 4f5a4bbe31..e850e48955 100644 --- a/docs/install.txt +++ b/docs/install.txt @@ -17,8 +17,10 @@ probably already have it installed. Install Apache and mod_python ============================= -If you just want to experiment with Django, skip this step. Django comes with -its own Web server for development purposes. +If you just want to experiment with Django, skip ahead to the next +section; Django includes a lightweight web server you can use for +testing, so you won't need to set up Apache until you're ready to +deploy Django in production. If you want to use Django on a production site, use Apache with `mod_python`_. mod_python is similar to mod_perl -- it embeds Python within Apache and loads @@ -46,7 +48,8 @@ Get your database running If you plan to use Django's database API functionality, you'll need to make sure a database server is running. Django works with PostgreSQL_, -MySQL_ and SQLite_. +MySQL_, Oracle_ and SQLite_ (the latter doesn't require a separate server to +be running). Additionally, you'll need to make sure your Python database bindings are installed. @@ -62,6 +65,8 @@ installed. * If you're using SQLite, you'll need pysqlite_. Use version 2.0.3 or higher. +* If you're using Oracle, you'll need cx_Oracle_, version 4.3.1 or higher. + .. _PostgreSQL: http://www.postgresql.org/ .. _MySQL: http://www.mysql.com/ .. _Django's ticket system: http://code.djangoproject.com/report/1 @@ -71,6 +76,8 @@ installed. .. _SQLite: http://www.sqlite.org/ .. _pysqlite: http://initd.org/tracker/pysqlite .. _MySQL backend: ../databases/ +.. _cx_Oracle: http://www.python.net/crew/atuining/cx_Oracle/ +.. _Oracle: http://www.oracle.com/ Remove any old versions of Django ================================= @@ -83,23 +90,20 @@ If you installed Django using ``setup.py install``, uninstalling is as simple as deleting the ``django`` directory from your Python ``site-packages``. -If you installed Django from a Python Egg, remove the Django ``.egg`` file, +If you installed Django from a Python egg, remove the Django ``.egg`` file, and remove the reference to the egg in the file named ``easy-install.pth``. This file should also be located in your ``site-packages`` directory. .. admonition:: Where are my ``site-packages`` stored? The location of the ``site-packages`` directory depends on the operating - system, and the location in which Python was installed. However, the - following locations are common: + system, and the location in which Python was installed. To find out your + system's ``site-packages`` location, execute the following:: - * If you're using Linux: ``/usr/lib/python2.X/site-packages`` + python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" - * If you're using Windows: ``C:\Python2.X\lib\site-packages`` - - * If you're using MacOSX: ``/Library/Python2.X/site-packages`` or - ``/Library/Frameworks/Python.framework/Versions/2.X/lib/python2.X/site-packages/`` - (in later releases). + (Note that this should be run from a shell prompt, not a Python interactive + prompt.) Install the Django code ======================= @@ -138,12 +142,15 @@ latest bug fixes and improvements, follow these instructions: 1. Make sure you have Subversion_ installed. 2. Check out the Django code into your Python ``site-packages`` directory. + On Linux / Mac OSX / Unix, do this:: svn co http://code.djangoproject.com/svn/django/trunk/ django_src - ln -s `pwd`/django_src/django /usr/lib/python2.3/site-packages/django + ln -s `pwd`/django_src/django SITE-PACKAGES-DIR/django - (In the above line, change ``python2.3`` to match your current Python version.) + (In the above line, change ``SITE-PACKAGES-DIR`` to match the location of + your system's ``site-packages`` directory, as explained in the + "Where are my ``site-packages`` stored?" section above.) On Windows, do this:: diff --git a/docs/legacy_databases.txt b/docs/legacy_databases.txt index ca3927e52f..b87a661f90 100644 --- a/docs/legacy_databases.txt +++ b/docs/legacy_databases.txt @@ -18,7 +18,7 @@ You'll need to tell Django what your database connection parameters are, and what the name of the database is. Do that by editing these settings in your `settings file`_: - * `DATABASE_NAME` + * `DATABASE_NAME`_ * `DATABASE_ENGINE`_ * `DATABASE_USER`_ * `DATABASE_PASSWORD`_ diff --git a/docs/model-api.txt b/docs/model-api.txt index 09440f2b56..22ff7445b5 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -492,6 +492,11 @@ has ``null=True``, that means it has two possible values for "no data": possible values for "no data;" Django convention is to use the empty string, not ``NULL``. +.. note:: + When using the Oracle database backend, the ``null=True`` option will + be coerced for string-based fields that can blank, and the value + ``NULL`` will be stored to denote the empty string. + ``blank`` ~~~~~~~~~ @@ -586,6 +591,16 @@ scenes. If ``True``, ``django-admin.py sqlindexes`` will output a ``CREATE INDEX`` statement for this field. +``db_tablespace`` +~~~~~~~~~~~~~~~~~ + +**New in Django development version** + +The name of the database tablespace to use for this field's index, if +indeed this field is indexed. The default is the ``db_tablespace`` of +the model, if any. If the backend doesn't support tablespaces, this +option is ignored. + ``default`` ~~~~~~~~~~~ @@ -996,6 +1011,14 @@ If your database table name is an SQL reserved word, or contains characters that aren't allowed in Python variable names -- notably, the hyphen -- that's OK. Django quotes column and table names behind the scenes. +``db_tablespace`` +----------------- + +**New in Django development version** + +The name of the database tablespace to use for the model. If the backend +doesn't support tablespaces, this option is ignored. + ``get_latest_by`` ----------------- @@ -1876,11 +1899,11 @@ used by the SQLite Python bindings. This is for the sake of consistency and sanity.) A final note: If all you want to do is a custom ``WHERE`` clause, you can just -just the ``where``, ``tables`` and ``params`` arguments to the standard lookup +use the ``where``, ``tables`` and ``params`` arguments to the standard lookup API. See `Other lookup options`_. .. _Python DB-API: http://www.python.org/peps/pep-0249.html -.. _Other lookup options: ../db-api/#extra-params-select-where-tables +.. _Other lookup options: ../db-api/#extra-select-none-where-none-params-none-tables-none .. _transaction handling: ../transactions/ Overriding default model methods diff --git a/docs/newforms.txt b/docs/newforms.txt index 1511791a7d..41db04a7dd 100644 --- a/docs/newforms.txt +++ b/docs/newforms.txt @@ -110,7 +110,7 @@ shortly. Creating ``Form`` instances --------------------------- -A ``Form`` instance is either **bound** or **unbound** to a set of data. +A ``Form`` instance is either **bound** to a set of data, or **unbound**. * If it's **bound** to a set of data, it's capable of validating that data and rendering the form as HTML with the data displayed in the HTML. diff --git a/docs/release_notes_0.96.txt b/docs/release_notes_0.96.txt index f62780c6b2..4227de8155 100644 --- a/docs/release_notes_0.96.txt +++ b/docs/release_notes_0.96.txt @@ -28,7 +28,7 @@ The following changes may require you to update your code when you switch from Due to a bug in older versions of the ``MySQLdb`` Python module (which Django uses to connect to MySQL databases), Django's MySQL backend now -requires version 1.2.1p2 or higher of `MySQLdb`, and will raise +requires version 1.2.1p2 or higher of ``MySQLdb``, and will raise exceptions if you attempt to use an older version. If you're currently unable to upgrade your copy of ``MySQLdb`` to meet diff --git a/docs/serialization.txt b/docs/serialization.txt index 01afa2708c..fa9b4edd51 100644 --- a/docs/serialization.txt +++ b/docs/serialization.txt @@ -48,12 +48,12 @@ Subset of fields ~~~~~~~~~~~~~~~~ If you only want a subset of fields to be serialized, you can -specify a `fields` argument to the serializer:: +specify a ``fields`` argument to the serializer:: from django.core import serializers data = serializers.serialize('xml', SomeModel.objects.all(), fields=('name','size')) -In this example, only the `name` and `size` attributes of each model will +In this example, only the ``name`` and ``size`` attributes of each model will be serialized. .. note:: diff --git a/docs/settings.txt b/docs/settings.txt index 12e6dab4bc..897cdc8099 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -244,9 +244,9 @@ DATABASE_ENGINE Default: ``''`` (Empty string) -Which database backend to use. Either ``'postgresql_psycopg2'``, -``'postgresql'``, ``'mysql'``, ``'mysql_old'``, ``'sqlite3'`` or -``'ado_mssql'``. +The database backend to use. Either ``'postgresql_psycopg2'``, +``'postgresql'``, ``'mysql'``, ``'mysql_old'``, ``'sqlite3'``, +``'oracle'``, or ``'ado_mssql'``. DATABASE_HOST ------------- diff --git a/docs/templates.txt b/docs/templates.txt index cb8e238f43..c32b1af1dd 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -1266,7 +1266,8 @@ Converts URLs in plain text into clickable links. urlizetrunc ~~~~~~~~~~~ -Converts URLs into clickable links, truncating URLs to the given character limit. +Converts URLs into clickable links, truncating URLs longer than the given +character limit. **Argument:** Length to truncate URLs to diff --git a/docs/templates_python.txt b/docs/templates_python.txt index f3e2f2c64b..7171f32612 100644 --- a/docs/templates_python.txt +++ b/docs/templates_python.txt @@ -342,7 +342,7 @@ If ``TEMPLATE_CONTEXT_PROCESSORS`` contains this processor, every * ``user`` -- An ``auth.User`` instance representing the currently logged-in user (or an ``AnonymousUser`` instance, if the client isn't - logged in). See the `user authentication docs`. + logged in). See the `user authentication docs`_. * ``messages`` -- A list of messages (as strings) for the currently logged-in user. Behind the scenes, this calls diff --git a/docs/testing.txt b/docs/testing.txt index 50c4ec3046..b326e0099d 100644 --- a/docs/testing.txt +++ b/docs/testing.txt @@ -253,8 +253,8 @@ can be invoked on the ``Client`` instance. f.close() will result in the evaluation of a POST request on ``/customers/wishes/``, - with a POST dictionary that contains `name`, `attachment` (containing the - file name), and `attachment_file` (containing the file data). Note that you + with a POST dictionary that contains ``name``, ``attachment`` (containing the + file name), and ``attachment_file`` (containing the file data). Note that you need to manually close the file after it has been provided to the POST. ``login(**credentials)`` @@ -660,8 +660,8 @@ arguments: tested. This is the same format returned by ``django.db.models.get_apps()`` Verbosity determines the amount of notification and debug information that - will be printed to the console; `0` is no output, `1` is normal output, - and `2` is verbose output. + will be printed to the console; ``0`` is no output, ``1`` is normal output, + and ``2`` is verbose output. This method should return the number of tests that failed. diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt index c40b051b19..fdac9c554e 100644 --- a/docs/tutorial01.txt +++ b/docs/tutorial01.txt @@ -10,7 +10,7 @@ poll application. It'll consist of two parts: * A public site that lets people view polls and vote in them. - * An admin site that lets you add, change and delete poll. + * An admin site that lets you add, change and delete polls. We'll assume you have `Django installed`_ already. You can tell Django is installed by running the Python interactive interpreter and typing @@ -360,7 +360,7 @@ Note the following: quotes. The author of this tutorial runs PostgreSQL, so the example output is in PostgreSQL syntax. - * The `sql` command doesn't actually run the SQL in your database - it just + * The ``sql`` command doesn't actually run the SQL in your database - it just prints it to the screen so that you can see what SQL Django thinks is required. If you wanted to, you could copy and paste this SQL into your database prompt. However, as we will see shortly, Django provides an easier way of committing diff --git a/tests/modeltests/lookup/models.py b/tests/modeltests/lookup/models.py index 6af70f8351..60ed6f7685 100644 --- a/tests/modeltests/lookup/models.py +++ b/tests/modeltests/lookup/models.py @@ -251,4 +251,98 @@ Traceback (most recent call last): ... TypeError: Cannot resolve keyword 'headline__starts' into field. Choices are: id, headline, pub_date +# Create some articles with a bit more interesting headlines for testing field lookups: +>>> now = datetime.now() +>>> for a in Article.objects.all(): +... a.delete() +>>> a1 = Article(pub_date=now, headline='f') +>>> a1.save() +>>> a2 = Article(pub_date=now, headline='fo') +>>> a2.save() +>>> a3 = Article(pub_date=now, headline='foo') +>>> a3.save() +>>> a4 = Article(pub_date=now, headline='fooo') +>>> a4.save() +>>> a5 = Article(pub_date=now, headline='Foo') +>>> a5.save() + +# zero-or-more +>>> Article.objects.filter(headline__regex=r'fo*') +[, , , ] +>>> Article.objects.filter(headline__iregex=r'fo*') +[, , , , ] + +# one-or-more +>>> Article.objects.filter(headline__regex=r'fo+') +[, , ] + +# wildcard +>>> Article.objects.filter(headline__regex=r'fooo?') +[, ] + +# and some more: +>>> a6 = Article(pub_date=now, headline='bar') +>>> a6.save() +>>> a7 = Article(pub_date=now, headline='Bar') +>>> a7.save() +>>> a8 = Article(pub_date=now, headline='baz') +>>> a8.save() +>>> a9 = Article(pub_date=now, headline='baZ') +>>> a9.save() + +# leading anchor +>>> Article.objects.filter(headline__regex=r'^b') +[, , ] +>>> Article.objects.filter(headline__iregex=r'^b') +[, , , ] + +# trailing anchor +>>> Article.objects.filter(headline__regex=r'z$') +[] +>>> Article.objects.filter(headline__iregex=r'z$') +[, ] + +# character sets +>>> Article.objects.filter(headline__regex=r'ba[rz]') +[, ] +>>> Article.objects.filter(headline__regex=r'ba[RZ]') +[] +>>> Article.objects.filter(headline__iregex=r'ba[RZ]') +[, , , ] + +# 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='FooBarBaz') +>>> 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'foo(bar|baz)') +[, , , ] +>>> Article.objects.filter(headline__iregex=r'foo(bar|baz)') +[, , , , ] +>>> Article.objects.filter(headline__regex=r'^foo(bar|baz)') +[, , ] + +# greedy matching +>>> Article.objects.filter(headline__regex=r'f.*z') +[, , , ] +>>> Article.objects.filter(headline__iregex=r'f.*z') +[, , , , ] + +# grouping and backreferences +>>> Article.objects.filter(headline__regex=r'b(.).*b\1') +[, ] +>>> Article.objects.filter(headline__iregex=r'b(.).*b\1') +[, , , ] """} diff --git a/tests/regressiontests/datatypes/__init__.py b/tests/regressiontests/datatypes/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/regressiontests/datatypes/models.py b/tests/regressiontests/datatypes/models.py new file mode 100644 index 0000000000..8c5c8c285d --- /dev/null +++ b/tests/regressiontests/datatypes/models.py @@ -0,0 +1,59 @@ +""" +This is a basic model to test saving and loading boolean and date-related +types, which in the past were problematic for some database backends. +""" + +from django.db import models +from django.conf import settings + +class Donut(models.Model): + name = models.CharField(maxlength=100) + is_frosted = models.BooleanField(default=False) + has_sprinkles = models.NullBooleanField() + baked_date = models.DateField(null=True) + baked_time = models.TimeField(null=True) + consumed_at = models.DateTimeField(null=True) + + class Meta: + ordering = ('consumed_at',) + + def __str__(self): + return self.name + +__test__ = {'API_TESTS': """ +# No donuts are in the system yet. +>>> Donut.objects.all() +[] + +>>> d = Donut(name='Apple Fritter') + +# Ensure we're getting True and False, not 0 and 1 +>>> d.is_frosted +False +>>> d.has_sprinkles +>>> d.has_sprinkles = True +>>> d.has_sprinkles == True +True +>>> d.save() +>>> d2 = Donut.objects.all()[0] +>>> d2 + +>>> d2.is_frosted == False +True +>>> d2.has_sprinkles == True +True + +>>> import datetime +>>> d2.baked_date = datetime.date(year=1938, month=6, day=4) +>>> d2.baked_time = datetime.time(hour=5, minute=30) +>>> d2.consumed_at = datetime.datetime(year=2007, month=4, day=20, hour=16, minute=19, second=59) +>>> d2.save() + +>>> d3 = Donut.objects.all()[0] +>>> d3.baked_date +datetime.date(1938, 6, 4) +>>> d3.baked_time +datetime.time(5, 30) +>>> d3.consumed_at +datetime.datetime(2007, 4, 20, 16, 19, 59) +"""} diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index 4a2e9432b0..b35636aba6 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -121,7 +121,18 @@ u'\xcb' 'http://short.com/' >>> urlizetrunc('http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=', 20) -'http://www.google.co...' +'http://www.google...' + +# Check truncating of URIs which are the exact length +>>> uri = 'http://31characteruri.com/test/' +>>> len(uri) +31 +>>> urlizetrunc(uri, 31) +'http://31characteruri.com/test/' +>>> urlizetrunc(uri, 30) +'http://31characteruri.com/t...' +>>> urlizetrunc(uri, 2) +'...' >>> wordcount('') 0 diff --git a/tests/regressiontests/forms/tests.py b/tests/regressiontests/forms/tests.py index 4114919c2e..892498c3ae 100644 --- a/tests/regressiontests/forms/tests.py +++ b/tests/regressiontests/forms/tests.py @@ -1860,8 +1860,12 @@ ValidationError: [u'Enter a valid date.'] >>> f = SplitDateTimeField(required=False) >>> f.clean([datetime.date(2006, 1, 10), datetime.time(7, 30)]) datetime.datetime(2006, 1, 10, 7, 30) +>>> f.clean(['2006-01-10', '07:30']) +datetime.datetime(2006, 1, 10, 7, 30) >>> f.clean(None) >>> f.clean('') +>>> f.clean(['']) +>>> f.clean(['', '']) >>> f.clean('hello') Traceback (most recent call last): ... @@ -1878,6 +1882,18 @@ ValidationError: [u'Enter a valid time.'] Traceback (most recent call last): ... ValidationError: [u'Enter a valid date.'] +>>> f.clean(['2006-01-10', '']) +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid time.'] +>>> f.clean(['2006-01-10']) +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid time.'] +>>> f.clean(['', '07:30']) +Traceback (most recent call last): +... +ValidationError: [u'Enter a valid date.'] ######### # Forms # @@ -1959,11 +1975,11 @@ AttributeError: 'Person' object has no attribute 'cleaned_data'

                    • This field is required.
                    • This field is required.
                  • >>> print p.as_p() -

                    • This field is required.

                    +
                    • This field is required.

                    -

                    • This field is required.

                    +
                    • This field is required.

                    -

                    • This field is required.

                    +
                    • This field is required.

                    If you don't pass any values to the Form's __init__(), or if you pass None, @@ -2669,7 +2685,7 @@ its field's order in the form.
                  • Last name:
                  • Birthday:
                  • >>> print p.as_p() -

                    • (Hidden field hidden_text) This field is required.

                    +
                    • (Hidden field hidden_text) This field is required.

                    First name:

                    Last name:

                    Birthday:

                    diff --git a/tests/regressiontests/serializers_regress/tests.py b/tests/regressiontests/serializers_regress/tests.py index 1a144c8356..febcfa822e 100644 --- a/tests/regressiontests/serializers_regress/tests.py +++ b/tests/regressiontests/serializers_regress/tests.py @@ -15,6 +15,7 @@ from django.utils.functional import curry from django.core import serializers from django.db import transaction from django.core import management +from django.conf import settings from models import * try: @@ -116,10 +117,13 @@ test_data = [ (data_obj, 31, DateTimeData, None), (data_obj, 40, EmailData, "hovercraft@example.com"), (data_obj, 41, EmailData, None), + (data_obj, 42, EmailData, ""), (data_obj, 50, FileData, 'file:///foo/bar/whiz.txt'), (data_obj, 51, FileData, None), + (data_obj, 52, FileData, ""), (data_obj, 60, FilePathData, "/foo/bar/whiz.txt"), (data_obj, 61, FilePathData, None), + (data_obj, 62, FilePathData, ""), (data_obj, 70, DecimalData, decimal.Decimal('12.345')), (data_obj, 71, DecimalData, decimal.Decimal('-12.345')), (data_obj, 72, DecimalData, decimal.Decimal('0.0')), @@ -146,6 +150,7 @@ test_data = [ (data_obj, 131, PositiveSmallIntegerData, None), (data_obj, 140, SlugData, "this-is-a-slug"), (data_obj, 141, SlugData, None), + (data_obj, 142, SlugData, ""), (data_obj, 150, SmallData, 12), (data_obj, 151, SmallData, -12), (data_obj, 152, SmallData, 0), @@ -160,8 +165,10 @@ The end."""), (data_obj, 171, TimeData, None), (data_obj, 180, USStateData, "MA"), (data_obj, 181, USStateData, None), + (data_obj, 182, USStateData, ""), (data_obj, 190, XMLData, ""), (data_obj, 191, XMLData, None), + (data_obj, 192, XMLData, ""), (generic_obj, 200, GenericData, ['Generic Object 1', 'tag1', 'tag2']), (generic_obj, 201, GenericData, ['Generic Object 2', 'tag2', 'tag3']), @@ -241,6 +248,15 @@ The end."""), # (pk_obj, 790, XMLPKData, ""), ] +# Because Oracle treats the empty string as NULL, Oracle is expected to fail +# when field.empty_strings_allowed is True and the value is None; skip these +# tests. +if settings.DATABASE_ENGINE == 'oracle': + test_data = [data for data in test_data + if not (data[0] == data_obj and + data[2]._meta.get_field('data').empty_strings_allowed and + data[3] is None)] + # Dynamically create serializer tests to ensure that all # registered serializers are automatically tested. class SerializerTests(unittest.TestCase): diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py index e983a539ae..8801100bcc 100644 --- a/tests/regressiontests/templates/tests.py +++ b/tests/regressiontests/templates/tests.py @@ -219,6 +219,9 @@ class Templates(unittest.TestCase): # value will be converted to a bytestring. 'filter-syntax18': (r'{{ var }}', {'var': UnicodeInStrClass()}, '\xc5\xa0\xc4\x90\xc4\x86\xc5\xbd\xc4\x87\xc5\xbe\xc5\xa1\xc4\x91'), + # Numbers as filter arguments should work + 'filter-syntax19': ('{{ var|truncatewords:1 }}', {"var": "hello world"}, "hello ..."), + ### COMMENT SYNTAX ######################################################## 'comment-syntax01': ("{# this is hidden #}hello", {}, "hello"), 'comment-syntax02': ("{# this is hidden #}hello{# foo #}", {}, "hello"), @@ -725,7 +728,7 @@ class Templates(unittest.TestCase): 'url01' : ('{% url regressiontests.templates.views.client client.id %}', {'client': {'id': 1}}, '/url_tag/client/1/'), 'url02' : ('{% url regressiontests.templates.views.client_action client.id, action="update" %}', {'client': {'id': 1}}, '/url_tag/client/1/update/'), 'url03' : ('{% url regressiontests.templates.views.index %}', {}, '/url_tag/'), - 'url04' : ('{% url named-client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'), + 'url04' : ('{% url named.client client.id %}', {'client': {'id': 1}}, '/url_tag/named-client/1/'), # Failures 'url-fail01' : ('{% url %}', {}, template.TemplateSyntaxError), diff --git a/tests/regressiontests/templates/urls.py b/tests/regressiontests/templates/urls.py index eaa9fd5d9f..5fbade5c58 100644 --- a/tests/regressiontests/templates/urls.py +++ b/tests/regressiontests/templates/urls.py @@ -7,5 +7,5 @@ urlpatterns = patterns('', (r'^$', views.index), (r'^client/(\d+)/$', views.client), (r'^client/(\d+)/(?P[^/]+)/$', views.client_action), - url(r'^named-client/(\d+)/$', views.client, name="named-client"), + url(r'^named-client/(\d+)/$', views.client, name="named.client"), )