From a253ec3743a434077e339f6d1abb347b8e219e26 Mon Sep 17 00:00:00 2001 From: Brian Rosner Date: Mon, 16 Jun 2008 20:36:34 +0000 Subject: [PATCH] newforms-admin: Merged from trunk up to [7668]. git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@7669 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/bin/profiling/gather_profile_stats.py | 2 + django/conf/global_settings.py | 9 +- django/conf/locale/es/LC_MESSAGES/django.mo | Bin 62520 -> 63017 bytes django/conf/locale/es/LC_MESSAGES/django.po | 444 +- django/conf/locale/et/LC_MESSAGES/django.mo | Bin 0 -> 62623 bytes django/conf/locale/et/LC_MESSAGES/django.po | 4340 +++++++++++++++++ django/conf/locale/et/LC_MESSAGES/djangojs.mo | Bin 0 -> 1603 bytes django/conf/locale/et/LC_MESSAGES/djangojs.po | 115 + django/conf/locale/hr/LC_MESSAGES/django.mo | Bin 31812 -> 34361 bytes django/contrib/flatpages/models.py | 5 +- django/contrib/formtools/wizard.py | 2 +- django/contrib/localflavor/it/forms.py | 2 +- django/contrib/redirects/models.py | 3 +- django/core/management/commands/dumpdata.py | 11 +- django/core/management/commands/loaddata.py | 7 +- django/core/management/commands/startapp.py | 13 +- .../core/management/commands/startproject.py | 12 +- django/core/management/commands/syncdb.py | 11 +- django/core/urlresolvers.py | 2 +- django/db/backends/__init__.py | 13 +- django/db/backends/mysql/base.py | 1 + django/db/backends/mysql_old/base.py | 1 + django/db/backends/oracle/base.py | 3 + django/db/models/fields/__init__.py | 32 +- django/db/models/fields/related.py | 2 +- django/db/models/query.py | 4 +- django/db/models/sql/subqueries.py | 5 +- django/db/models/sql/where.py | 2 +- django/middleware/common.py | 2 +- django/newforms/fields.py | 1 - django/newforms/models.py | 8 +- django/utils/cache.py | 2 +- django/views/defaults.py | 3 +- docs/authentication.txt | 10 +- docs/contributing.txt | 104 +- docs/db-api.txt | 48 +- docs/django-admin.txt | 102 +- docs/faq.txt | 68 +- docs/model-api.txt | 2 +- docs/sessions.txt | 14 +- docs/settings.txt | 2 + docs/templates.txt | 2 +- docs/templates_python.txt | 7 +- docs/tutorial01.txt | 4 +- tests/modeltests/many_to_many/models.py | 8 + tests/modeltests/many_to_one/models.py | 6 + tests/regressiontests/forms/widgets.py | 2 +- tests/regressiontests/queries/models.py | 6 + .../urlpatterns_reverse/tests.py | 1 + 49 files changed, 5027 insertions(+), 416 deletions(-) create mode 100644 django/conf/locale/et/LC_MESSAGES/django.mo create mode 100644 django/conf/locale/et/LC_MESSAGES/django.po create mode 100644 django/conf/locale/et/LC_MESSAGES/djangojs.mo create mode 100644 django/conf/locale/et/LC_MESSAGES/djangojs.po diff --git a/django/bin/profiling/gather_profile_stats.py b/django/bin/profiling/gather_profile_stats.py index c0844930e9..0fd2b7fca9 100644 --- a/django/bin/profiling/gather_profile_stats.py +++ b/django/bin/profiling/gather_profile_stats.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python + """ gather_profile_stats.py /path/to/dir/of/profiles diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index cdf71c00dc..9f24f0c2df 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -11,9 +11,10 @@ gettext_noop = lambda s: s DEBUG = False TEMPLATE_DEBUG = False -# True if BaseHandler.get_response() should propagate raw exceptions -# rather than catching them. This is useful under some testing siutations, -# and should never be used on a live site. + +# Whether the framework should propagate raw exceptions rather than catching +# them. This is useful under some testing siutations and should never be used +# on a live site. DEBUG_PROPAGATE_EXCEPTIONS = False # Whether to use the "Etag" header. This saves bandwidth but slows down performance. @@ -289,7 +290,7 @@ SESSION_COOKIE_DOMAIN = None # A string like ".lawren SESSION_COOKIE_SECURE = False # Whether the session cookie should be secure (https:// only). SESSION_COOKIE_PATH = '/' # The path of the session cookie. SESSION_SAVE_EVERY_REQUEST = False # Whether to save the session data on every request. -SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Whether a user's session cookie expires when they close their browser. +SESSION_EXPIRE_AT_BROWSER_CLOSE = False # Whether a user's session cookie expires when the Web browser is closed. SESSION_ENGINE = 'django.contrib.sessions.backends.db' # The module to store session data SESSION_FILE_PATH = None # Directory to store session files if using the file session module. If None, the backend will use a sensible default. diff --git a/django/conf/locale/es/LC_MESSAGES/django.mo b/django/conf/locale/es/LC_MESSAGES/django.mo index 9437a3b4831f30c9699e0df5cff4e3324c5ca79d..d62d6f1a60bf99a5600c129d26b73b7ece6fbb19 100644 GIT binary patch delta 21322 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 delta 20866 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\n" -"Language-Team: Spanish \n" +"POT-Creation-Date: 2008-06-13 16:14+0200\n" +"PO-Revision-Date: 2008-06-16 10:04+0200\n" +"Last-Translator: Django Spanish Translation Team \n" +"Language-Team: Django Spanish Translation Team \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: conf/global_settings.py:43 +#: conf/global_settings.py:44 msgid "Arabic" msgstr "Árabe" -#: conf/global_settings.py:44 +#: conf/global_settings.py:45 msgid "Bengali" msgstr "Bengalí" -#: conf/global_settings.py:45 +#: conf/global_settings.py:46 msgid "Bulgarian" msgstr "Búlgaro" -#: conf/global_settings.py:46 +#: conf/global_settings.py:47 msgid "Catalan" msgstr "Catalán" -#: conf/global_settings.py:47 +#: conf/global_settings.py:48 msgid "Czech" msgstr "Checo" -#: conf/global_settings.py:48 +#: conf/global_settings.py:49 msgid "Welsh" msgstr "Galés" -#: conf/global_settings.py:49 +#: conf/global_settings.py:50 msgid "Danish" msgstr "Danés" -#: conf/global_settings.py:50 +#: conf/global_settings.py:51 msgid "German" msgstr "Alemán" -#: conf/global_settings.py:51 +#: conf/global_settings.py:52 msgid "Greek" msgstr "Griego" -#: conf/global_settings.py:52 +#: conf/global_settings.py:53 msgid "English" msgstr "Inglés" -#: conf/global_settings.py:53 +#: conf/global_settings.py:54 msgid "Spanish" msgstr "Español" -#: conf/global_settings.py:54 +#: conf/global_settings.py:55 msgid "Argentinean Spanish" msgstr "Español Argentino" -#: conf/global_settings.py:55 +#: conf/global_settings.py:56 msgid "Basque" msgstr "Vasco" -#: conf/global_settings.py:56 +#: conf/global_settings.py:57 msgid "Persian" msgstr "Persa" -#: conf/global_settings.py:57 +#: conf/global_settings.py:58 msgid "Finnish" msgstr "Finés" -#: conf/global_settings.py:58 +#: conf/global_settings.py:59 msgid "French" msgstr "Francés" -#: conf/global_settings.py:59 +#: conf/global_settings.py:60 msgid "Irish" msgstr "Irlandés" -#: conf/global_settings.py:60 +#: conf/global_settings.py:61 msgid "Galician" msgstr "Gallego" -#: conf/global_settings.py:61 +#: conf/global_settings.py:62 msgid "Hungarian" msgstr "Húngaro" -#: conf/global_settings.py:62 +#: conf/global_settings.py:63 msgid "Hebrew" msgstr "Hebreo" -#: conf/global_settings.py:63 +#: conf/global_settings.py:64 msgid "Croatian" msgstr "Croata" -#: conf/global_settings.py:64 +#: conf/global_settings.py:65 msgid "Icelandic" msgstr "Islandés" -#: conf/global_settings.py:65 +#: conf/global_settings.py:66 msgid "Italian" msgstr "Italiano" -#: conf/global_settings.py:66 +#: conf/global_settings.py:67 msgid "Japanese" msgstr "Japonés" -#: conf/global_settings.py:67 +#: conf/global_settings.py:68 msgid "Georgian" msgstr "Georgiano" -#: conf/global_settings.py:68 +#: conf/global_settings.py:69 msgid "Korean" msgstr "Koreano" -#: conf/global_settings.py:69 +#: conf/global_settings.py:70 msgid "Khmer" msgstr "Khmer" -#: conf/global_settings.py:70 +#: conf/global_settings.py:71 msgid "Kannada" msgstr "Kannada" -#: conf/global_settings.py:71 -msgid "Latvian" -msgstr "Latvio" - #: conf/global_settings.py:72 +msgid "Latvian" +msgstr "Letón" + +#: conf/global_settings.py:73 msgid "Macedonian" msgstr "Macedonio" -#: conf/global_settings.py:73 -msgid "Dutch" -msgstr "Alemán" - #: conf/global_settings.py:74 +msgid "Dutch" +msgstr "Holandés" + +#: conf/global_settings.py:75 msgid "Norwegian" msgstr "Noruego" -#: conf/global_settings.py:75 +#: conf/global_settings.py:76 msgid "Polish" msgstr "Polaco" -#: conf/global_settings.py:76 -msgid "Portugese" -msgstr "Portugés" - #: conf/global_settings.py:77 -#, fuzzy -msgid "Brazilian Portuguese" -msgstr "Portugés" +msgid "Portugese" +msgstr "Portugués" #: conf/global_settings.py:78 +msgid "Brazilian Portuguese" +msgstr "Portugués Brasileño" + +#: conf/global_settings.py:79 msgid "Romanian" msgstr "Rumano" -#: conf/global_settings.py:79 +#: conf/global_settings.py:80 msgid "Russian" msgstr "Ruso" -#: conf/global_settings.py:80 +#: conf/global_settings.py:81 msgid "Slovak" msgstr "Eslovaco" -#: conf/global_settings.py:81 +#: conf/global_settings.py:82 msgid "Slovenian" msgstr "Esloveno" -#: conf/global_settings.py:82 +#: conf/global_settings.py:83 msgid "Serbian" msgstr "Serbio" -#: conf/global_settings.py:83 +#: conf/global_settings.py:84 msgid "Swedish" msgstr "Sueco" -#: conf/global_settings.py:84 +#: conf/global_settings.py:85 msgid "Tamil" msgstr "Tamil" -#: conf/global_settings.py:85 +#: conf/global_settings.py:86 msgid "Telugu" msgstr "Telugu" -#: conf/global_settings.py:86 +#: conf/global_settings.py:87 msgid "Turkish" msgstr "Turco" -#: conf/global_settings.py:87 +#: conf/global_settings.py:88 msgid "Ukrainian" msgstr "Ucraniano" -#: conf/global_settings.py:88 +#: conf/global_settings.py:89 msgid "Simplified Chinese" msgstr "Chino simplificado" -#: conf/global_settings.py:89 +#: conf/global_settings.py:90 msgid "Traditional Chinese" msgstr "Chino tradicional" @@ -329,7 +328,7 @@ msgstr "" #: contrib/admin/templates/admin/base.html:26 msgid "Welcome," -msgstr "Bienvenido," +msgstr "Bienvenido/a," #: contrib/admin/templates/admin/base.html:28 #: contrib/admin/templates/admin_doc/bookmarklets.html:3 @@ -340,7 +339,7 @@ msgstr "Documentación" #: contrib/admin/templates/admin/auth/user/change_password.html:14 #: contrib/admin/templates/admin/auth/user/change_password.html:45 msgid "Change password" -msgstr "Cambiar clave" +msgstr "Cambiar contraseña" #: contrib/admin/templates/admin/base.html:30 #: contrib/comments/templates/comments/form.html:6 @@ -358,7 +357,7 @@ msgstr "Administración de Django" #: contrib/admin/templates/admin/change_form.html:14 #: contrib/admin/templates/admin/index.html:28 msgid "Add" -msgstr "Agregar" +msgstr "Añadir" #: contrib/admin/templates/admin/change_form.html:20 #: contrib/admin/templates/admin/object_history.html:4 @@ -387,7 +386,7 @@ msgstr "Orden:" #: contrib/admin/templates/admin/change_list.html:11 #, python-format msgid "Add %(name)s" -msgstr "Agregar %(name)s" +msgstr "Añadir %(name)s" #: contrib/admin/templates/admin/delete_confirmation.html:8 #: contrib/admin/templates/admin/submit_line.html:3 @@ -463,7 +462,7 @@ msgid "" "database tables have been created, and make sure the database is readable by " "the appropriate user." msgstr "" -"Algo va mal con la instalación de la base de datos. Asegúrate que las tablas " +"Algo va mal con la instalación de la base de datos. Asegúrese que las tablas " "necesarias han sido creadas, y que la base de datos puede ser leída por el " "usuario apropiado." @@ -476,12 +475,12 @@ msgstr "Usuario:" #: contrib/admin/templates/admin/login.html:20 #: contrib/comments/templates/comments/form.html:8 msgid "Password:" -msgstr "Clave:" +msgstr "Contraseña:" #: contrib/admin/templates/admin/login.html:25 #: contrib/admin/views/decorators.py:31 msgid "Log in" -msgstr "Identificarse" +msgstr "Iniciar sesión" #: contrib/admin/templates/admin/object_history.html:17 msgid "Date/time" @@ -509,11 +508,11 @@ msgstr "" #: contrib/admin/templates/admin/pagination.html:10 msgid "Show all" -msgstr "Mostrarlo todo" +msgstr "Mostrar todo" #: contrib/admin/templates/admin/search_form.html:8 msgid "Go" -msgstr "Buscar" +msgstr "Ir" #: contrib/admin/templates/admin/search_form.html:10 #, python-format @@ -568,7 +567,7 @@ msgstr "Contraseña (de nuevo)" #: contrib/admin/templates/admin/auth/user/add_form.html:24 #: contrib/admin/templates/admin/auth/user/change_password.html:39 msgid "Enter the same password as above, for verification." -msgstr "Introduzca la misma contraseña que arriba, para verificación" +msgstr "Introduzca la misma contraseña que arriba, para verificación." #: contrib/admin/templates/admin/auth/user/change_password.html:27 #, python-format @@ -599,22 +598,22 @@ msgstr "" "

Para instalar bookmarklets, arrastre el enlace a su barra\n" "de favoritos, o pulse con el botón derecho el enlace y añádalo a sus " "favoritos.\n" -"Ahora puede escoger el bookmarklet desde cualquier página en el sitio.\n" -"Observer que algunos de estos bookmarklets precisan que esté viendo\n" -"el sitio desde un computador señalado como \"interno\" (hable\n" -"con su administrador de sistemas si no está seguro de si el suyo lo es).\n" #: contrib/admin/templates/admin_doc/bookmarklets.html:18 msgid "Documentation for this page" -msgstr "Documentación de esta página" +msgstr "Documentación para esta página" #: contrib/admin/templates/admin_doc/bookmarklets.html:19 msgid "" "Jumps you from any page to the documentation for the view that generates " "that page." msgstr "" -"Le lleva desde cualquier página a la documentación de la vista que la genera." +"Lleva desde cualquier página a la documentación de la vista que la genera." #: contrib/admin/templates/admin_doc/bookmarklets.html:21 msgid "Show object ID" @@ -625,8 +624,8 @@ msgid "" "Shows the content-type and unique ID for pages that represent a single " "object." msgstr "" -"Muestra el tipo de contenido e ID unívoco de las páginas que representan un " -"único objeto." +"Muestra el tipo de contenido e ID único de las páginas que representan un " +"simple objeto." #: contrib/admin/templates/admin_doc/bookmarklets.html:24 msgid "Edit this object (current window)" @@ -635,7 +634,7 @@ msgstr "Editar este objeto (ventana actual)" #: contrib/admin/templates/admin_doc/bookmarklets.html:25 msgid "Jumps to the admin page for pages that represent a single object." msgstr "" -"Le lleva a la página de administración de páginas que representan un único " +"Lleva a la página de administración de páginas que representan un único " "objeto." #: contrib/admin/templates/admin_doc/bookmarklets.html:27 @@ -649,85 +648,85 @@ msgstr "" #: contrib/admin/templates/registration/logged_out.html:8 msgid "Thanks for spending some quality time with the Web site today." -msgstr "Gracias por el tiempo que ha dedicado al sitio web hoy." +msgstr "Gracias por el tiempo que ha dedicado hoy al sitio web." #: contrib/admin/templates/registration/logged_out.html:10 msgid "Log in again" -msgstr "Identificarse de nuevo" +msgstr "Iniciar sesión de nuevo" #: contrib/admin/templates/registration/password_change_done.html:3 #: contrib/admin/templates/registration/password_change_form.html:3 #: contrib/admin/templates/registration/password_change_form.html:5 #: contrib/admin/templates/registration/password_change_form.html:9 msgid "Password change" -msgstr "Cambio de clave" +msgstr "Cambio de contraseña" #: contrib/admin/templates/registration/password_change_done.html:5 #: contrib/admin/templates/registration/password_change_done.html:9 msgid "Password change successful" -msgstr "Cambio de clave exitoso" +msgstr "Cambio de contraseña exitoso" #: contrib/admin/templates/registration/password_change_done.html:11 msgid "Your password was changed." -msgstr "Su clave ha sido cambiada." +msgstr "Su contraseña ha sido cambiada." #: contrib/admin/templates/registration/password_change_form.html:11 msgid "" "Please enter your old password, for security's sake, and then enter your new " "password twice so we can verify you typed it in correctly." msgstr "" -"Por favor, introduzca su clave antigua, por seguridad, y después introduzca " -"la nueva clave dos veces para verificar que la ha escrito correctamente." +"Por favor, introduzca su contraseña antigua, por seguridad, y después introduzca " +"la nueva contraseña dos veces para verificar que la ha escrito correctamente." #: contrib/admin/templates/registration/password_change_form.html:16 msgid "Old password:" -msgstr "Clave antigua:" +msgstr "Contraseña antigua:" #: contrib/admin/templates/registration/password_change_form.html:18 msgid "New password:" -msgstr "Clave nueva:" +msgstr "Contraseña nueva:" #: contrib/admin/templates/registration/password_change_form.html:20 msgid "Confirm password:" -msgstr "Confirme clave:" +msgstr "Confirme contraseña:" #: contrib/admin/templates/registration/password_change_form.html:22 msgid "Change my password" -msgstr "Cambiar mi clave" +msgstr "Cambiar mi contraseña" #: 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 clave" +msgstr "Restablecer contraseña" #: contrib/admin/templates/registration/password_reset_done.html:6 #: contrib/admin/templates/registration/password_reset_done.html:10 msgid "Password reset successful" -msgstr "Recuperación de clave exitosa" +msgstr "Restablecimiento de contraseña exitoso" #: 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 "" -"Le hemos enviado una clave nueva a la dirección que ha suministrado. Debería " +"Le hemos enviado una contraseña nueva a la dirección que ha suministrado. Debería " "recibirla 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 "Está recibiendo este mensaje debido a que solicitó recuperar la clave" +msgstr "Está recibiendo este mensaje debido a que solicitó restablecer la contraseña" #: contrib/admin/templates/registration/password_reset_email.html:3 #, python-format msgid "for your user account at %(site_name)s" -msgstr "de su cuenta de usuario en %(site_name)s." +msgstr "para su cuenta 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 "Su nueva clave es: %(new_password)s" +msgstr "Su nueva contraseña es: %(new_password)s" #: contrib/admin/templates/registration/password_reset_email.html:7 msgid "Feel free to change this password by going to this page:" @@ -751,7 +750,7 @@ 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 "" -"¿Ha olvidado su clave? Introduzca su dirección de correo electrónico, y " +"¿Ha olvidado su contraseña? Introduzca su dirección de correo electrónico, y " "crearemos una nueva que le enviaremos por correo." #: contrib/admin/templates/registration/password_reset_form.html:16 @@ -760,7 +759,7 @@ msgstr "Dirección de correo electrónico:" #: contrib/admin/templates/registration/password_reset_form.html:16 msgid "Reset my password" -msgstr "Recuperar mi clave" +msgstr "Restablecer mi contraseña" #: contrib/admin/templates/widget/date_time.html:3 msgid "Date:" @@ -798,19 +797,19 @@ msgstr "Añadir usuario" #: contrib/admin/views/auth.py:58 msgid "Password changed successfully." -msgstr "La clave se ha cambiado exitosamente." +msgstr "La contraseña se ha cambiado con éxito." #: contrib/admin/views/auth.py:65 #, python-format msgid "Change password: %s" -msgstr "Cambiar clave: %s" +msgstr "Cambiar contraseña: %s" #: contrib/admin/views/decorators.py:17 contrib/auth/forms.py:60 msgid "" "Please enter a correct username and password. Note that both fields are case-" "sensitive." msgstr "" -"Por favor, introduzca un correcto nombre de usuario y contraseña. Note que " +"Por favor, introduzca un nombre de usuario y contraseña correctos. Note que " "ambos campos son sensibles a mayúsculas/minúsculas." #: contrib/admin/views/decorators.py:69 @@ -818,7 +817,7 @@ msgid "" "Please log in again, because your session has expired. Don't worry: Your " "submission has been saved." msgstr "" -"Por favor, identifíquese de nuevo, porque su sesión ha caducado. No se " +"Por favor, inicie sesión de nuevo, ya que su sesión ha caducado. No se " "preocupe: se ha guardado su envío." #: contrib/admin/views/decorators.py:76 @@ -827,7 +826,7 @@ msgid "" "cookies, reload this page, and try again." msgstr "" "Parece que su navegador no está configurado para aceptar cookies. Actívelas " -"por favor, recargue esta página, e inténtelo de nuevo." +", recargue esta página, e inténtelo de nuevo." #: contrib/admin/views/decorators.py:89 #, python-format @@ -868,7 +867,7 @@ msgstr "El modelo %(name)s no se ha encontrado en la aplicación %(label)r" #: contrib/admin/views/doc.py:185 #, python-format msgid "the related `%(label)s.%(type)s` object" -msgstr "el objeto relacionado`%(label)s.%(type)s` " +msgstr "el objeto relacionado `%(label)s.%(type)s`" #: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207 #: contrib/admin/views/doc.py:221 contrib/admin/views/doc.py:226 @@ -937,7 +936,7 @@ msgstr "Ruta de fichero" #: contrib/admin/views/doc.py:303 msgid "Floating point number" -msgstr "Número decimal" +msgstr "Número en coma flotante" #: contrib/admin/views/doc.py:307 contrib/comments/models.py:89 msgid "IP address" @@ -987,17 +986,17 @@ msgstr "Sitio administrativo" #: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365 #, python-format msgid "You may add another %s below." -msgstr "Puede agregar otro %s abajo." +msgstr "Puede añadir otro %s abajo." #: contrib/admin/views/main.py:298 #, python-format msgid "Add %s" -msgstr "Agregar %s" +msgstr "Añadir %s" #: contrib/admin/views/main.py:344 #, python-format msgid "Added %s." -msgstr "Agregado %s." +msgstr "Añadido %s." #: contrib/admin/views/main.py:344 contrib/admin/views/main.py:346 #: contrib/admin/views/main.py:348 core/validators.py:283 @@ -1029,7 +1028,7 @@ msgstr "Se modificó con éxito el %(name)s \"%(obj)s\"." msgid "" "The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." msgstr "" -"Se agregó con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo." +"Se añadió con éxito el %(name)s \"%(obj)s. Puede editarlo de nuevo abajo." #: contrib/admin/views/main.py:400 #, python-format @@ -1058,7 +1057,7 @@ msgstr "¿Está seguro?" #: contrib/admin/views/main.py:549 #, python-format msgid "Change history: %s" -msgstr "Modificar histórico: %s" +msgstr "Histórico de modificaciones: %s" #: contrib/admin/views/main.py:583 #, python-format @@ -1068,7 +1067,7 @@ msgstr "Escoja %s" #: contrib/admin/views/main.py:583 #, python-format msgid "Select %s to change" -msgstr "Escoja %s para modificar" +msgstr "Escoja %s a modificar" #: contrib/admin/views/main.py:765 msgid "Database error" @@ -1080,14 +1079,14 @@ msgstr "Las dos contraseñas no coinciden." #: contrib/auth/forms.py:25 msgid "A user with that username already exists." -msgstr "Ya existe un usuario con este nombre." +msgstr "Ya existe un usuario con este nombre." #: contrib/auth/forms.py:53 msgid "" "Your Web browser doesn't appear to have cookies enabled. Cookies are " "required for logging in." msgstr "" -"Tu navegador de internet parece no tener las cookies habilitadas. Las " +"Su navegador no parece tener las cookies habilitadas. Las " "cookies se necesitan para poder ingresar." #: contrib/auth/forms.py:62 @@ -1105,17 +1104,17 @@ msgstr "" #: contrib/auth/forms.py:107 #, python-format msgid "Password reset on %s" -msgstr "Clave restablecida en %s" +msgstr "Contraseña restablecida en %s" #: contrib/auth/forms.py:117 msgid "The two 'new password' fields didn't match." msgstr "" -"Las contraseñas introducidas en los campos 'nueva contraseña' no coinciden." +"Los dos campos 'nueva contraseña' no coinciden." #: contrib/auth/forms.py:124 msgid "Your old password was entered incorrectly. Please enter it again." msgstr "" -"Tu contraseña antigua es incorrecta. Por favor, vuelve a introducirla " +"Su contraseña antigua es incorrecta. Por favor, vuelva a introducirla " "correctamente." #: contrib/auth/models.py:73 contrib/auth/models.py:93 @@ -1138,15 +1137,15 @@ msgstr "permisos" msgid "group" msgstr "grupo" -#: contrib/auth/models.py:98 contrib/auth/models.py:141 +#: contrib/auth/models.py:98 contrib/auth/models.py:148 msgid "groups" msgstr "grupos" -#: contrib/auth/models.py:131 +#: contrib/auth/models.py:138 msgid "username" msgstr "nombre de usuario" -#: contrib/auth/models.py:131 +#: contrib/auth/models.py:138 msgid "" "Required. 30 characters or fewer. Alphanumeric characters only (letters, " "digits and underscores)." @@ -1154,23 +1153,23 @@ msgstr "" "Requerido. 30 caracteres o menos. Sólo caracteres alfanuméricos (letras, " "dígitos y guiones bajos)." -#: contrib/auth/models.py:132 +#: contrib/auth/models.py:139 msgid "first name" -msgstr "nombre" +msgstr "nombre propio" -#: contrib/auth/models.py:133 +#: contrib/auth/models.py:140 msgid "last name" msgstr "apellidos" -#: contrib/auth/models.py:134 +#: contrib/auth/models.py:141 msgid "e-mail address" -msgstr "dirección de correo" +msgstr "dirección de correo electrónico" -#: contrib/auth/models.py:135 +#: contrib/auth/models.py:142 msgid "password" -msgstr "clave" +msgstr "contraseña" -#: contrib/auth/models.py:135 +#: contrib/auth/models.py:142 msgid "" "Use '[algo]$[salt]$[hexdigest]' or use the change " "password form." @@ -1178,32 +1177,31 @@ msgstr "" "Use'[algo]$[sal]$[hash hexadecimal]' o use el " "formulario para cambiar la contraseña." -#: contrib/auth/models.py:136 +#: contrib/auth/models.py:143 msgid "staff status" msgstr "es staff" -#: contrib/auth/models.py:136 +#: contrib/auth/models.py:143 msgid "Designates whether the user can log into this admin site." msgstr "Indica si el usuario puede entrar en este sitio de administración." -#: contrib/auth/models.py:137 +#: contrib/auth/models.py:144 msgid "active" msgstr "activo" -#: contrib/auth/models.py:137 -#, fuzzy +#: contrib/auth/models.py:144 msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "" -"Indica si el usuario puede entrar en este sitio de administración. Desmarque " -"esto en lugar de borrar la cuenta." +"Indica si el usuario puede ser tratado como activo. Desmarque " +"esta opción en lugar de borrar la cuenta." -#: contrib/auth/models.py:138 +#: contrib/auth/models.py:145 msgid "superuser status" msgstr "es superusuario" -#: contrib/auth/models.py:138 +#: contrib/auth/models.py:145 msgid "" "Designates that this user has all permissions without explicitly assigning " "them." @@ -1211,15 +1209,15 @@ msgstr "" "Indica que este usuario tiene todos los permisos sin asignárselos " "explícitamente." -#: contrib/auth/models.py:139 +#: contrib/auth/models.py:146 msgid "last login" -msgstr "Último registro" +msgstr "último inicio de sesión" -#: contrib/auth/models.py:140 +#: contrib/auth/models.py:147 msgid "date joined" -msgstr "fecha de creación" +msgstr "fecha de alta" -#: contrib/auth/models.py:142 +#: contrib/auth/models.py:149 msgid "" "In addition to the permissions manually assigned, this user will also get " "all permissions granted to each group he/she is in." @@ -1227,35 +1225,35 @@ msgstr "" "Además de los permisos asignados manualmente, este usuario también tendrá " "todos los permisos de los grupos en los que esté." -#: contrib/auth/models.py:143 +#: contrib/auth/models.py:150 msgid "user permissions" -msgstr "permisos" +msgstr "permisos de usuario" -#: contrib/auth/models.py:147 +#: contrib/auth/models.py:154 msgid "user" msgstr "usuario" -#: contrib/auth/models.py:148 +#: contrib/auth/models.py:155 msgid "users" msgstr "usuarios" -#: contrib/auth/models.py:154 +#: contrib/auth/models.py:161 msgid "Personal info" msgstr "Información personal" -#: contrib/auth/models.py:155 +#: contrib/auth/models.py:162 msgid "Permissions" msgstr "Permisos" -#: contrib/auth/models.py:156 +#: contrib/auth/models.py:163 msgid "Important dates" msgstr "Fechas importantes" -#: contrib/auth/models.py:157 +#: contrib/auth/models.py:164 msgid "Groups" msgstr "Grupos" -#: contrib/auth/models.py:316 +#: contrib/auth/models.py:323 msgid "message" msgstr "mensaje" @@ -1278,39 +1276,39 @@ msgstr "comentario" #: contrib/comments/models.py:74 msgid "rating #1" -msgstr "calificación 1" +msgstr "puntuación 1" #: contrib/comments/models.py:75 msgid "rating #2" -msgstr "calificación 2" +msgstr "puntuación 2" #: contrib/comments/models.py:76 msgid "rating #3" -msgstr "calificación 3" +msgstr "puntuación 3" #: contrib/comments/models.py:77 msgid "rating #4" -msgstr "calificación 4" +msgstr "puntuación 4" #: contrib/comments/models.py:78 msgid "rating #5" -msgstr "calificación 5" +msgstr "puntuación 5" #: contrib/comments/models.py:79 msgid "rating #6" -msgstr "calificación 6" +msgstr "puntuación 6" #: contrib/comments/models.py:80 msgid "rating #7" -msgstr "calificación 7" +msgstr "puntuación 7" #: contrib/comments/models.py:81 msgid "rating #8" -msgstr "calificación 8" +msgstr "puntuación 8" #: contrib/comments/models.py:86 msgid "is valid rating" -msgstr "es calificación válida" +msgstr "puntuación válida" #: contrib/comments/models.py:87 contrib/comments/models.py:179 msgid "date/time submitted" @@ -1329,8 +1327,8 @@ msgid "" "Check this box if the comment is inappropriate. A \"This comment has been " "removed\" message will be displayed instead." msgstr "" -"Marque esta caja si el comentario es inapropiado. En su lugar se mostrará " -"\"Este comentario ha sido eliminado\"." +"Marque esta opción si el comentario es inapropiado. En su lugar se mostrará " +"el mensaje \"Este comentario ha sido eliminado\"." #: contrib/comments/models.py:96 msgid "comments" @@ -1430,11 +1428,11 @@ msgstr "fecha de eliminación" #: contrib/comments/models.py:303 msgid "moderator deletion" -msgstr "eliminación de moderador" +msgstr "eliminación del moderador" #: contrib/comments/models.py:304 msgid "moderator deletions" -msgstr "eliminaciones de moderador" +msgstr "eliminaciones del moderador" #: contrib/comments/models.py:308 #, python-format @@ -1443,11 +1441,11 @@ msgstr "Eliminación del moderador %r" #: contrib/comments/templates/comments/form.html:8 msgid "Forgotten your password?" -msgstr "¿Has olvidado tu contraseña?" +msgstr "¿Ha olvidado su contraseña?" #: contrib/comments/templates/comments/form.html:12 msgid "Ratings" -msgstr "Calificaciones" +msgstr "Puntuaciones" #: contrib/comments/templates/comments/form.html:12 #: contrib/comments/templates/comments/form.html:23 @@ -1461,7 +1459,7 @@ msgstr "Opcional" #: contrib/comments/templates/comments/form.html:23 msgid "Post a photo" -msgstr "Postea una fotografía" +msgstr "Publica una fotografía" #: contrib/comments/templates/comments/form.html:28 #: contrib/comments/templates/comments/freeform.html:5 @@ -1475,7 +1473,7 @@ msgstr "Previsualizar comentario" #: contrib/comments/templates/comments/freeform.html:4 msgid "Your name:" -msgstr "Tu nombre:" +msgstr "Su nombre:" #: contrib/comments/views/comments.py:28 msgid "" @@ -1519,7 +1517,7 @@ msgstr "" #: contrib/comments/views/comments.py:190 #: contrib/comments/views/comments.py:283 msgid "Only POSTs are allowed" -msgstr "Sólo se admite POST" +msgstr "Sólo se admiten POSTs" #: contrib/comments/views/comments.py:194 #: contrib/comments/views/comments.py:287 @@ -1530,8 +1528,7 @@ msgstr "No se proporcionó uno o más de los siguientes campos requeridos" #: contrib/comments/views/comments.py:289 msgid "Somebody tampered with the comment form (security violation)" msgstr "" -"Alguien está jugando con el formulario de comentarios (violación de " -"seguridad)" +"Alguien manipuló el formulario de comentarios (violación de seguridad)" #: contrib/comments/views/comments.py:208 #: contrib/comments/views/comments.py:295 @@ -1557,11 +1554,11 @@ msgstr "ID de comentario no válido" #: contrib/comments/views/karma.py:27 msgid "No voting for yourself" -msgstr "No puedes votarte tú mismo" +msgstr "No puede votarse a sí mismo" #: contrib/contenttypes/models.py:67 msgid "python model class name" -msgstr "nombre de módulo python" +msgstr "nombre de la clase modelo de python" #: contrib/contenttypes/models.py:71 msgid "content type" @@ -1588,7 +1585,7 @@ msgstr "contenido" #: contrib/flatpages/models.py:12 msgid "enable comments" -msgstr "admitir comentarios" +msgstr "habilitar comentarios" #: contrib/flatpages/models.py:13 msgid "template name" @@ -1624,40 +1621,40 @@ msgstr "Opciones avanzadas" #: contrib/humanize/templatetags/humanize.py:19 msgid "th" -msgstr "th" +msgstr "º" #: contrib/humanize/templatetags/humanize.py:19 msgid "st" -msgstr "st" +msgstr "º" #: contrib/humanize/templatetags/humanize.py:19 msgid "nd" -msgstr "nd" +msgstr "º" #: contrib/humanize/templatetags/humanize.py:19 msgid "rd" -msgstr "rd" +msgstr "º" #: contrib/humanize/templatetags/humanize.py:51 #, python-format msgid "%(value).1f million" msgid_plural "%(value).1f million" msgstr[0] "%(value).1f millón" -msgstr[1] "%(value).1f millión" +msgstr[1] "%(value).1f millón" #: contrib/humanize/templatetags/humanize.py:54 #, python-format msgid "%(value).1f billion" msgid_plural "%(value).1f billion" -msgstr[0] "%(value).1f billión" -msgstr[1] "%(value).1f billión" +msgstr[0] "%(value).1f mil millones" +msgstr[1] "%(value).1f mil millones" #: contrib/humanize/templatetags/humanize.py:57 #, python-format msgid "%(value).1f trillion" msgid_plural "%(value).1f trillion" -msgstr[0] "%(value).1f trillión" -msgstr[1] "%(value).1f trillión" +msgstr[0] "%(value).1f billón" +msgstr[1] "%(value).1f billón" #: contrib/humanize/templatetags/humanize.py:73 msgid "one" @@ -1719,11 +1716,11 @@ msgstr "Este campo sólo acepta números." #: contrib/localflavor/ar/forms.py:50 msgid "This field requires 7 or 8 digits." -msgstr "Este campo necesita 7 o 8 dígitos." +msgstr "Este campo necesita 7 u 8 dígitos." #: contrib/localflavor/ar/forms.py:79 msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format." -msgstr "Introduzca un CUIT válido en el formato XX-XXXXXXXX-X or XXXXXXXXXXXX." +msgstr "Introduzca un CUIT válido en el formato XX-XXXXXXXX-X o XXXXXXXXXXXX." #: contrib/localflavor/ar/forms.py:80 msgid "Invalid CUIT." @@ -1755,15 +1752,15 @@ msgstr "Número CPF inválido." #: contrib/localflavor/br/forms.py:95 msgid "This field requires at most 11 digits or 14 characters." -msgstr "Este campo necesita al menos 11 o 14 caracteres" +msgstr "Este campo necesita un máximo de 11 dígitos o 14 caracteres." #: contrib/localflavor/br/forms.py:134 msgid "Invalid CNPJ number." -msgstr "Número CNPJ inválido" +msgstr "Número CNPJ inválido." #: contrib/localflavor/br/forms.py:136 msgid "This field requires at least 14 digits" -msgstr "Este campo necesita 14 dígitos como máximo" +msgstr "Este campo necesita 14 dígitos como mínimo" #: contrib/localflavor/ca/forms.py:17 msgid "Enter a postal code in the format XXX XXX." @@ -1772,7 +1769,7 @@ msgstr "Introduzca un código postal en el formato XXX XXX." #: contrib/localflavor/ca/forms.py:88 msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format." msgstr "" -"Introduzca un Número del Seguro Social de Canada válido en el formato XXX-" +"Introduzca un Número del Seguro Social de Canadá válido en el formato XXX-" "XXX-XXX." #: contrib/localflavor/ch/ch_states.py:5 @@ -1888,12 +1885,12 @@ msgid "" "Enter a valid Swiss identity or passport card number in X1234567<0 or " "1234567890 format." msgstr "" -"Introduzca una identificación suiza válida o un número de pasaporte en el " -"formato X1234567<0 or 1234567890." +"Introduzca un número de identificación o pasaporte suizos válidos en el " +"formato X1234567<0 o 1234567890." #: contrib/localflavor/cl/forms.py:29 msgid "Enter a valid Chilean RUT." -msgstr "Introduzca un RUT chileno válido" +msgstr "Introduzca un RUT chileno válido." #: contrib/localflavor/cl/forms.py:30 msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X." @@ -2257,7 +2254,7 @@ msgid "" "9XXXXXXXX." msgstr "" "Introduzca un número de teléfono válido en el formato 6XXXXXXXX, 8XXXXXXXX " -"or 9XXXXXXXX." +"o 9XXXXXXXX." #: contrib/localflavor/es/forms.py:66 msgid "Please enter a valid NIF, NIE, or CIF." @@ -2725,7 +2722,7 @@ msgstr "El Número de Identificación Nacional es incorrecto." msgid "" "Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX." msgstr "" -"Introduzca un número de impuesto (NIP) en el formato XXX-XXX-XX-XX or XX-XX-" +"Introduzca un número de impuesto (NIP) en el formato XXX-XXX-XX-XX o XX-XX-" "XXX-XXX." #: contrib/localflavor/pl/forms.py:73 @@ -2735,7 +2732,7 @@ msgstr "El Número de Identificación Tributaria (NIP) es incorrecto." #: contrib/localflavor/pl/forms.py:112 msgid "National Business Register Number (REGON) consists of 7 or 9 digits." msgstr "" -"El Número Nacional de Registro de Negocios (REGON) consiste en 11 dígitos" +"El Número Nacional de Registro de Negocios (REGON) consiste en 7 o 9 dígitos." #: contrib/localflavor/pl/forms.py:113 msgid "Wrong checksum for the National Business Register Number (REGON)." @@ -3163,7 +3160,7 @@ msgstr "Región de Zilina" #: contrib/localflavor/uk/forms.py:21 msgid "Enter a valid postcode." -msgstr "Introduzca un código postal válido" +msgstr "Introduzca un código postal válido." #: contrib/localflavor/uk/uk_regions.py:11 msgid "Bedfordshire" @@ -3456,11 +3453,11 @@ msgstr "" #: contrib/localflavor/za/forms.py:20 msgid "Enter a valid South African ID number" -msgstr "Introduzca un ID Sur Africano válido" +msgstr "Introduzca un ID surafricano válido" #: contrib/localflavor/za/forms.py:54 msgid "Enter a valid South African postal code" -msgstr "Introduzca un código postal Sur Africano válido" +msgstr "Introduzca un código postal surafricano válido" #: contrib/localflavor/za/za_provinces.py:4 msgid "Eastern Cape" @@ -3507,7 +3504,7 @@ msgid "" "This should be an absolute path, excluding the domain name. Example: '/" "events/search/'." msgstr "" -"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejeplo: '/" +"Esta ruta debería ser absoluta, excluyendo el nombre de dominio. Ejemplo: '/" "events/search/'." #: contrib/redirects/models.py:9 @@ -3575,7 +3572,7 @@ msgid "" "This value must contain only letters, numbers, underscores, dashes or " "slashes." msgstr "" -"Este valor debe contener letras, números, guiones bajos o barras solamente." +"Este valor debe contener sólo letras, números, guiones bajos y barras." #: core/validators.py:80 msgid "This value must contain only letters, numbers, underscores or hyphens." @@ -3644,7 +3641,7 @@ msgstr "Introduzca una fecha/hora válida en formato AAAA-MM-DD HH:MM." #: core/validators.py:170 newforms/fields.py:403 msgid "Enter a valid e-mail address." -msgstr "Introduzca una dirección de correo electrónico válida" +msgstr "Introduzca una dirección de correo electrónico válida." #: core/validators.py:182 core/validators.py:474 newforms/fields.py:433 #: oldforms/__init__.py:687 @@ -3714,8 +3711,8 @@ msgstr "Introduzca una abreviatura válida de estado de los EEUU." #, 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] "¡Cuida tu vocabulario! Aquí no admitimos la palabra %s." -msgstr[1] "¡Cuida tu vocabulario! Aquí no admitimos las palabras %s." +msgstr[0] "¡Cuide su vocabulario! Aquí no admitimos la palabra %s." +msgstr[1] "¡Cuide su vocabulario! Aquí no admitimos las palabras %s." #: core/validators.py:288 #, python-format @@ -3807,7 +3804,7 @@ msgstr[1] "" #: core/validators.py:458 msgid "Please enter a valid floating point number." -msgstr "Por favor, introduzca un número decimal válido." +msgstr "Por favor, introduzca un número de coma flotante válido." #: core/validators.py:467 #, python-format @@ -3830,7 +3827,7 @@ msgstr "Este campo no es válido." #: core/validators.py:536 #, python-format msgid "Could not retrieve anything from %s." -msgstr "No pude obtener nada de %s." +msgstr "No se pudo obtener nada de %s." #: core/validators.py:539 #, python-format @@ -3932,25 +3929,25 @@ msgstr "Introduzca un nombre de fichero válido" #: db/models/fields/__init__.py:981 msgid "This value must be either None, True or False." -msgstr "Este valor debe ser Verdadero o Falso." +msgstr "Este valor debe ser Verdadero, Falso o Ninguno." #: db/models/fields/related.py:94 #, python-format msgid "Please enter a valid %s." msgstr "Por favor, introduzca un %s válido." -#: db/models/fields/related.py:721 +#: db/models/fields/related.py:746 msgid "Separate multiple IDs with commas." msgstr "Separe múltiples IDs con comas." -#: db/models/fields/related.py:723 +#: db/models/fields/related.py:748 msgid "" "Hold down \"Control\", or \"Command\" on a Mac, to select more than one." msgstr "" "Mantenga presionado \"Control\", o \"Command\" en un Mac, para seleccionar " -"más de uno." +"más de una opción." -#: db/models/fields/related.py:770 +#: db/models/fields/related.py:795 #, python-format msgid "Please enter valid %(self)s IDs. The value %(value)r is invalid." msgid_plural "" @@ -4007,7 +4004,7 @@ msgstr "Asegúrese de que no hay más de %s decimales." #: newforms/fields.py:215 #, python-format msgid "Ensure that there are no more than %s digits before the decimal point." -msgstr "Asegúrese de que no hay más de %s dígitos antes del punto decimal." +msgstr "Asegúrese de que no hay más de %s dígitos antes de la coma decimal." #: newforms/fields.py:263 newforms/fields.py:751 msgid "Enter a valid date." @@ -4039,7 +4036,7 @@ msgstr "La URL parece ser un enlace roto." #: newforms/fields.py:560 newforms/models.py:299 msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "Escoja una opción válida. Esa opción no está entre las aceptadas." +msgstr "Escoja una opción válida. Esa opción no está entre las disponibles." #: newforms/fields.py:599 #, python-format @@ -4078,7 +4075,7 @@ msgstr "Escoja una opción válida; '%(data)s' no está en %(choices)s." #: oldforms/__init__.py:745 msgid "Enter a whole number between -32,768 and 32,767." -msgstr "Introduzca un número entero entre -32,768 y 32,767." +msgstr "Introduzca un número entero entre -32.768 y 32.767." #: oldforms/__init__.py:755 msgid "Enter a positive number." @@ -4086,7 +4083,7 @@ msgstr "Introduzca un número positivo." #: oldforms/__init__.py:765 msgid "Enter a whole number between 0 and 32,767." -msgstr "Introduzca un número entero entre 0 y 32,767." +msgstr "Introduzca un número entero entre 0 y 32.767." #: template/defaultfilters.py:698 msgid "yes,no,maybe" @@ -4116,11 +4113,11 @@ msgstr "%.1f GB" #: utils/dateformat.py:41 msgid "p.m." -msgstr "p.m" +msgstr "p.m." #: utils/dateformat.py:42 msgid "a.m." -msgstr "a.m" +msgstr "a.m." #: utils/dateformat.py:47 msgid "PM" @@ -4176,7 +4173,7 @@ msgstr "Mar" #: utils/dates.py:10 msgid "Wed" -msgstr "Mie" +msgstr "Mié" #: utils/dates.py:10 msgid "Thu" @@ -4188,7 +4185,7 @@ msgstr "Vie" #: utils/dates.py:11 msgid "Sat" -msgstr "Sab" +msgstr "Sáb" #: utils/dates.py:11 msgid "Sun" @@ -4395,7 +4392,7 @@ msgstr "j \\de F" #: views/generic/create_update.py:43 #, python-format msgid "The %(verbose_name)s was created successfully." -msgstr "El %(verbose_name)s se ha creado correctamente." +msgstr "El %(verbose_name)s se ha creado exitosamente." #: views/generic/create_update.py:117 #, python-format @@ -4405,16 +4402,5 @@ msgstr "Se actualizó con éxito el %(verbose_name)s." #: views/generic/create_update.py:184 #, python-format msgid "The %(verbose_name)s was deleted." -msgstr "El %(verbose_name)s ha sido eliminado." +msgstr "El %(verbose_name)s ha sido borrado." -#~ msgid "Brazilian" -#~ msgstr "Brasileño" - -#~ msgid "Gaeilge" -#~ msgstr "Gaeilge" - -#~ msgid "" -#~ "Enter a postcode. A space is required between the two postcode parts." -#~ msgstr "" -#~ "Introduzca un código postal. Se necesita un espacio entre las dos partes " -#~ "del código." diff --git a/django/conf/locale/et/LC_MESSAGES/django.mo b/django/conf/locale/et/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..8ab647767ab550851d12b7499defd8dfc2bdb744 GIT binary patch literal 62623 zcmce<34B!59k+koP{Dn{1(z#|Ni+$d0vd4%n?wj82_U%8o6Joz%w#6cl8{)nT6bGT zOVz4XQR>pFb+1*lYSh-Mt#xUwZMAi)t!rJX)}{aFd(OEtlaK)Rec%6lxOvXL-LwAA zxrdjw+3@=wzehLlyj|dw-8^s8jXWww`4=;p`@On5KegQ|onMZlvCa?`| z3r~Pk;TcfjJ>mE!EJMH1T+1q0fqov`7@p#Img5Dm67x%-;(r7xyceDR6R3DMZ}7Y( zI2OBQFgTHg;FF}R(I@}b#3%7!w!Y$yYWS(O2c68hg zD&2cQ`KyEqcN~=egPi?jr=I~;Uh|;bp8%Dv9;kRug~Q=RQ2D(PD!yMpxqH;{NoW2n zJPGqZ!p-4=dA9sRxIg-CsCaIM8^XJx!nqGB+=rpk|0}o+d>U>CUxi!3PvN$3lleA% zyFl4jLD^4&!{J=0^v9v{-2)Zx>2N6gE*u6gg^GVARC)dcD*k(+-owLA|63?`e}GEo zOV0c?D0go|s;KuF+zalwz=m@OR6J9m+#Ll~F2_T~mvs6Qo&7m*Ys@c(%GV80@!s$F z2vk0wfXdgOocZfe>3SO~{U12}e;mD|ZT^Qq#k(bx|J|H?XMZ}>`#Rro1ynlkgnD0(K!x`LRC)Xr=HS~pMi>ZDU|!u zocZ}s?w3Qw|3kPVTY-p^)>?0XpNco=;7;%$xCDl9B~-XWkF(qgD*oYcdsqfl zZihhC&)INicpMx7mqNw294h{+9j}M-e+yK;AAx(o=b*~x-%#$qf{K5m<1L3l48*T#cg9pM#pwjuJv)?9R+u;sy2bMP@g8c}na`*;RxS?YbD!eRI zI444-?+mE)pXcl^cJ^1oBQU=K%H8{LbNFwl^4u_O=R?~;g?kZHeY*^*o%|HaeJ|V+ z{tl{r{mt=n$L%|8yBG~s?hD~oFbNg!Nl^L!HdH*{apudR@_Csvzsl*aclw*4{N3ry z?{|FI@t08L^CVPxJPYOiFHrHk0Tuqc&iq5D^nBsC{t4FICQ#vQ1(nYopu#DG3U>@t z`PMl7RH$;94HeIEQ0_yxHB3R-e+w$U^P$RRIh4EWp~Ab>@jj?<9)nxJ-$14NFHqsU z0+qh^9Y29`|CQsAj2)M@fO}v*0&Wctf$}#SD!lnle+=9VeG^nTX{hvc!7Mz@ng1Kg z-B(cQ7=~pT+zBe&TF2>7;mmei02SY2xD|{+g`bD=_bsS#=q#vl@c}6RA36Ikpvr9n zCSh{FDU|(IQ2o=6P~*TZQ0c32_D4X)Guv^IV+fW04k-U8Lxp=9)cZIGR=|s36*R+zQqI z{v7IkJnGD!g!1=1RC-=?`d6I(?~d<5rQ;L0Kip`kP4_{t8vPuoaykVnzB8cWIp68O z50&mKq1@dJ72h3D>AVjreUCwv?=w*DpN9(XHD~{h(|-n4KI?be{BH|2?(PY9gNH)- zKMw8$lThV#CR9Aj9It>%#|=>VyVdC*fO_AL!7BJHJQS|iW7BguT!_979uBXC3*c*T zM>z3B=CW{}V<+4j{UvY)d;neyhklbZ!4>c{Sbmb72mJ)@i~ec2AN&HUoJXHb-wuz5 zXTeusGhA|tP1kRr%KZs5 zL4|t_RK30tD*gwc>cwxM!u^Be%TV$D-PwQO%s+>!=NnMSa=!_bek-VaY!8*5-J#m! z7^wc}2&i~wK)G*(O2-Om1TsPLYKO2;3e;{O}m z7QO{%!T&2{K5RN$AzMn>@co)HuFmUFlLxp=TR6NV!2zUily6%BW z*Q3t<1*rW073#hJ%b9-ymEQk4ZgPfwe_KP9vkw*izEI)q@AT84@-xfno1oIU1S(x8 zz>VOEP~o5I%+H0*=$FHZ@Ka|$?o8%L=nsVo=UuoF{1~b}eC{~xESsJYQ2E&tDxC*F zy_drr>!IG;F>qJd3YCsCocZ~1WAvB74d69U@m}Y6Gu#;cosO%Z>h&W~;XdokUxubW zLZ$ZusQiEG?AJfrhC9@8Yq%lyJ3_tpUE$8~Sa>Y#f{WpEQ2oIH=h*(F8ID2!Q^&tT z)#I(tweHH{9_SZ1eK%CTZ-8UrV{iui6pn*a&a?eb58MU)b+88Z!rAaExF?+T9c!O~ z`=Y-9j)M0=UWxZNr*HeNZ7=7;d6?e-N5ik+0kHafo6lybbe{}&fZvDv!JFZD_*ba# zceudz^M^py`(vT29#`HOH{^nZhj?_((Y zuizGN$a3p{d$>9JU7*st50txVxD6cd^mS0-90lcm5!Cx=gYtJCRQfJ}^8W*qV$^ybATc-f`w1IrA@}-si@b+x~k?D0jOV5qfD*Zo)O5ejy|7)jz7AhTof=cI`Q1Sj7 zsvfR?h4nuiD!$#J-0cbFZ!DDiL!sh35~{u|gj>SJ&OQz0|3s*CoB~z;XF=unBB=7c z#BqhQ{|Ve1^Shzk{RJxCSD@1I9#ni^LY3nNKeXu`3Kjmgj=MpHU*YuoL#6LfsC3P8 zoa;CrDqoAB;%k8lFAEjU$`pXZ^< z`%S3$zJSW_rdQha!xm8btsRF$#Ww=V{q9ids&pI=mHxw_+|6{H1J_622o>G}sPr8R zmA??mUk6nAeiQBh&xH#A8poR)?{<99@z;*eIlkohCRDs1K*jelRQO*(#kbj2HvApo z_UK2#z2JdR@Ao*U^fg1}Ck0i$8L0gCK!tM_RQTV6@^=MPKCf~5>!JML43(bSp#0wn zw}KBrxqk*KeSd&*_c|cO+E!`$B~?8min5fJ*k!7;%$RTcmmWo_7YTj zxA>7Q&vK~xzb{lg`@s!i4OF=w=FIDzeje2OZFWpUwWkx|M(|w6Wl-^7?0A(kzX7V; zZ*k_ofGX!-LFNBhsDAWIsB~?4ot?K0cdUZS?-V!$E`myT;23x2CqSlN-cqRWHoe~F zdjvcH{Wz%fErH5!77l?+9Z!K9qdya>JkN*9=L)F)>Q<=t`5;t%cn)p{Uvl;z!X43X zaD&b7E>P~OpyHhXmG8r$%5w(X2rht|z~i9O(*jlR+Tq5q$MG~M_vbqOGN|`;Dcl=g z2dm&yP~m(I70>!N+VHl3az6qpUlmS&ptGL_mG1_qe6&D?bBg1cQ04GlxGDUhGrt}x zUAMqZ;GIr?zq9Xk=D&uD_gT0pd1%Ub3iZCuhRVkkP~~wg%)_5T`5*NYTh7%`;g5$(-$XbJPIKmSq1+!06ctYrjAIWRhWTkw?#_qu_kE~*T?JJ>KZ0sccR4-*)n5Jv<^Dq`_g^~w1~=RKvpH0} zJ43z4k??jn7An85!71=PI2#^ti(Q|c4i(;uj(>&9=NoWW_=)58Keg%GAMS?vWaz^t zsC<1JDqj~srQ>3#d|U~)gm=P9_z0B!zo6WI2K64iTWvZvg3Ra9`M&t{@#X)f6F`Vx_u&?iM|~wo_nFv^>3(h zJ@_uWE?)%YZyBtI_d|s{>~6b0se%>gL%1`%0PYQc49no}oc(9;DD->&%+BNUQ04S9 zsC54oDxS~aesJ%5?0a7bm98$Rcviu^;2Tis9QJeTZXdV+{dA~wTn)#=`=Hw22Ty_%T#@Z+f3Cw+g8E7eODM0#&|OL;354D%ba54V<{j z){8EpR}J@DcZ;FwVF*XS6x;@$3pa#6gqy=_pz7DHQ1$L!n1T<& z&EV(G9v%g^gA3szm~!@yLxuMoRCq5zrQ==5Jgg}1>ktiNGU z`t2Qeb>^d-el%1%COG{hsCIXx(;o#D??R}2E_U`Y#{^V+%sBhgpwf31RJ_Ze%JEXi zl~C?)g^Kq*?^nDDK{?DQ8 zhdgAt1w0J>a42{4q2fOlsvKJ2X|M+>9bZD#yCDzTb~F+y+(V%HndxvRxB%_|PjLEk zU^)70q5MDT%-@8{$NIfC{EeZ~w-q$y>bRRT-^=MMoqj*Z8fQMqaXM7Ev!KeS0V-dM zpz;xeil-gQUEZ1ZK)L@mRQ%^cxm)J+mqOK>E1|-<1uER1L6yTpPX8p7yWd0ke*?<> zyHMry2~<58@`#ORJE(TNGnBh3sPM)+)Q7FCihntj zyDQ)>@J46<7&P?<%H7LQ@&4V}e*jhgH+}r(eCVX za2Wbipvw0=sC=CdmHsQ?FnB%O6y5>V&hK}88mc|M3iV#RCvCaz0`)$|K&5LIR6Z6$ zg`0rNXAUa9Z#w;VpvrqW90RX~N5bcz{O$gfod=b}gVBEr9s^fF#kb>c?0&|0$7A6> zn4box!JFYZ@FRFBJo&eF-nPTjww}hJ+Q%|@2)qOC3I7Gphui;-cK}zyW_Zjqwp@Mz zRlbiymG5t%^7nhF{J-SP{{dBw@59aDf8boW@w2vk7D0uRgbF7Ew}RbJ_3K1SRD2IYh5rPU`xl`6zXIj{6Syt>3M!r3JZJZ-c7~gyZ-H``gL*$FI-Um= z@8wYbRzlU|o1o&o&DpPV_K!OIr=0#7r+*PDT`xoB?;lX%{s$`m8$56In>ua-x5In{ zR6QF5w}3O9{V`DajX9nGw?Th0R6Z_*3jb25bgyu{5z5_da58)Zj)R;0-tI>o3RMr< z;dJ;DsPugV74Cna`l0pyV9j@d%GXFJ`%0+v?hlo|*--Hv3zd#ERQ|i5!aduWpAVJZ zi=p1fRZ#EiW~g$0$k{&$cR>F}%c?>KloJPazI zS33K@!|$PgA1Xhm|IzwC52{{V2$lX7P~qI}^sAuK`4m+8UvPW_4nzMDRJ-zCwCUOl z%Df6H9|t+sLWNTY6@Q~MKgQ{sq2gZxH-INP`%|F&o#pfwL8b39r(X#b-c62oK$XkA za4+~E^x^9;fJ6Rd*As1UZ}h!z3j8OmhNJ&%*H_2G;pmq^A6^f4fxm+4S6+AeP5xr@ zKME?GI;e2Yhl>AxsCx1WJP>{i^?s^fvi;k4q2Bu)a4dWR?gPJsD`EM|wm*Cd?u`B| zcnlo!SG#U&f(N7jA>0lA5srYLLZyGZzu9)MuVVm}u1nx3xC&OmSDg7)uh{Wv98`Kk zsPtS3^*$emr@`OBnXvIyd!Bv;9E1J?sBrgu&Bjv)N1{(bmG^~kBD@DqfFHxrug8nwBdUOxm5Uzr1HxEJi|25nQ zJ_A*sUU2$X;1Kk0I`j9S+<)fG*ZaFI-%X&x+Y8FR3hF(NgYrKes$ZK8H-^VUrLzUf z-3d_cPKOHTJg9zUIaGPAfJ*-(aAWu@D0ff8`S6cW?#8@n-8DejFMx{o8&K^!4OJgc zfm_2{pyGWHZUTSl_%u}g`y*63hyBBr+iv@;$E%^*$MsO|Z-Se_d!gd{rQ_3Zee{2X z>Sz8874GMb|Ak7&2Jcya+rpvfcYzA83@V-jocTe{dwI zh4&*k4BiU2gsY&+;Yq0e?m4J>^A?oJ z$iHlS!=b{jfHL0?ZUHAj#eWo3I7d7Eu~6|gLxtB4RX!&=`)@;~<6Nlnx(X`%yP?wc z3%DM91j^rIP~rUsDxMdh;{7vJeqVKb7b;z!LAl%H0~_9Ej$1nphYD{5R5+uc;;)1X zZyZ!TINa$MIfjlMjwd>v>3E^z6^_?K<>Pj!`0j+t?*niv_&ij6Z$OQ||AKqLO+U2x zu7+Eq9}iV7)1lH?59NP8RDN5b!s&#{%E&vyFnI{k8}^!xzI|K)IdcoUSrhoSsE z4(0AQQ2oi%&iq5D_&F^T5 zO=9*ziTir&u5kKs*x$tScOL!b!$oiz_U|~eJ5X0U_fNyGFh2$UnCDB}ejjSy^eb4) zqhEqJR>Gw`FW~-J7uMm}mtl7d&%>CVgnb*2eoL_12=gOQ?}GX;?C(XdpMz0<#@~Nn z_W*{6858DNsQ-kYQJ80)*=Oi?N3UNC+yOUd@ca$)|Dx|ey^XWi{Nf?w(#|oD#(X!P zr!ae+XDn{7!QWWao5N}F75F-CzJQvaJ^;UoyCZo@e-Gg1yE5as5Vd~IxZMo>Dy#KA zal9Y%M(5^4$L*Zm0^Fa9{SwTl@l51NVs|6YILv>~qjBn1xRhru?t9>5o?qg&hi5PB ze+XN7PC#9Yo9Op_r&#E?KmK%H;(F&Mhk8q%GkJc1|4*TQH(=k$^9QRne`~OBM^y{= z!|q_7qj^4cZmxzMJV#)!-=}ax!uu!B`KW)vqc%MRKR@QtZ#i}&;ar~UFuR-Q9L(n8 zRzLN1TVS@3=RIRW8DsYeZnoypFK}+J!cFP#VeEhE3^sOl+m*O^!}&kinVpN`aQsNtMe;;6HgBPPoVm!%TV7^Vy}5q zny2)aLGw$OmP4G|Q;6q$%txdDwoAur=%+Z3n_&KLp7-##6VFYU4}m{({z#cH^--wDI(NIG-X8UpF7Ao23$rgVtAiD| z-x2CJ3%g}J`(URrvtCXBlc~W9gq4-_%!Bam|eqj75cr=|A}WRdd*4n>&5K}*hRl2c6+10#fAHKEXpEF zcs9>|Jm)$48poIMw;s=PJkc-V)K&13$k6dY7pG)PXQBRx=Xsv*;dU6$z0U6qj`DUl z&uKg}F#CfuzXv}Dk%n(zuKC9{Jo+7r+4IiLC8%FQeJO7B`wi;f!cNS8ZcJG3VAji1 zj+>wG+~LgshS|Bedml!>XI(gVJD!NeBxl))*##wT=Q;B`VUFj|*bR05wsr0vg0Eus zHqVu~`328()MrBdhGPFD&lKnHpP2oNXMdi%c=Y=Q_HXeV=G>g`xWG|vE+8L))8B*s zXFSVz-r{M&{BKadM|oZ&Ed8Ftd<@S^Jio&137%~U=XPf=H+!Le3j1$i-r>woN3CD8 zMW4SLIJ=85{TcrDgk^9hej8DL3vLf*V|FgjFx-#k*@mYXyLU0ueJ%Rs(I4v6yQ4oJ z^#R!Lh9{on3z7?~h;lFt%V6g-4Pj!A?gePMET8SU|z260(x!vQ~ zt;e%J?(}<-XSq=^-eZ2TQ#UwXj9CTYp6%RMqyC)dW9;|EZiO@d0JGon+=!WeyE=2J zkLNj==SSG>kDC=Tbic>Y{|56Ppg#`v={(;>Jp|tA!uShn{buug#B;9G--*8+c=Q{^ z6X!XOXQZ=7+2{9t!kdlVcz6vqkKk8MpXC{e`g7+xhW%0(_pX@lj(P-kZ@RedLw^PO zv+;aC>a(1`*{DBKfczd(*r>O2`t9KvnE!?6Lfq+>!7S(0-^6`AW)Gr&4E4#*pWIbr zcBa#R!?~CFD?ClO9nUio^Sf|Uj@ceO|HbTAa4cq*pk9Rilkk1ajzfJC>Ur2@P~VI? zhFZVhSa|O`{sMdb7Vyk*Zj1qczK6fk-xkVg6Ul&*pgqwSGUx|5m8Kf!T>XW2~|Fs*C?P%oSWm(SE1hvH&dP6Gw7%CT!Gn4sNWXY#qo0vW}BgIK>dz$--P-$%>Uu^dH6f0 z4)D8?Q!AXy^{3=F4S(<9zne$DiyeodJ{fD_^w53$qw^?n#f|2Vt={RU9Kmw2v1UFZD2i+ViI zMNTg_52DY*1ZMl8z8)SxSkqA-#B)SRTCT%xIQsM8xAC)tXHWFsLB9yM8=^lH_138M z+YR*>PCXg@E2tOazVvrJnjy~MecV^#=I>CyV^QD7Gr{R)HWUAMWA--B<)|0K80Npz zgZe)BAKcercQwyB==J+HcAH?n2WI+pquzjL75Zz@KY_Xno`$=hqP~x(9Q7pU{vpT1 zG20Qlc|0HD{!#cH?A}KGIqJX44^QduKWOg4%|1~W=zrwY2jh07b6*dqVBXI2PiOX1 z$JYt_V&`WU%--bLl;>E?NAt8ey9P(aeh?#Kx5SgVFta!p z&n3f(tnZB+RUYJWnTqU4Kb`WE@l=Q-0n2#S4^niJqRqy8WY^T43;XJ1N!jJY zit4c~ep5V|jHgp;HESQh-9To%jnxAz8Y;>oCV8X88IJWZ>&Mbz)=#B#e$deo2IM*I zH-&!S=QGI;UUHa8`L@)&N`Ih29qZc{K~Bu8P%${8tT(Z3|3g*LvNaP&qZ~RhpFDJ^ zSL;tsXY#241uuNSn${lAW>vOnY8Ee|odPG&6Y}v)SW@@0Yp*P|zTQmqzJr|6s*dz~ z-_<0>*6ew6XR5A8v0+i~)drc?An(;S=k(5MV=+A{4qMrbCTq+Tn-nB-6qThm))}Ol z(WE=%6*sNG$N!Pn-q zBs$ZUj&W;L(YP*^Dlw&cd9|6KDc&r!suVIoC#m7Zbf@!vHt!T&WI>fE7ADDqX+opQ zZ4Fv%i%Z=@NEvj5vBgn?9C?_poTgihhn93QneNj2&xA=bAM@k6uwAVdH`GoWcC4mP z?1!OirBvyR=%*Swf>b=)#)U(E(3I{BD}6dE-a?q7tDsp2vG#b%?+98$x-_bLD(oWo zR4m=aOUvf+lr(QA--<5Zn$Pl9I^)T}n-s)?CFve9OjRw&hZ&lP`k7W4CA-yaw3FVW z>u1(b0We$=_>+0vn5TGU{q%lAK7(13h8J)4>$1rp#mz^Pf>gS*IrLLO%%2oCQO@bS z46})VZaYh>ZdOQr^psSq>ZUVp$i;)sly#SB4wGqG+oT{93zwujQDnnp)lA}Y%7$DJ z%SnAgK6Ido(ywN^(RPwJe1|de5X-jF1kt2g$rQ{mItVEY<2{K$F4O5mdyq-+{>e)^ zP3}^D`BVl58e(H6Z(8)UAejv-2DGm9jiuWCEZV;uk?;&*Wk_=Iq6J}Hy>unSSD63z}5QlY?xIHkmexc#?XW ziup4`UaV{|;I;YnbSZ6e%ZNv`hH2HV$yEPLkn|gx(>YZo4Dxg=liPw+E0G$gRyq~K zUoM^LHWk$wwRh7dve_<5JaRRdzQkLNb8Gv&$!%eCf<{Is+LT`E$8DQ#PPbEtId!e^ z6k|;$-9d&mf2j3GHp+42qAkE<$e>HH({f`Y{q``MRZA_j|9G||8FZ^(NKsxvteOOb z_H|5diw7hbgLsp&9&gJB{PQNq^D)}f+>lwqg6*TvXbm3S3T5HZ%S?B)W*8{ zsf(x0o?BnrX!L#53+fuDFSah`&7A2?u|4h-s$~;Bj8EKL6NfhR%k6wC&eW{LAWe^) zE0~Rz(%9B`Q^MwI{V`pu6uh6LZ)bF9HL^I^DrbyTe(Ku$4>x724>x6gmw5?x>Y@?A z3@N1}j(ww9J8m$-W&EJIS%qz8OsTS*-xl!ZIw*L}RhTaK9rTK0m}Z~m{ktHQy-ZWL zt*%qTY`ir^8EIHzdSaT5nX;%Es0tNhu+vtRTDY_$8E-8GiaWbaQ&Lq;a1>l1!3jr+vy*-lyCT2^GTGQ~!%$U5XvA8Q{TbumyX4`Jv?4@D=7sa^^ zwry%ct*u=bKSv*3b@b6kuba!G{dISG^wCNQ?s?WRbR0*Xl%^7IxnQX) z2H!|0{PJ0Kb1M4f9v||?!#^9jRrkxGUHnd-SJ$WjtS3c>GnZte(;ru`#q>MBOh96q zIya=7$SbV{>3W|jw^;DG83QFSnBDDE5W?s_N^jrc4WxhSecp0a=#F!Pp_%3Uqd*?PyfKeKJ$?Nw#bJ= zbS>*T073Yh+G-TcVu zy1868SH;lMDb_w_I+FE^OLj!@k|G3!NsB5(R?^>SvBID1c{Qo zlzE<6L^9yTw1QKmWzmBG3Jt=oEJ6)ZRS2sEVW^fa*(kWh(p9(R+LMG^r&h*T7|&{T zih!k)AthF68bubdVc2d3C``ZnvSLuNuq9w4#f3s_tZv$a7(=%=Eo`dRpG+QU6^by4 zfFd;MW-h5_W+E(x$TV5)8HQqFBov;EnD+IR)#;_&i53PW0hBm2~Ndhxg z!%Q|;>1#EnnWtuq>W54TMbTAjY)n;3{9I<`!a)eQyCB}kLxC!f+ZfVu4~NkS2RV%3^P?3+@|cAS#D?65&C zeA`1B*L|xMO`oM=rO8%Ts9dlb40C-0Hnz^6>a*t5>Q%`oL6R%I5=6KxTu~w#1aUo7 zJS3$kVys?4XynV@w0t6uJ%7^)-Z4ZJf&7bwuH=v+vV{Uu7_iTmYW0rbH6rk(mP%=) z%SVK%kmdXlA!Q<&lAS$yN5ot5{9%HRT{6hzvml*kNyz)Of{!E8-VqrZiSb3B9k8Ot zAm4;kN*fVJxRsF=WEHeV_GyAC7|pTo5f5PkLnNWpOa+k6cMxx$kduhvsn4ic!smk= zaU;6Vgc&K~9r>O_TDB>bLKl^ezul>jZJy~tyAe0T4x8@jG>5Run~vn44#dgBr?V&{ z%ITDJlJ)-dcx#&}rs))cE!^o=*6K}9rrQu|Hha_438dvQ9H)^6vhR@cMtHu=L&Ga;@`sw*F$;$xjt^gz?$or<}k<}ad z^z`mDiL09v%|*SsCQ2m{_X?9xuh@sMT11Si{=;;&h>cpqSQR6pnpANsCTen>acZS% zr|FTrI!WgFE6Jzb-^hA(?V8SMdq^`F^kgeWOLej{~wXz@~r*UG4w zhZmBjQnqQ!NPtsEMN9-;ycMS4YISv8>N1WDsJKUB!mc)CUdtcT-yew_J*EARBlAeD zkIYk-j?}0yBWP7Hz}4*;v?^zmGVOSVn$V1}hh3m_!kf{?#-%qSt)0#pY0TI}nSr2( zB+Otn&-$>+PbZMUhmpRnpeRulmGdKOw`nsYlkZ?p!JCn958Bf-?iu;+fN6Tw99jic zfxc`;SFk9b%va6Qo{2Z3+qmk^vXv9E$%Hteo<1e*vAHrgo?a55Ks0U}{7hyHbAlw3 z3QThZoAPFcq`KIZnf;lW>H;!s8<~bblVw74h{Mh_O>t)2_9Cz&-9a?*R5QXy7rstU z(5D26)g*{c6gM;8kxO@G6WxA&JdtNw;LS{ibT!`0bgYLz66iYkya=aZ)*(Y$t#6fS zB1p!`uo;M&GU+ZQ*v=N1p0vbUnUk1CgS0m6kccOpV9==c=SW_LKtE+#yECrT=4_fR z6*mWHWslWPU=T_x71czKoyrSwXvS{{ma<JY(}P8$qb2KgrKG|psv z$dYGm{Pki+N7Y%4A}%x3hILx!yt&JUZxBX;F1CItaXk$ zhN5T?X(T5&_#1DnUKejx6xh!fLeNAvzL|CeAj8niUnUzM%k)f!*wfFl%+fehwZK#> z?LI~|w?2%qBgrI^ZCsot*+Rk_1r>H@ncsQ!oFE92+AlWBbkN+pg7D)Au9LI|&MinM z%kH2xZqTDXzaIHrGCIOgaxg&a1GeWR0S%a)RAj76%BGWvsi^?CP-h(-e~@z{2sf)@ zg^S#t-p>mE8NBR_s~$-{kLDuvwEko|>(zJAVrefboqR@fj(WDd%pnUbyO(GTnMK*r zVF+2Jdse`1Ak9HWbVf92qGhT!i6as8R#|rVS{ZApZ?mk>rhM+yBWBO4pf;znSeTud z31+$J)(_RiK!4jN(Tg)<=el}zWprnleS_!BdBEx!v=yeqH1>02W9h3?QxpOpvFFXpl0J$EtNH` znTWIZr1^v17b6n;Lj=hI5!q>kQZryi(SmWRiZO-dP;*gEY#O5$6J`s9c4D^%v@2h% z4tQlARK zcx~p)fiWoTgA{aiIwE3Y%C(s{9%-#KjDT~>ZehQk?p~!3_4($M#r&Wx-EIvR1?{w1 z+3Q$`H!DvU&JKL<9Vu^iur#1IpWWnM=j>*-Cis(JICH&Zv(6M84nDWmAk^P*MWg?Eh~WZdJnTd=8-D(6pNBHEqx<`gHLQZp*03{AHZPqn1c^~6)mWagBL zy-GFARyiZYYEHeUlL#9ziD`5J)npB>3li~y1dmFsr!?HZLN*hv6qAN$&C-;PCW z!9lcUj~ouNcBfe?1B|#$%o3vdud1ur0LL)st8UwL&ukA20+QRLa_{!pszYKxg!J{iox4`|4%Ml;mor2JpvF1`=Nl7*@31X=n9_ zX(*Avw=zGDqnNEV0*xjaM(*{0F{r`Ha=>JjB%^e*_v<8QkRblYWSGrfJ1YNgi6{wR z-I6d!G%W*3lKQzVt?bl7+7ts3?YP}GgHRju{k&wE3o?&(BX(hmszKOn`}K3~+DEyD z^@=PDLMHHybQG9#^e#Gstcia~_YzI;)sog2fVRd>NEOKCXspE^sx$~QyOvxd8vH8F zY$MuwD`PgpOx&#(5aKyOpYhgb%Q)Ai^&!jrF7*p3E3fU=w8hu48XXK(qjP@gR+5aA3@*c{Lg*_BV0QAIKb?elYxMn{UP{V8dUyU6i$9&VxJdS(nRx-=)!vb-(k zUvttiR$)x4S?y_Q4LJP{qDlK41Ua1RiZRQZ!#TGg26UWItLZt~Jr8{LNmy`7LoPH! zc1Osy1{qbZwR=T&=ujQ1HiyroY0Kq0YDSO7mQ^$-7qa-tBsq0HC*2wJ^f?_mC*7ry zjRBGKo)*ze6P*#(xPYn=7toKGT zoJNVrG)S>(PN%)OMvR*E=5lTeAx|`q*L>&y4Ll@69sEad0@3@6oP8 zBa2=3DME~Mdh!{qq8g}-=8su+BT9n|rOZWTV+>ijkOi8(B;uOsSsM=gBf@m+af_}!SG=`~`8*Ysg)2r~-95maFl`81%|f=piX}&7y@E>b*Ujym zS>XB>jx@Vdwq{>d{S&p`sMRfLN~zw>&5?@>Pve3vx?gZqPI`&zLeHcvkii47uGbLC z|Cx7_6&uI@K{5{ZIkiY95L9H#qG0If=nhO?v-%LF!H7Wk%lsb=O^Le7L^PR;cd%xp z_Nim(6x(M& z=Zft)k)kll>Wd5g=u3@;4o-m3$FlSe{P`gr3FWK9m+FXebV`NY7Ic|_{*rB6y;;?O zw&r9v!Z6f&jpa!D>3lff7c5^mJzti+ZI;qZ?JC$j=+;+w)0=(5#evGSkS8p}v+0 zP+56hW0>T#0 zq_(=$yJTS0V$EJ?B74Y+!@_-zc=SEK%(%k>T?eBy4bj_+b{H6AnciulWwxqOlrgAC z;x6G@$abeDl_ehx7QP6Sys6LH)6BGp$;}n*OmyvSN8uM_j6_6lp$`)!3uCY&xkU+q zCVpSfx#oD(aX$CcUNQfSR3ci+t|2TtqJ53XjTm&0)aoroUq$g9L%Yia-EkA^`^ZK) zc5QROJP+X9MH-dL050+!wCMqpMQ_U-+MK|Ph90vduz}UB`M}x$KJ-DIo2gQNn7pvF zYC4XnK1^0`n#xr*N?6%O??NqP_%oesDrZ05EVHqjuu48!w0rin^=N9rjI=q?sKYxt z{g7TqUyM?mqcElKVxXT3*p*2qSe#Iq6V|d%pBSXGrNqQVGis=X^P6P}YZsM9bTF!lr}$uRMq$U@O>aJcoQ>UXXy?U$7f2_^3{w1(T%JU!`8J`qESGpBFN#$3s|uSSbKO)6N=*;JIcS2dyla31(b zRe3Mnrn6qnldT10K(iL|kRok*g~VT|AcZA+U*kv=-N$((*0f(i^C?&1LufVhNEF~w zY-3on7o}@(Z>Gwb>QOd|iLVK;PkLM;vwq1wOi4Bh)@Fm}z`|C|Ku*?dTM)C1b*J9@ zT`CJ0zXZ<|U|5RGVnH&RxrS|R^tAx4AE zxX;~PYKv{NfBWFn*3#x=-fln9(58$f1BU538*Qys_Wek9P0ss#O*^2&RNC%0v24-t zyVc!jltq~2PWeQF6IV4&!b>D4U(I6C$so)AnB+WbQ zrY7+=nOn2G)93mk)tyPcR9Q{!8#&p=Zn7o_=1+~+m<*P(e})?!P+^C>QL}3PM#th% zb>oBT$6>8Tj&CHXopO+)8OpiY@oPlLXO1$l6&Ed68#7^3Tmm>02-Z>&%`BST@J7xw zB0RDv81e~rBPX~_BFv_^_R;*tPJVrh2}e5c!%Xn5l!-0fo~N8o^wBHH%|f zi{?*uG?XYdkB9-$tesTNQ>`yeLjUjN+^+IG3UeL{5c5a9ML|(hP?@n=aYnUPGl{ap z%ZmMNwKtFRtIcgWZ$2+Io)zq_WTfCjI!0D=s#BI6l$hRF-}lM~ZVzB0Q9nzg&R0u1jpdsk+ zK*>=TqviCAgi#c(EQ?}!qjg_Z8g)?$A#LGsL8LKXZhH$jnruZ=3v>ua?wr<$V)~rx zQ^BqCkrWDWEg=ke9%WE(jlt6B$cp(AtlHxm3M1k27EZ05yVxF(a$j>VL{wo8qZkDO z{D*d{$b|V|`w3OzYRWwtfxtDwrZPwS( z_wD$0%kC0!wd$qYLXK<)T$E#}YFex#W{%^kSIIP{q~@~C;?5sns1JMzBjZbe5*>ew z=2&*Upyh&@ZMidU?#LVaLzC@UIMa6(=1y9C>0qp>u$*@@q4%rru9bExV#!zRJgAY| zAIucDaDjpGE6W-iOzFyurp`gma*R0eZ_iV(N-#c3H`&Y@F`B^Xh@si3*Mh0frgJ3h zaOsUgG`^j5!&yb?tzQAQuaPnr6K6${}fLCR%GFhYw=W|vp(BZa4`Bt8IOj{8) z4EjqB)Ggu|KN7;AnzKz>#nJI4Ix}kaN{}T|*E}V_$Sm2Q(~^p1TT2Tj8809X zTLRIQ6P~^eGJ}y@zF}bY)FPtUkL;t#dXljCOZcpS4oqtM)mEYR!>n5m4mrzM zI4&ob9uh}gabc#-Uda^N>s!6NkfY`~uW&NcrOj?@`X;27u*qW#r|s52KC7@{w(t?H zr;>86C~VWw%gm~>p6Yj@;uaRnSnHarg5(Nk++t%s42cSq)*N>7d7j z0vYos>+yLM{Q)f$B_HSOsAscO?g9`gJIzRK*DoIT0eDL|7qkSKZG!QWMX@&aO4V79 z9a`q;X&R?hnzyKJVOog3h43PEx7W_hshxM>?iumgCHPgj@_jhVeur$4+ODkev};L< zD5U7!4Pb;Xv#>LNvz|!>6_8Dd&`YJ61!`~5PPetVp?(%*K9P#qhBHHmlJU~bIge$6 z$K@Iws`XI=_KF>Ei83p7mfo4!f+kfR+%!TPF*~k)Glk^L-O_N+v0kLwub|q$pgN$S z8dp$_FQ_IIR0n#Qn1_^@&2>^6Da`dIMIHO!kxdqrB+H7M)I~ikrs@P@{x_oIsM+dB zB>WAxeU$a=%Qt^*W#&^Y&+YO@ltoa`BoOaA2YA;?)HAa+{lOr<)Z;{==@-ndWFE6T z#c1T?80RqHuvLx6P8zM0MsA9h<-46Y4UlFl#f;L7JHA%&%)NV_5##fhPLng)9@BPD z5t%=>FEjC~t!AxZ@kLt$6T2K`J#FpRczjNnFn_Y1SrzGzl-bHux{{jS6iP#vpdM&W zCaqiXs_J4@%wcsjqQ_27<4y)K#k1Nc6?#7OnyK%U~=g^t7)hd=yDOPl} zry4dR;|bje#@~sy7tml|#pOL1Ee>*vTR8!dtfId;6wfIxRcj5a8j+w!Nw12JJuu}@ zjL}uJrj6$C)^xfx8Jf;0TWx&SbGuD3&tt2{44rH{bt8(dF;l0}yx@51V6(zt264!| z#%Wat7Tqb$En%i=sylI8;~&@*&kgnHB5kKzxLk2b?@GRr@;Q3I5|Qdm2T)-?itA*j zRBO2CM#Yj%6*ft5&h{f$kk!cCh#2j)ii3s2_7kO6a_Qol0-3>ANO`4o^&1tvsG&(= z4%SwfLxu?HnS3CtGzvf0yQ+6pN1QNhA7%5jB;OSH49x9XDsmWu;|%$j-`Ts8LZJ0< zNLqV4M!whYPDK`$nocEH59IEI@@9PvgMEOL^fuP%<3VZvRo$nG28e8mPb zGamc8q#rJN=8i=9=F0)aP;|(!A=81(|l2qS21w}oIt6$=r28`28O738+UHjFH%v*V-9&>HZ8Rr0U>ol`*84)vYJ4Q?8UerXc*odQ@$ANEZw8dlkGkyJuY&J}* zdAm?34I6NdPnw7&oz}< zvE-`8CXPQ)`*cTRGR|BWGIyLG?`cK~mI5d&q+YwW!%EcDTSx!zR{BWkYc zA*@x!;La*t4{x0_GPK1x=O2%oGGe4;DfR#E@r zQq&eMaZE5RO{&h*GEh+;NXCpXo2Yv9YChA^TeX)s*3(_NB=s33b)>|6 z>S^t>1exuFbNxU(!*D*b=th2{o+2L`S?%%tk`=5WKo3~eVDNSC zaMbsuj65vMl1%vNlXAT)89OqabgRXf>4tRA04FR9B~`oleQ!z*zf#|29Wtq@4j1aoyvHoV$3P z&>}VW=!&onk=~MOf0nsW7EDK5r(tWsMAseWD1#V(?ZLwt44NqhzIM*B;>-*}5u+N&5zl0p zK+4E?RUD_HNoF)Y4Rp1mK3GRwKwT^POHv1z=Wx0#VTSgS0jrsDPe1}IY6=T=AB4=pHYqRG&QnkEy?XQ`kJUU`;#yf%i# zoKH$=uZ+GXZK_m?y4vd-2m#p%G5w9sfAK+mo>sE1(eKom?c~yVs#SaWc#_;bgomM?2xOeZEoFCpiR7*N|YT#QB=9 zb)RFOR7LkX+En*XGgmSu+#QcBAL-ot>Eq_z6vr-8Va#+O!E9lP_MQ9tANaaQuH#*| z`yT7{^<@OO^7@soOrb#tUq}!N8Qe85gDhAEf)Z?3uZ#BovbvpwZW1cmL=5$Qww7AUh zJ-aJId}h*Z3BHKYaHHO{Um&e{>m|O<5v#5j=QXq)jSfvR;=>!&?C2)Qb~Enz<(y`w zA5+U@k*5R^Xj-aw`W*8!>|2cFLlFjoyX1kqPF&oRU9X4EVa-k%Oc@uoA;>D6_hi>UrjlzNlHjd6CzMs; z)ku(rygtE%vD7|KM_d@F3rj6p+ZykXEQx@cSsI>A2Hl;iY{9}@Yf0T#>L^*{%l76- zGxe>V#n0Rw8Re`bFV407&~HuQ@d2Pd3|xy79GN(+>$N&Aac({|EP9}6auW%E7-5`* z+1?O|T%Q)r7K2hFPxd3lC|avC7RA64g*CgmBhnU7$+wNGUlTcyUrm}dVx^gC(u;B! zlpp>&-VnLEuZFZvTn~`2l5B)+41azD zB}$LW#q(3D7z#46=o-aBJ)lJG&%6+nMHWIcBWNTBu{T88Ib*>EOBWL#yU;A1;%ovU z&tNs}F1Cx_Uljam{`f?mWAf{iqmrv2S1*}$31KF3qf}5;8?+#}H6>#!T+|4oy!3Nd z(un%IeDvy0q#;a2O}49S-PBeGTQd5@Dk|*aZIGtX6z_vvtvuFr6J-C&XI@w#gg)cyF$J8ojwp>5JJ=5>Zild1F|p+qvHlB!HUR9iJ; zM%A1-h4A~NF!HiyTg^M8$@+kS`;CoUD7o%|4D2%OKecfs(kI0&2=ke@wimnosKQ86 z+@dSJ%u64jIQu%V;vxpH;tL({wnS{_7U$7?ZXq{Y=A+DqJbsc4bDX(wT+(%h_ zdjt3wvo^N{{{sxR>M_@5UmO`-pSo5LYRGGKv{nZtVNh1=2l0`eq#%7|4XUG>$QFXb ztwxHH$%|&<%=be`F^nN~9u)&jX5*^pTyv$VBRB31;*GU@Y;)A%}GR7s+_sghDPS5qHb+_tYmf?DkLD18*LCExCZ3po%dcR$|BpC6vTre$*S` zn=dR(9}vl?m~ykYy5ybB!8#%(t;1D%?rQ zC-gJYvHT!cPTCtMz2be7c4k|+ZxXqbX0*ustUOtZR8oWBq>`;bv*jj94$DE;)zaeV z8ac}&k#5vlVxGNaauVlgC34pO#Y%~)v;kGvy3=MMtv`iqFLa_cO&RP&AqomB(%?EJ zlMEV4Qz0f43LxhE#|yIzNik{PRK^ZoytdcO{;Fhgv~f~_9Hm;xGBRi`Uqgaa9E$r~ zIoaQ?ugh4o$M+Yp0zW8!oXK#C!lBb94`z z5$ZYdN?)%kAYKx3#Hmd4FwM+K38-IRWI?k$+4Y8R+@2PLw1UO0DAx;rR)Z!Eop zQnyepK_tyJl%hI9&U*1-t^T53%QchFpB(NxrH*>yD}H|R=a~z`%UwyX^D{d)KPKyq`nvcC3jGk z^i~7jM#&z(88u5Kf(2n9!_vSPQ9gQV?;Wv6@AYQVM6GPvD&2I)G+%3C$6O_pq1Ono zX>JVI$gCwUN7~;Q#&sWNKnl#JI5KC>bLAvDMnb--L!&QqET8*1@)B;Dag|LMMq_7- zNKr#tar|ZPf{%t6*^mROUojiTITjny1(mg2l~|>9J)0m#NoQfMr!)ncML5cM-8Ptv zbmrRcreybJ8b=JdPuK47x%(*lOtvIArDNm^SyuSWMofz4dzO|hiT2o)uf<5fXK=Ds_gLfu`rdn)I~;|ZNd@q16ta46E8bu7q@ z%H0)}Ix3OkaQXx*?KsGF#2miyoc|IbP~@0T56!}Z7Q|GX){E2!_P>*IUa1guoi3$h z&t+=d>%D?;m{x5Yu2v^ZVA;#lCP!pvmhZCC6mo4={tP!#sYP}o^wZcCQ}gB+pW9@s zW~9&(iSfn->kia#C<#+LklI{pPlESNCFYEx9BUhoZh?G{wUm8 z>9oMFRq-)kf^yOb;TXHVkoiSh_P@i++5i}KWPt96jWR+V%G0mB@$Vh zY5@~e;%umS zz2DdNF(*>=2DC(~LvC!2!l~`FGuXP@EF1fZ)=ITZrnT19*)E!s4)>Y;5GQnT!qGK) zD9YcQeA;@lH(OF8IA>6pL~@~8;d)CmsIvlX<-gw4O0<>OnM$*e?p-N~2K2~6IqKSs49n4YiTS#|dAQ@o! z&ka1icd6*i9;?I*Y6qOA(rE|If|?gX#s>{s8=r&Q>XyrByP%J&lGN#t-#yR=U2b(e!UHH!l)h%J$?N^WOfE`JPVAc0w*boDJacK`%IhFdWic}Nzqx=LwO zwkp~({Qo}?E1uF+kY1W?e(er3Wneuh!O+*s)tbX%mDazAN^-8*tT`oP_9*{nhb5JD zP2m-t=}=Bdl=R1O_QDxpU2RSVZ5#_$t-i|~!RTYDBY*7o7OHOKo58~Ew7c`hE0fH= z`)8_{2u^uNw^vsC^Np;K&Ys543Y7ER=Gd8zDCxhx_`0FcSFRQg-6hL(ZALPkpz~z) z-WtgbJ4#yv)mS1lL|e@7K)(AlX z5lS{lcB;cO6Fqa`B~r$~(|lQ%T1FRMnsx2!*IgFQU*eR3ogTa;y6zH;_O7HREOc45M@YnDA}|NpgiKD~`pSro62;?XQ%(QOHd1!C7Tf=y-w zA}|Y9IEqD#ohHI|Bh3dH33fj>@42Vy z(^Qvse&ot-{;V%{tl=~#txM2<{_2Ie3UG)_lm;*nspS`y(qZOgZ0w8VpzkNNyl zT-bjTN!)g1mfwN05>wt#WR`S8L3!CTS=wd&znCl=cjaz%B*M~v$5*&ZmM^(RUT}qh zJQeil*XJgUv8$BTNUbE<36jA}+8N3ownmp%*hZ;lK2_8W9OJ8eGuEtR}`F47*Wnbcdi#R0!bCT z9^3qGv%98P&^F?tXz2mH!K#ait7&a2#HDZv(Rzso3_)bEMcUs>zR1arp@pS{rSchb z%bVyuku&1RHNt)nb>wKeVrofwx0{&LFao&@04>=(#W95u zU^Y3+;YX(PQ4ggiuE6R-(Mm=++O2juv*{-@yCI*-N}b)E2gIzbXkH{31S7b0$E^ForG4KSIVR(@RgBGqIOh9-IBUur8EScI`wbA$ z%o5;bLwDlQaPx$z^!uXzNeM))?(pr6u9<5qVd0AN=acEK5s$yM7T|uhA(A|9E>O`L~Cgf(w31GZKW6T zLQZX;*+vgJ>p34};HIq~JZ86%vGFy!I47sbRLXnrw=`J-*)3kW8Yz<$G9?|xR2Cz) zqIvIq&6(RPw2?>CohT|xq&X6O5#gpB3aUE9P=MPNaeE4oa965H*gZ(4 zW8byiH`Evjp0(z4?tYAe@nlg{ahp%)CC#l%d{(%4FXy*1{m-(ezUT_W(zR){Jne~AESJYv?knDN|`LyEjbZ)`I1kL4{vBu5SoUnr6jkYKK#g7a>_M0~(TPDZLty^t1H0vblM-;Q< z7%0=}5pikn|0`^f zL78D>m}Q01%u~?W2?vf_a)=}vOQ!l7&6AlwIk-ro%oj9r@^_9VQ_lYIRGLf(exS*8 zs#1t==)T9W`7B-Lo1gA~0b*AOn=_P|l&LkDH(XMD#`sUEGm$uI#53kh9z`S0e6ehq zn|GaI6@EgEpU4BjEpFg&gg8^Vvd<~u$m1OTftS>0bnpm?RRkxkK*R78g-paxGLQDg zWL(uAY;`QB(2$P|LyR{hlc-bk;k}3uR6T8AoG%1sN{ieUq7pUxYSslekH*h&#F;)4 zi)N%A8-?ZsD@57|h>lWVJ((sxZXvtGqai zMYMsL3os*_N5PrNr?5HF6KSKg**r3qX`Fbu>Wj0_O)Lo=davF}qWM4E!d9H#*)76LX3qV82oPqZncT0O zaK32igje(=wwP23SZ-=n&vIiGsp^T&SN&>sPxj&Ou$jdx7C z3X#DQ{J9L8Z+??mT{U}o%AuKw&cZr6+?QesPIr`iIFLo~g_C@O9n$5#Zs5LBnT%RkU(2=O%F^6B zy@1NFc|^t~%1MbKA8s>1kTe~Yzq{a4SnX@*IPuf{pD|-Gc2W@o(~NWRZ(~x<#O)*B z2HcAJPLu2<*&Avj2oup2QlYXn z>uKG=q_XYwJKO2Dfm#(xRUob7Eg!G1SNFf(|2lA>V{&)G%jR$T6eP4rJ9|XvS(qs2 zRG`Zr=sb-Gyd#mLp8S?{X~>kwJ8>TfsfJR@px|qfJ6nsSny@=U;Bk~KJdFqs^qow% zrbY%_3gL8dXKWBJRv!_^&W`)*{rMwFq}-EkfQ| zi?DarBJ`cL_yJdo_e(lo4@H>*m?8C@N=hZFVuQjVVNz<3J!79F=5>hj3WsD~`KnO7 zb3RY8u^@o>DBOvXls2W={f=3YV28Fqk?S})Y7I3rq!TTa3>hu2tlk?`;dh<-uclBHm J@*rPe_#cuK=l=iz literal 0 HcmV?d00001 diff --git a/django/conf/locale/et/LC_MESSAGES/django.po b/django/conf/locale/et/LC_MESSAGES/django.po new file mode 100644 index 0000000000..2430cd0c1b --- /dev/null +++ b/django/conf/locale/et/LC_MESSAGES/django.po @@ -0,0 +1,4340 @@ +# Estonian translation for the Django Project. +# Copyright (C) 2008, Django Project +# 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: 2008-06-02 19:15+0300\n" +"PO-Revision-Date: 2008-06-16 19:55+0200\n" +"Last-Translator: Erik Allik \n" +"Language-Team: Django-i18n \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: conf/global_settings.py:43 +msgid "Arabic" +msgstr "araabia" + +#: conf/global_settings.py:44 +msgid "Bengali" +msgstr "bengali" + +#: conf/global_settings.py:45 +msgid "Bulgarian" +msgstr "bulgaaria" + +#: conf/global_settings.py:46 +msgid "Catalan" +msgstr "katalaani" + +#: conf/global_settings.py:47 +msgid "Czech" +msgstr "tšehhi" + +#: conf/global_settings.py:48 +msgid "Welsh" +msgstr "wales'i" + +#: conf/global_settings.py:49 +msgid "Danish" +msgstr "taani" + +#: conf/global_settings.py:50 +msgid "German" +msgstr "saksa" + +#: conf/global_settings.py:51 +msgid "Greek" +msgstr "kreeka" + +#: conf/global_settings.py:52 +msgid "English" +msgstr "inglise" + +#: conf/global_settings.py:53 +msgid "Spanish" +msgstr "hispaania" + +#: conf/global_settings.py:54 +msgid "Argentinean Spanish" +msgstr "argentiina hispaania keel" + +#: conf/global_settings.py:55 +msgid "Basque" +msgstr "baski" + +#: conf/global_settings.py:56 +msgid "Persian" +msgstr "pärsia" + +#: conf/global_settings.py:57 +msgid "Finnish" +msgstr "soome" + +#: conf/global_settings.py:58 +msgid "French" +msgstr "prantsuse" + +#: conf/global_settings.py:59 +msgid "Irish" +msgstr "iiri" + +#: conf/global_settings.py:60 +msgid "Galician" +msgstr "galiitsia" + +#: conf/global_settings.py:61 +msgid "Hungarian" +msgstr "ungari" + +#: conf/global_settings.py:62 +msgid "Hebrew" +msgstr "heebrea" + +#: conf/global_settings.py:63 +msgid "Croatian" +msgstr "horvaatia" + +#: conf/global_settings.py:64 +msgid "Icelandic" +msgstr "islandi" + +#: conf/global_settings.py:65 +msgid "Italian" +msgstr "itaalia" + +#: conf/global_settings.py:66 +msgid "Japanese" +msgstr "jaapani" + +#: conf/global_settings.py:67 +msgid "Georgian" +msgstr "gruusia" + +#: conf/global_settings.py:68 +msgid "Korean" +msgstr "korea" + +#: conf/global_settings.py:69 +msgid "Khmer" +msgstr "khmeri" + +#: conf/global_settings.py:70 +msgid "Kannada" +msgstr "kannada" + +#: conf/global_settings.py:71 +msgid "Latvian" +msgstr "läti" + +#: conf/global_settings.py:72 +msgid "Macedonian" +msgstr "makedoonia" + +#: conf/global_settings.py:73 +msgid "Dutch" +msgstr "hollandi" + +#: conf/global_settings.py:74 +msgid "Norwegian" +msgstr "norra" + +#: conf/global_settings.py:75 +msgid "Polish" +msgstr "poola" + +#: conf/global_settings.py:76 +msgid "Portugese" +msgstr "portugali" + +#: conf/global_settings.py:77 +msgid "Brazilian Portuguese" +msgstr "brasiilia portugali keel" + +#: conf/global_settings.py:78 +msgid "Romanian" +msgstr "rumeenia" + +#: conf/global_settings.py:79 +msgid "Russian" +msgstr "vene" + +#: conf/global_settings.py:80 +msgid "Slovak" +msgstr "slovaki" + +#: conf/global_settings.py:81 +msgid "Slovenian" +msgstr "sloveeni" + +#: conf/global_settings.py:82 +msgid "Serbian" +msgstr "serbia" + +#: conf/global_settings.py:83 +msgid "Swedish" +msgstr "rootsi" + +#: conf/global_settings.py:84 +msgid "Tamil" +msgstr "tamiili" + +#: conf/global_settings.py:85 +msgid "Telugu" +msgstr "telugu" + +#: conf/global_settings.py:86 +msgid "Turkish" +msgstr "türgi" + +#: conf/global_settings.py:87 +msgid "Ukrainian" +msgstr "ukrania" + +#: conf/global_settings.py:88 +msgid "Simplified Chinese" +msgstr "lihtsustatud hiina keel" + +#: conf/global_settings.py:89 +msgid "Traditional Chinese" +msgstr "traditsiooniline hiina keel" + +#: contrib/admin/filterspecs.py:44 +#, python-format +msgid "" +"

By %s:

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

    %s:

    \n" +"
      \n" + +#: contrib/admin/filterspecs.py:74 contrib/admin/filterspecs.py:92 +#: contrib/admin/filterspecs.py:147 contrib/admin/filterspecs.py:173 +msgid "All" +msgstr "Kõik" + +#: contrib/admin/filterspecs.py:113 +msgid "Any date" +msgstr "Suvaline kuupäev" + +#: contrib/admin/filterspecs.py:114 +msgid "Today" +msgstr "Täna" + +#: contrib/admin/filterspecs.py:117 +msgid "Past 7 days" +msgstr "Viimased 7 päeva" + +#: contrib/admin/filterspecs.py:119 +msgid "This month" +msgstr "See kuu" + +#: contrib/admin/filterspecs.py:121 +msgid "This year" +msgstr "See aasta" + +#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231 +#: oldforms/__init__.py:592 +msgid "Yes" +msgstr "Jah" + +#: contrib/admin/filterspecs.py:147 newforms/widgets.py:231 +#: oldforms/__init__.py:592 +msgid "No" +msgstr "Ei" + +#: contrib/admin/filterspecs.py:154 newforms/widgets.py:231 +#: oldforms/__init__.py:592 +msgid "Unknown" +msgstr "Tundmatu" + +#: contrib/admin/models.py:18 +msgid "action time" +msgstr "toimingu aeg" + +#: contrib/admin/models.py:21 +msgid "object id" +msgstr "objekti id" + +#: contrib/admin/models.py:22 +msgid "object repr" +msgstr "objekti esitus" + +#: contrib/admin/models.py:23 +msgid "action flag" +msgstr "toimingu lipp" + +#: contrib/admin/models.py:24 +msgid "change message" +msgstr "muudatuse tekst" + +#: contrib/admin/models.py:27 +msgid "log entry" +msgstr "logisissekanne" + +#: contrib/admin/models.py:28 +msgid "log entries" +msgstr "logisissekanded" + +#: contrib/admin/templates/admin/404.html:4 +#: contrib/admin/templates/admin/404.html:8 +msgid "Page not found" +msgstr "Lehte ei leitud" + +#: contrib/admin/templates/admin/404.html:10 +msgid "We're sorry, but the requested page could not be found." +msgstr "Vabandame, kuid soovitud lehte ei leitud." + +#: contrib/admin/templates/admin/500.html:4 +#: contrib/admin/templates/admin/base.html:37 +#: contrib/admin/templates/admin/change_form.html:12 +#: contrib/admin/templates/admin/change_list.html:5 +#: contrib/admin/templates/admin/delete_confirmation.html:5 +#: contrib/admin/templates/admin/invalid_setup.html:4 +#: contrib/admin/templates/admin/object_history.html:4 +#: contrib/admin/templates/admin/auth/user/change_password.html:11 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +#: contrib/admin/templates/registration/logged_out.html:4 +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_reset_done.html:4 +#: contrib/admin/templates/registration/password_reset_form.html:4 +msgid "Home" +msgstr "Kodu" + +#: contrib/admin/templates/admin/500.html:4 +msgid "Server error" +msgstr "Serveri viga" + +#: contrib/admin/templates/admin/500.html:6 +msgid "Server error (500)" +msgstr "Serveri viga (500)" + +#: contrib/admin/templates/admin/500.html:9 +msgid "Server Error (500)" +msgstr "Serveri Viga (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 "" +"On tekkinud viga. Vastavasisuline teavitus on saadetud süsteemi haldajale " +"ning vea parandamisega tegeletakse esimesel võimalusel. Täname mõistva " +"suhtumise eest!" + +#: contrib/admin/templates/admin/base.html:26 +msgid "Welcome," +msgstr "Tere tulemast," + +#: contrib/admin/templates/admin/base.html:28 +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Documentation" +msgstr "Dokumentatsioon" + +#: contrib/admin/templates/admin/base.html:29 +#: contrib/admin/templates/admin/auth/user/change_password.html:14 +#: contrib/admin/templates/admin/auth/user/change_password.html:45 +msgid "Change password" +msgstr "Muuda salasõna" + +#: contrib/admin/templates/admin/base.html:30 +#: contrib/comments/templates/comments/form.html:6 +msgid "Log out" +msgstr "Logi välja" + +#: contrib/admin/templates/admin/base_site.html:4 +msgid "Django site admin" +msgstr "Django administreerimisliides" + +#: contrib/admin/templates/admin/base_site.html:7 +msgid "Django administration" +msgstr "Django administreerimisliides" + +#: contrib/admin/templates/admin/change_form.html:14 +#: contrib/admin/templates/admin/index.html:28 +msgid "Add" +msgstr "Lisa" + +#: contrib/admin/templates/admin/change_form.html:20 +#: contrib/admin/templates/admin/object_history.html:4 +msgid "History" +msgstr "Ajalugu" + +#: contrib/admin/templates/admin/change_form.html:21 +msgid "View on site" +msgstr "Näida lehel" + +#: contrib/admin/templates/admin/change_form.html:31 +#: contrib/admin/templates/admin/auth/user/change_password.html:23 +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Palun parandage allolev viga" +msgstr[1] "Palun parandage allolevad vead" + +#: contrib/admin/templates/admin/change_form.html:49 +msgid "Ordering" +msgstr "Järjestus" + +#: contrib/admin/templates/admin/change_form.html:52 +msgid "Order:" +msgstr "Järjestus:" + +#: contrib/admin/templates/admin/change_list.html:11 +#, python-format +msgid "Add %(name)s" +msgstr "Lisa %(name)s" + +#: contrib/admin/templates/admin/delete_confirmation.html:8 +#: contrib/admin/templates/admin/submit_line.html:3 +msgid "Delete" +msgstr "Kustuta" + +#: contrib/admin/templates/admin/delete_confirmation.html:13 +#, 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 "" +"Selleks, et kustutada %(object_name)s '%(escaped_object)s', on vaja " +"kustutada lisaks ka kõik seotud objecktid, aga teil puudub õigus järgnevat " +"tüüpi objektide kustutamiseks:" + +#: contrib/admin/templates/admin/delete_confirmation.html:20 +#, python-format +msgid "" +"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"All of the following related items will be deleted:" +msgstr "" +"Kas olete kindel, et soovite kustutada objekti %(object_name)s \"%" +"(escaped_object)s\"? Kõik järgnevad seotud objektid kustutatakse koos " +"sellega:" + +#: contrib/admin/templates/admin/delete_confirmation.html:25 +msgid "Yes, I'm sure" +msgstr "Jah, olen kindel" + +#: contrib/admin/templates/admin/filter.html:2 +#, python-format +msgid " By %(filter_title)s " +msgstr " %(filter_title)s järgi " + +#: contrib/admin/templates/admin/filters.html:4 +msgid "Filter" +msgstr "Filtreeri" + +#: contrib/admin/templates/admin/index.html:17 +#, python-format +msgid "Models available in the %(name)s application." +msgstr "Rakenduses %(name)s leitud mudelid" + +#: 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 "Muuda" + +#: contrib/admin/templates/admin/index.html:44 +msgid "You don't have permission to edit anything." +msgstr "Teil ei ole õigust midagi muuta." + +#: contrib/admin/templates/admin/index.html:52 +msgid "Recent Actions" +msgstr "Hiljtuised Toimingud" + +#: contrib/admin/templates/admin/index.html:53 +msgid "My Actions" +msgstr "Minu Toimingud" + +#: contrib/admin/templates/admin/index.html:57 +msgid "None available" +msgstr "Ei leitud ühtegi" + +#: 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 "" +"On tekkinud viga seoses andmebaasiga. Veenduge, et kõik vajalikud " +"andmebaasitabelid on loodud ning et andmebaas on vastava kasutaja poolt " +"loetav." + +#: contrib/admin/templates/admin/login.html:17 +#: contrib/comments/templates/comments/form.html:6 +#: contrib/comments/templates/comments/form.html:8 +msgid "Username:" +msgstr "Kasutajatunnus:" + +#: contrib/admin/templates/admin/login.html:20 +#: contrib/comments/templates/comments/form.html:8 +msgid "Password:" +msgstr "Salasõna:" + +#: contrib/admin/templates/admin/login.html:25 +#: contrib/admin/views/decorators.py:31 +msgid "Log in" +msgstr "Logi sisse" + +#: contrib/admin/templates/admin/object_history.html:17 +msgid "Date/time" +msgstr "Kuupäev/kellaaeg" + +#: contrib/admin/templates/admin/object_history.html:18 +msgid "User" +msgstr "Kasutaja" + +#: contrib/admin/templates/admin/object_history.html:19 +msgid "Action" +msgstr "Toiming" + +#: contrib/admin/templates/admin/object_history.html:25 +msgid "DATE_WITH_TIME_FULL" +msgstr "N j, Y, P" + +#: contrib/admin/templates/admin/object_history.html:35 +msgid "" +"This object doesn't have a change history. It probably wasn't added via this " +"admin site." +msgstr "" +"Sellel objektil puudub muudatuste ajalugu. Tõenäoliselt ei kasutatud selle " +"objekti lisamisel käesolevat administreerimislidest." + +#: contrib/admin/templates/admin/pagination.html:10 +msgid "Show all" +msgstr "Näita kõiki" + +#: contrib/admin/templates/admin/search_form.html:8 +msgid "Go" +msgstr "Mine" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "1 result" +msgid_plural "%(counter)s results" +msgstr[0] "1 tulemus" +msgstr[1] "%(counter)s tulemust" + +#: contrib/admin/templates/admin/search_form.html:10 +#, python-format +msgid "%(full_result_count)s total" +msgstr "Kokku %(full_result_count)s" + +#: contrib/admin/templates/admin/submit_line.html:4 +msgid "Save as new" +msgstr "Salvesta uuena" + +#: contrib/admin/templates/admin/submit_line.html:5 +msgid "Save and add another" +msgstr "Salvesta ja lisa uus" + +#: contrib/admin/templates/admin/submit_line.html:6 +msgid "Save and continue editing" +msgstr "Salvesta ja jätka muutmist" + +#: contrib/admin/templates/admin/submit_line.html:7 +msgid "Save" +msgstr "Salvesta" + +#: 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 "" +"Kõige pealt sisestage kasutajatunnus ja salasõna, seejärel on võimalik muuta " +"täiendavaid kasutajaandmeid." + +#: contrib/admin/templates/admin/auth/user/add_form.html:12 +msgid "Username" +msgstr "Kasutajatunnus" + +#: contrib/admin/templates/admin/auth/user/add_form.html:18 +#: contrib/admin/templates/admin/auth/user/change_password.html:33 +msgid "Password" +msgstr "Salasõna" + +#: contrib/admin/templates/admin/auth/user/add_form.html:23 +#: contrib/admin/templates/admin/auth/user/change_password.html:38 +msgid "Password (again)" +msgstr "Salasõna (uuesti)" + +#: contrib/admin/templates/admin/auth/user/add_form.html:24 +#: contrib/admin/templates/admin/auth/user/change_password.html:39 +msgid "Enter the same password as above, for verification." +msgstr "" +"Sisestage sama salasõna uuesti veendumaks, et sisestamisel ei tekkinud vigu" + +#: contrib/admin/templates/admin/auth/user/change_password.html:27 +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "Sisestage uus salasõna kasutajale %(username)s" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:3 +msgid "Bookmarklets" +msgstr "Järjehoidjad" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:4 +msgid "Documentation bookmarklets" +msgstr "Dokumentatsiooni järjehoidjad" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:8 +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:18 +msgid "Documentation for this page" +msgstr "Selle lehekülje dokumentatsioon" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:19 +msgid "" +"Jumps you from any page to the documentation for the view that generates " +"that page." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:21 +msgid "Show object ID" +msgstr "Näita objekti ID-d" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:22 +msgid "" +"Shows the content-type and unique ID for pages that represent a single " +"object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:24 +msgid "Edit this object (current window)" +msgstr "Muuda seda objekti (samas aknas)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:25 +msgid "Jumps to the admin page for pages that represent a single object." +msgstr "" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:27 +msgid "Edit this object (new window)" +msgstr "Muuda seda objekti (uues aknas)" + +#: contrib/admin/templates/admin_doc/bookmarklets.html:28 +msgid "As above, but opens the admin page in a new window." +msgstr "Sama, mis üleval, kuid avab admin. lehe uues aknas." + +#: contrib/admin/templates/registration/logged_out.html:8 +msgid "Thanks for spending some quality time with the Web site today." +msgstr "Tänan, et veetsite aega meie lehel." + +#: contrib/admin/templates/registration/logged_out.html:10 +msgid "Log in again" +msgstr "Logi uuesti sisse" + +#: contrib/admin/templates/registration/password_change_done.html:3 +#: contrib/admin/templates/registration/password_change_form.html:3 +#: contrib/admin/templates/registration/password_change_form.html:5 +#: contrib/admin/templates/registration/password_change_form.html:9 +msgid "Password change" +msgstr "Salasõna muutmine" + +#: contrib/admin/templates/registration/password_change_done.html:5 +#: contrib/admin/templates/registration/password_change_done.html:9 +msgid "Password change successful" +msgstr "Salasõna muutmine õnnestus" + +#: contrib/admin/templates/registration/password_change_done.html:11 +msgid "Your password was changed." +msgstr "Teie salasõna on vahetatud." + +#: contrib/admin/templates/registration/password_change_form.html:11 +msgid "" +"Please enter your old password, for security's sake, and then enter your new " +"password twice so we can verify you typed it in correctly." +msgstr "" +"Turvalisuse tagamiseks palun sisestage oma praegune salasõna ning seejärel " +"uus salasõna.Veendumaks, et uue salasõna sisestamisel ei tekkinud vigu, " +"palun sisestage see kaks korda." + +#: contrib/admin/templates/registration/password_change_form.html:16 +msgid "Old password:" +msgstr "Senine salasõna:" + +#: contrib/admin/templates/registration/password_change_form.html:18 +msgid "New password:" +msgstr "Uus salasõna:" + +#: contrib/admin/templates/registration/password_change_form.html:20 +msgid "Confirm password:" +msgstr "Kinnita salasõna:" + +#: contrib/admin/templates/registration/password_change_form.html:22 +msgid "Change my password" +msgstr "Muuda salasõna" + +#: 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 "Uue parooli loomine" + +#: contrib/admin/templates/registration/password_reset_done.html:6 +#: contrib/admin/templates/registration/password_reset_done.html:10 +msgid "Password reset successful" +msgstr "Uue parooli loomine õnnestus" + +#: 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 "" +"Teie poolt sisestatud e-posti aadressile on saadetud kiri uue salasõnaga. " +"Kiri saabub üsna pea." + +#: contrib/admin/templates/registration/password_reset_email.html:2 +msgid "You're receiving this e-mail because you requested a password reset" +msgstr "See kiri saadeti teile, sest soovisite uut salasõna" + +#: contrib/admin/templates/registration/password_reset_email.html:3 +#, python-format +msgid "for your user account at %(site_name)s" +msgstr "teie kasutajakontole lehel %(site_name)s" + +#: contrib/admin/templates/registration/password_reset_email.html:5 +#, python-format +msgid "Your new password is: %(new_password)s" +msgstr "Teie uus parool onÖ %(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 "Parooli vahetamiseks minge:" + +#: contrib/admin/templates/registration/password_reset_email.html:11 +msgid "Your username, in case you've forgotten:" +msgstr "Teie kasutajatunnus juhul, kui olete unustanud:" + +#: contrib/admin/templates/registration/password_reset_email.html:13 +msgid "Thanks for using our site!" +msgstr "Täname meie lehte külastamast!" + +#: contrib/admin/templates/registration/password_reset_email.html:15 +#, python-format +msgid "The %(site_name)s team" +msgstr "%(site_name)s meeskond" + +#: 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 "" +"Unustasid parool? Sisesta oma e-posti aadress ning me saadame sulle uue " +"parooli e-kirjaga." + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "E-mail address:" +msgstr "E-posti aadress:" + +#: contrib/admin/templates/registration/password_reset_form.html:16 +msgid "Reset my password" +msgstr "Reseti parool" + +#: contrib/admin/templates/widget/date_time.html:3 +msgid "Date:" +msgstr "Kuupäev:" + +#: contrib/admin/templates/widget/date_time.html:4 +msgid "Time:" +msgstr "Aeg:" + +#: contrib/admin/templates/widget/file.html:2 +msgid "Currently:" +msgstr "Hetkel:" + +#: contrib/admin/templates/widget/file.html:3 +msgid "Change:" +msgstr "Muuda:" + +#: contrib/admin/templatetags/admin_list.py:257 +msgid "All dates" +msgstr "Kõik kuupäevad" + +#: contrib/admin/views/auth.py:20 contrib/admin/views/main.py:267 +#, python-format +msgid "The %(name)s \"%(obj)s\" was added successfully." +msgstr "%(name)s \"%(obj)s\" lisamine õnnestus." + +#: contrib/admin/views/auth.py:25 contrib/admin/views/main.py:271 +#: contrib/admin/views/main.py:356 +msgid "You may edit it again below." +msgstr "Te võite selle muutmist jätkata." + +#: contrib/admin/views/auth.py:31 +msgid "Add user" +msgstr "Lisa kasutaja" + +#: contrib/admin/views/auth.py:58 +msgid "Password changed successfully." +msgstr "Salasõna edukalt muudetud." + +#: contrib/admin/views/auth.py:65 +#, python-format +msgid "Change password: %s" +msgstr "Muuda salasõna: %s" + +#: contrib/admin/views/decorators.py:17 contrib/auth/forms.py:60 +msgid "" +"Please enter a correct username and password. Note that both fields are case-" +"sensitive." +msgstr "" +"Palun sisestage korrektne kasutajatunnus ja salasõna. Mõlemad väljad on " +"tõstutundlikud." + +#: contrib/admin/views/decorators.py:69 +msgid "" +"Please log in again, because your session has expired. Don't worry: Your " +"submission has been saved." +msgstr "" +"Teie sessioon on aegunud. Palun logige uuesti sisse. Olge mureta: sisestatud " +"andmed on salvestatud." + +#: contrib/admin/views/decorators.py:76 +msgid "" +"Looks like your browser isn't configured to accept cookies. Please enable " +"cookies, reload this page, and try again." +msgstr "" +"Paistab, et Teie brauser ei aktsepteeri küpsiseid. Palun võimaldage küpsised " +"ning seejärel laadige see leht uuesti." + +#: contrib/admin/views/decorators.py:89 +#, python-format +msgid "Your e-mail address is not your username. Try '%s' instead." +msgstr "" +"Teie e-posti aadress ei ole sama asi, mis Teie kasutajatunnus. Proovige '%s'." + +#: contrib/admin/views/decorators.py:93 +msgid "Usernames cannot contain the '@' character." +msgstr "Kasutajatunnused ei tohi sisaldada '@' märki." + +#: contrib/admin/views/doc.py:48 contrib/admin/views/doc.py:50 +#: contrib/admin/views/doc.py:52 +msgid "tag:" +msgstr "lipik:" + +#: contrib/admin/views/doc.py:79 contrib/admin/views/doc.py:81 +#: contrib/admin/views/doc.py:83 +msgid "filter:" +msgstr "filtreeri:" + +#: contrib/admin/views/doc.py:137 contrib/admin/views/doc.py:139 +#: contrib/admin/views/doc.py:141 +msgid "view:" +msgstr "vaade:" + +#: contrib/admin/views/doc.py:166 +#, python-format +msgid "App %r not found" +msgstr "Rakendust %r ei leitud" + +#: contrib/admin/views/doc.py:173 +#, python-format +msgid "Model %(name)r not found in app %(label)r" +msgstr "Mudelit %(name)r ei leitud rakenduses %(label)r" + +#: contrib/admin/views/doc.py:185 +#, python-format +msgid "the related `%(label)s.%(type)s` object" +msgstr "seotud `%(label)s.%(type)s` objekt" + +#: contrib/admin/views/doc.py:185 contrib/admin/views/doc.py:207 +#: contrib/admin/views/doc.py:221 contrib/admin/views/doc.py:226 +msgid "model:" +msgstr "mudel:" + +#: contrib/admin/views/doc.py:216 +#, python-format +msgid "related `%(label)s.%(name)s` objects" +msgstr "seotud `%(label)s.%(name)s` objektid" + +#: contrib/admin/views/doc.py:221 +#, python-format +msgid "all %s" +msgstr "kõik %s" + +#: contrib/admin/views/doc.py:226 +#, python-format +msgid "number of %s" +msgstr "%s arv" + +#: contrib/admin/views/doc.py:231 +#, python-format +msgid "Fields on %s objects" +msgstr "Objekti %s väljad" + +#: contrib/admin/views/doc.py:293 contrib/admin/views/doc.py:304 +#: contrib/admin/views/doc.py:306 contrib/admin/views/doc.py:312 +#: contrib/admin/views/doc.py:313 contrib/admin/views/doc.py:315 +msgid "Integer" +msgstr "Täisarv" + +#: contrib/admin/views/doc.py:294 +msgid "Boolean (Either True or False)" +msgstr "Tõeväärtus (Kas tõene või väär)" + +#: contrib/admin/views/doc.py:295 contrib/admin/views/doc.py:314 +#, python-format +msgid "String (up to %(max_length)s)" +msgstr "String (kuni %(max_length)s märki)" + +#: contrib/admin/views/doc.py:296 +msgid "Comma-separated integers" +msgstr "Komaga eraldatud täisarvud" + +#: contrib/admin/views/doc.py:297 +msgid "Date (without time)" +msgstr "Kuupäev (kellaajata)" + +#: contrib/admin/views/doc.py:298 +msgid "Date (with time)" +msgstr "Kuupäev (kellaajaga)" + +#: contrib/admin/views/doc.py:299 +msgid "Decimal number" +msgstr "Kümnendmurd" + +#: contrib/admin/views/doc.py:300 +msgid "E-mail address" +msgstr "E-posti aadress" + +#: contrib/admin/views/doc.py:301 contrib/admin/views/doc.py:302 +#: contrib/admin/views/doc.py:305 +msgid "File path" +msgstr "Faili asukoht" + +#: contrib/admin/views/doc.py:303 +msgid "Floating point number" +msgstr "Ujukomaarv" + +#: contrib/admin/views/doc.py:307 contrib/comments/models.py:89 +msgid "IP address" +msgstr "IP aadress" + +#: contrib/admin/views/doc.py:309 +msgid "Boolean (Either True, False or None)" +msgstr "Tõeväärtus (Kas tõene, väär või tühi)" + +#: contrib/admin/views/doc.py:310 +msgid "Relation to parent model" +msgstr "Seos ülem-mudeliga" + +#: contrib/admin/views/doc.py:311 +msgid "Phone number" +msgstr "Telefoninumber" + +#: contrib/admin/views/doc.py:316 +msgid "Text" +msgstr "Tekst" + +#: contrib/admin/views/doc.py:317 +msgid "Time" +msgstr "Aeg" + +#: contrib/admin/views/doc.py:318 contrib/flatpages/models.py:8 +msgid "URL" +msgstr "URL" + +#: contrib/admin/views/doc.py:319 +msgid "U.S. state (two uppercase letters)" +msgstr "U.S.A. osariik (kaks suurt tähte)" + +#: contrib/admin/views/doc.py:320 +msgid "XML text" +msgstr "XML tekst" + +#: contrib/admin/views/doc.py:346 +#, python-format +msgid "%s does not appear to be a urlpattern object" +msgstr "%s ei tundu olevat urlpattern objekt" + +#: contrib/admin/views/main.py:233 +msgid "Site administration" +msgstr "Saidi administreerimine" + +#: contrib/admin/views/main.py:280 contrib/admin/views/main.py:365 +#, python-format +msgid "You may add another %s below." +msgstr "Te võite lisada uue objekti %s" + +#: contrib/admin/views/main.py:298 +#, python-format +msgid "Add %s" +msgstr "Lisa %s" + +#: contrib/admin/views/main.py:344 +#, python-format +msgid "Added %s." +msgstr "Lisasin %s." + +#: contrib/admin/views/main.py:344 contrib/admin/views/main.py:346 +#: contrib/admin/views/main.py:348 core/validators.py:283 +#: db/models/manipulators.py:309 +msgid "and" +msgstr "ja" + +#: contrib/admin/views/main.py:346 +#, python-format +msgid "Changed %s." +msgstr "Muutsin %s." + +#: contrib/admin/views/main.py:348 +#, python-format +msgid "Deleted %s." +msgstr "Kustutasin %s." + +#: contrib/admin/views/main.py:351 +msgid "No fields changed." +msgstr "Ühtegi välja ei muudetud." + +#: contrib/admin/views/main.py:354 +#, python-format +msgid "The %(name)s \"%(obj)s\" was changed successfully." +msgstr "Objekti %(name)s \"%(obj)s\" muutmine õnnestus." + +#: contrib/admin/views/main.py:362 +#, python-format +msgid "" +"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgstr "Objekti %(name)s \"%(obj)s\" lisamine õnnestus. Te võite seda muuta." + +#: contrib/admin/views/main.py:400 +#, python-format +msgid "Change %s" +msgstr "Muuda %s" + +#: contrib/admin/views/main.py:487 +#, python-format +msgid "One or more %(fieldname)s in %(name)s: %(obj)s" +msgstr "" + +#: contrib/admin/views/main.py:492 +#, python-format +msgid "One or more %(fieldname)s in %(name)s:" +msgstr "" + +#: contrib/admin/views/main.py:524 +#, python-format +msgid "The %(name)s \"%(obj)s\" was deleted successfully." +msgstr "Objekti %(name)s \"%(obj)s\" kustutamine õnnestus." + +#: contrib/admin/views/main.py:527 +msgid "Are you sure?" +msgstr "Kas olete kindel?" + +#: contrib/admin/views/main.py:549 +#, python-format +msgid "Change history: %s" +msgstr "Muudatuste ajalugu: %s" + +#: contrib/admin/views/main.py:583 +#, python-format +msgid "Select %s" +msgstr "Vali %s" + +#: contrib/admin/views/main.py:583 +#, python-format +msgid "Select %s to change" +msgstr "Vali %s mida muuta" + +#: contrib/admin/views/main.py:765 +msgid "Database error" +msgstr "Andmebaasi viga" + +#: contrib/auth/forms.py:17 contrib/auth/forms.py:138 +msgid "The two password fields didn't match." +msgstr "Kaks sisestatud parooli ei olnud identsed." + +#: contrib/auth/forms.py:25 +msgid "A user with that username already exists." +msgstr "Sama kasutajatunnusega kasutaja on juba olemas." + +#: contrib/auth/forms.py:53 +msgid "" +"Your Web browser doesn't appear to have cookies enabled. Cookies are " +"required for logging in." +msgstr "" +"Teie veebibrauser ei aktsepteeri küpsiseid, aga küpsised on sisselogimiseks " +"vajalikud." + +#: contrib/auth/forms.py:62 +msgid "This account is inactive." +msgstr "See konto ei ole aktiivne." + +#: contrib/auth/forms.py:84 +msgid "" +"That e-mail address doesn't have an associated user account. Are you sure " +"you've registered?" +msgstr "" +"Selle e-posti aadressiga ei ole seotud ühtegi kasutajakontot. Veenduge, et " +"olete registreerunud." + +#: contrib/auth/forms.py:107 +#, python-format +msgid "Password reset on %s" +msgstr "" + +#: contrib/auth/forms.py:117 +msgid "The two 'new password' fields didn't match." +msgstr "Sisestatud uue parooli väljad ei olnud identsed." + +#: contrib/auth/forms.py:124 +msgid "Your old password was entered incorrectly. Please enter it again." +msgstr "Te sisestasite oma vana parooli vigaselt. Palun sisestage see uuesti." + +#: contrib/auth/models.py:73 contrib/auth/models.py:93 +msgid "name" +msgstr "nimi" + +#: contrib/auth/models.py:75 +msgid "codename" +msgstr "koodnimi" + +#: contrib/auth/models.py:78 +msgid "permission" +msgstr "õigus" + +#: contrib/auth/models.py:79 contrib/auth/models.py:94 +msgid "permissions" +msgstr "õigused" + +#: contrib/auth/models.py:97 +msgid "group" +msgstr "grupp" + +#: contrib/auth/models.py:98 contrib/auth/models.py:141 +msgid "groups" +msgstr "grupid" + +#: contrib/auth/models.py:131 +msgid "username" +msgstr "kasutajatunnus" + +#: contrib/auth/models.py:131 +msgid "" +"Required. 30 characters or fewer. Alphanumeric characters only (letters, " +"digits and underscores)." +msgstr "Nõutav. 30 tähemärki või vähem. Ainult tähed, numbrid ja alakriipsud." + +#: contrib/auth/models.py:132 +msgid "first name" +msgstr "eesnimi" + +#: contrib/auth/models.py:133 +msgid "last name" +msgstr "perenimi" + +#: contrib/auth/models.py:134 +msgid "e-mail address" +msgstr "e-posti aadress" + +#: contrib/auth/models.py:135 +msgid "password" +msgstr "salasõna" + +#: contrib/auth/models.py:135 +msgid "" +"Use '[algo]$[salt]$[hexdigest]' or use the change " +"password form." +msgstr "" + +#: contrib/auth/models.py:136 +msgid "staff status" +msgstr "personalistaatus" + +#: contrib/auth/models.py:136 +msgid "Designates whether the user can log into this admin site." +msgstr "" +"Määrab, kas kasutaja saab sisse logida sellesse admininistreerimisliidesesse." + +#: contrib/auth/models.py:137 +msgid "active" +msgstr "aktiivne" + +#: contrib/auth/models.py:137 +msgid "" +"Designates whether this user should be treated as active. Unselect this " +"instead of deleting accounts." +msgstr "" +"Määrab, kas see konto on aktiivne. Kustutamise asemel lihtsalt deaktiveerige " +"konto." + +#: contrib/auth/models.py:138 +msgid "superuser status" +msgstr "superkasutaja staatus" + +#: contrib/auth/models.py:138 +msgid "" +"Designates that this user has all permissions without explicitly assigning " +"them." +msgstr "Määrab, kas see kasutaja omab automaatselt ja alati kõiki õigus." + +#: contrib/auth/models.py:139 +msgid "last login" +msgstr "viimane sisenemine" + +#: contrib/auth/models.py:140 +msgid "date joined" +msgstr "liitumise kuupäev" + +#: contrib/auth/models.py:142 +msgid "" +"In addition to the permissions manually assigned, this user will also get " +"all permissions granted to each group he/she is in." +msgstr "" +"Lisaks neile õigustele, mis kasutajale on määratud, omab kasutaja ka neid " +"õigusi, mis on nendel gruppidel, millesse ta kuulub." + +#: contrib/auth/models.py:143 +msgid "user permissions" +msgstr "kasutajaõigused" + +#: contrib/auth/models.py:147 +msgid "user" +msgstr "kasutaja" + +#: contrib/auth/models.py:148 +msgid "users" +msgstr "kasutajad" + +#: contrib/auth/models.py:154 +msgid "Personal info" +msgstr "Isiklikud andmd" + +#: contrib/auth/models.py:155 +msgid "Permissions" +msgstr "Õigused" + +#: contrib/auth/models.py:156 +msgid "Important dates" +msgstr "Tähtsad kuupäevad" + +#: contrib/auth/models.py:157 +msgid "Groups" +msgstr "Grupid" + +#: contrib/auth/models.py:316 +msgid "message" +msgstr "sõnum" + +#: contrib/auth/views.py:47 +msgid "Logged out" +msgstr "Välja logitud" + +#: contrib/comments/models.py:71 contrib/comments/models.py:176 +msgid "object ID" +msgstr "objekti ID" + +#: contrib/comments/models.py:72 +msgid "headline" +msgstr "pealkiri" + +#: contrib/comments/models.py:73 contrib/comments/models.py:95 +#: contrib/comments/models.py:177 +msgid "comment" +msgstr "kommentaar" + +#: contrib/comments/models.py:74 +msgid "rating #1" +msgstr "reiting #1" + +#: contrib/comments/models.py:75 +msgid "rating #2" +msgstr "reiting #2" + +#: contrib/comments/models.py:76 +msgid "rating #3" +msgstr "reiting #3" + +#: contrib/comments/models.py:77 +msgid "rating #4" +msgstr "reiting #4" + +#: contrib/comments/models.py:78 +msgid "rating #5" +msgstr "reiting #5" + +#: contrib/comments/models.py:79 +msgid "rating #6" +msgstr "reiting #6" + +#: contrib/comments/models.py:80 +msgid "rating #7" +msgstr "reiting #7" + +#: contrib/comments/models.py:81 +msgid "rating #8" +msgstr "reiting #8" + +#: contrib/comments/models.py:86 +msgid "is valid rating" +msgstr "on korrektne reiting" + +#: contrib/comments/models.py:87 contrib/comments/models.py:179 +msgid "date/time submitted" +msgstr "loomise kuupäev/kellaaeg" + +#: contrib/comments/models.py:88 contrib/comments/models.py:180 +msgid "is public" +msgstr "on avalik" + +#: contrib/comments/models.py:90 +msgid "is removed" +msgstr "on eemaldatud" + +#: contrib/comments/models.py:90 +msgid "" +"Check this box if the comment is inappropriate. A \"This comment has been " +"removed\" message will be displayed instead." +msgstr "" +"Märkige siia linnuke, kui see kommentaar on ebasobiv. Kommentaari asemel " +"kuvatakse kirja \"Kommentaar on kustutatud\"." + +#: contrib/comments/models.py:96 +msgid "comments" +msgstr "kommentaarid" + +#: contrib/comments/models.py:140 contrib/comments/models.py:222 +msgid "Content object" +msgstr "Sisuobjekt" + +#: contrib/comments/models.py:168 +#, python-format +msgid "" +"Posted by %(user)s at %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" +msgstr "" +"Postitatud kasutaja %(user)s poolt %(date)s\n" +"\n" +"%(comment)s\n" +"\n" +"http://%(domain)s%(url)s" + +#: contrib/comments/models.py:178 +msgid "person's name" +msgstr "isiku nimi" + +#: contrib/comments/models.py:181 +msgid "ip address" +msgstr "ip aadress" + +#: contrib/comments/models.py:183 +msgid "approved by staff" +msgstr "personali poolt heaks kiidetud" + +#: contrib/comments/models.py:187 +msgid "free comment" +msgstr "vaba kommentaar" + +#: contrib/comments/models.py:188 +msgid "free comments" +msgstr "vabad kommentaarid" + +#: contrib/comments/models.py:250 +msgid "score" +msgstr "tulemus" + +#: contrib/comments/models.py:251 +msgid "score date" +msgstr "tulemuse kuupäev" + +#: contrib/comments/models.py:255 +msgid "karma score" +msgstr "karma tulemus" + +#: contrib/comments/models.py:256 +msgid "karma scores" +msgstr "karma tulemused" + +#: contrib/comments/models.py:260 +#, python-format +msgid "%(score)d rating by %(user)s" +msgstr "%(score)d reiting kasutaja %(user)s poolt" + +#: contrib/comments/models.py:277 +#, python-format +msgid "" +"This comment was flagged by %(user)s:\n" +"\n" +"%(text)s" +msgstr "" +"See kommentaar märgiti kasutaja %(user)s poolt:\n" +"\n" +"%(text)s" + +#: contrib/comments/models.py:285 +msgid "flag date" +msgstr "märkimise kuupäev" + +#: contrib/comments/models.py:289 +msgid "user flag" +msgstr "kasutajamärge" + +#: contrib/comments/models.py:290 +msgid "user flags" +msgstr "kasutajamärked" + +#: contrib/comments/models.py:294 +#, python-format +msgid "Flag by %r" +msgstr "Lipu pani %r" + +#: contrib/comments/models.py:300 +msgid "deletion date" +msgstr "kustutamise kuupäev" + +#: contrib/comments/models.py:303 +msgid "moderator deletion" +msgstr "moderaatori kustutus" + +#: contrib/comments/models.py:304 +msgid "moderator deletions" +msgstr "moderaatori kustutused" + +#: contrib/comments/models.py:308 +#, python-format +msgid "Moderator deletion by %r" +msgstr "moderaatori kustutus kasutaja %r poolt" + +#: contrib/comments/templates/comments/form.html:8 +msgid "Forgotten your password?" +msgstr "Unustasid salasõna?" + +#: contrib/comments/templates/comments/form.html:12 +msgid "Ratings" +msgstr "Reitingud" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Required" +msgstr "Nõutav" + +#: contrib/comments/templates/comments/form.html:12 +#: contrib/comments/templates/comments/form.html:23 +msgid "Optional" +msgstr "Valikuline" + +#: contrib/comments/templates/comments/form.html:23 +msgid "Post a photo" +msgstr "Postita foto" + +#: contrib/comments/templates/comments/form.html:28 +#: contrib/comments/templates/comments/freeform.html:5 +msgid "Comment:" +msgstr "Kommentaar:" + +#: contrib/comments/templates/comments/form.html:35 +#: contrib/comments/templates/comments/freeform.html:10 +msgid "Preview comment" +msgstr "Kommentaari eelvaade" + +#: contrib/comments/templates/comments/freeform.html:4 +msgid "Your name:" +msgstr "Teie nimi:" + +#: contrib/comments/views/comments.py:28 +msgid "" +"This rating is required because you've entered at least one other rating." +msgstr "" +"See reiting on nõutav, sest olete sisestanud vähemalt ühe teise reitingu." + +#: contrib/comments/views/comments.py:112 +#, python-format +msgid "" +"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" +"\n" +"%(text)s" +msgstr[0] "" +msgstr[1] "" + +#: contrib/comments/views/comments.py:117 +#, python-format +msgid "" +"This comment was posted by a sketchy user:\n" +"\n" +"%(text)s" +msgstr "" +"Selle kommentaari postitas pealiskaudne kasutaja:\n" +"\n" +"%(text)s" + +#: contrib/comments/views/comments.py:190 +#: contrib/comments/views/comments.py:283 +msgid "Only POSTs are allowed" +msgstr "Ainult POST päringud on lubatud" + +#: contrib/comments/views/comments.py:194 +#: contrib/comments/views/comments.py:287 +msgid "One or more of the required fields wasn't submitted" +msgstr "Üks või enam nõutavatest väljadest on puudu" + +#: contrib/comments/views/comments.py:198 +#: contrib/comments/views/comments.py:289 +msgid "Somebody tampered with the comment form (security violation)" +msgstr "" +"Keegi on kommentaari ankeeti sisestanud vigaseid andmed (turvarikkumine)" + +#: contrib/comments/views/comments.py:208 +#: contrib/comments/views/comments.py:295 +msgid "" +"The comment form had an invalid 'target' parameter -- the object ID was " +"invalid" +msgstr "" +"Kommentaariankeet sisaldas ebakorrektset 'target' parameetrit -- objekti ID " +"ei olnud korrektne" + +#: contrib/comments/views/comments.py:259 +#: contrib/comments/views/comments.py:324 +msgid "The comment form didn't provide either 'preview' or 'post'" +msgstr "Kommentaari ankeedis oli puudu kas 'preview' või 'post'" + +#: contrib/comments/views/karma.py:21 +msgid "Anonymous users cannot vote" +msgstr "Anonüümsed kasutajad ei saa hääletada" + +#: contrib/comments/views/karma.py:25 +msgid "Invalid comment ID" +msgstr "Ebakorrektne kommentaari ID" + +#: contrib/comments/views/karma.py:27 +msgid "No voting for yourself" +msgstr "Iseendale ei saa häält anda" + +#: contrib/contenttypes/models.py:67 +msgid "python model class name" +msgstr "pythoni mudeli klassinimi" + +#: contrib/contenttypes/models.py:71 +msgid "content type" +msgstr "sisutüüp" + +#: contrib/contenttypes/models.py:72 +msgid "content types" +msgstr "sisutüübid" + +#: contrib/flatpages/models.py:9 +msgid "" +"Example: '/about/contact/'. Make sure to have leading and trailing slashes." +msgstr "" +"Näide: '/about/contact/'. Veenduge, et URL algaks ja lõppeks kaldkriipsuga." + +#: contrib/flatpages/models.py:10 +msgid "title" +msgstr "pealkiri" + +#: contrib/flatpages/models.py:11 +msgid "content" +msgstr "sisu" + +#: contrib/flatpages/models.py:12 +msgid "enable comments" +msgstr "võimalda kommentaarid" + +#: contrib/flatpages/models.py:13 +msgid "template name" +msgstr "mall" + +#: contrib/flatpages/models.py:14 +msgid "" +"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " +"will use 'flatpages/default.html'." +msgstr "" +"Näide: 'flatpages/contact_page.html'. Kui mall on määramata, kasutatakse " +"vaikimisi malli 'flatpages/default.html'." + +#: contrib/flatpages/models.py:15 +msgid "registration required" +msgstr "registreerumine nõutav" + +#: contrib/flatpages/models.py:15 +msgid "If this is checked, only logged-in users will be able to view the page." +msgstr "Kui see on valitud, näevad lehte ainult sisselogitud kasutajad" + +#: contrib/flatpages/models.py:20 +msgid "flat page" +msgstr "sisuleht" + +#: contrib/flatpages/models.py:21 +msgid "flat pages" +msgstr "sisulehed" + +#: contrib/flatpages/models.py:27 +msgid "Advanced options" +msgstr "Lisavalikud" + +#: contrib/humanize/templatetags/humanize.py:19 +msgid "th" +msgstr "." + +#: contrib/humanize/templatetags/humanize.py:19 +msgid "st" +msgstr "." + +#: contrib/humanize/templatetags/humanize.py:19 +msgid "nd" +msgstr "." + +#: contrib/humanize/templatetags/humanize.py:19 +msgid "rd" +msgstr "." + +#: contrib/humanize/templatetags/humanize.py:51 +#, python-format +msgid "%(value).1f million" +msgid_plural "%(value).1f million" +msgstr[0] "%(value).1f miljon" +msgstr[1] "%(value).11f miljonit" + +#: contrib/humanize/templatetags/humanize.py:54 +#, python-format +msgid "%(value).1f billion" +msgid_plural "%(value).1f billion" +msgstr[0] "%(value).1f miljard" +msgstr[1] "%(value).1f miljardit" + +#: contrib/humanize/templatetags/humanize.py:57 +#, python-format +msgid "%(value).1f trillion" +msgid_plural "%(value).1f trillion" +msgstr[0] "%(value).1f triljon" +msgstr[1] "%(value).1f triljonit" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "one" +msgstr "üks" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "two" +msgstr "kaks" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "three" +msgstr "kolm" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "four" +msgstr "neli" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "five" +msgstr "viis" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "six" +msgstr "kuus" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "seven" +msgstr "seitse" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "eight" +msgstr "kaheksa" + +#: contrib/humanize/templatetags/humanize.py:73 +msgid "nine" +msgstr "üheksa" + +#: contrib/humanize/templatetags/humanize.py:93 +msgid "today" +msgstr "täna" + +#: contrib/humanize/templatetags/humanize.py:95 +msgid "tomorrow" +msgstr "homme" + +#: contrib/humanize/templatetags/humanize.py:97 +msgid "yesterday" +msgstr "eile" + +#: contrib/localflavor/ar/forms.py:27 +msgid "Enter a postal code in the format NNNN or ANNNNAAA." +msgstr "Sisesta postiindeks kujul NNNN või ANNNNAAA." + +#: contrib/localflavor/ar/forms.py:49 contrib/localflavor/br/forms.py:96 +#: contrib/localflavor/br/forms.py:135 contrib/localflavor/pe/forms.py:23 +#: contrib/localflavor/pe/forms.py:51 +msgid "This field requires only numbers." +msgstr "See väli peab koosnema ainult numbritest." + +#: contrib/localflavor/ar/forms.py:50 +msgid "This field requires 7 or 8 digits." +msgstr "Siin väljal peab olema kas 7 või 8 numbrit." + +#: contrib/localflavor/ar/forms.py:79 +msgid "Enter a valid CUIT in XX-XXXXXXXX-X or XXXXXXXXXXXX format." +msgstr "Sisesta korrektne CUIT kujul XX-XXXXXXXX-X or XXXXXXXXXXXX." + +#: contrib/localflavor/ar/forms.py:80 +msgid "Invalid CUIT." +msgstr "Vale CUIT." + +#: contrib/localflavor/au/forms.py:16 +msgid "Enter a 4 digit post code." +msgstr "Sisesta neljakohaline postiindeks." + +#: contrib/localflavor/br/forms.py:21 +msgid "Enter a zip code in the format XXXXX-XXX." +msgstr "Sisesta postiindeks kujul XXXXX-XXX." + +#: contrib/localflavor/br/forms.py:30 +msgid "Phone numbers must be in XX-XXXX-XXXX format." +msgstr "Telefoninumbrid peavad olema kujul XX-XXXX-XXXX." + +#: contrib/localflavor/br/forms.py:58 +msgid "" +"Select a valid brazilian state. That state is not one of the available " +"states." +msgstr "Vali korrektne Brasiilia osariik. Valitud osariik ei ole korrektne." + +#: contrib/localflavor/br/forms.py:94 +msgid "Invalid CPF number." +msgstr "Mittekorrektne CPF number." + +#: contrib/localflavor/br/forms.py:95 +msgid "This field requires at most 11 digits or 14 characters." +msgstr "See väli võib olla maksimaalselt 11 või 14 sümbolit." + +#: contrib/localflavor/br/forms.py:134 +msgid "Invalid CNPJ number." +msgstr "Mittekorrektne CNPJ number." + +#: contrib/localflavor/br/forms.py:136 +msgid "This field requires at least 14 digits" +msgstr "See väli peab olema vähemalt 14-kohaline arv." + +#: contrib/localflavor/ca/forms.py:17 +msgid "Enter a postal code in the format XXX XXX." +msgstr "Sisesta postiindeks kujul XXX XXX." + +#: contrib/localflavor/ca/forms.py:88 +msgid "Enter a valid Canadian Social Insurance number in XXX-XXX-XXX format." +msgstr "Sisesta korrektne Kanada sotsiaalturvatunnus formaadis XXX-XXX-XXXX." + +#: 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:16 contrib/localflavor/no/forms.py:12 +msgid "Enter a zip code in the format XXXX." +msgstr "Sisesta postiindeks kujul XXXX." + +#: contrib/localflavor/ch/forms.py:64 +msgid "" +"Enter a valid Swiss identity or passport card number in X1234567<0 or " +"1234567890 format." +msgstr "" +"Sisesta kehtiv Šveitsi isiku- või passinumber kujul X1234567<0 või " +"1234567890." + +#: contrib/localflavor/cl/forms.py:29 +msgid "Enter a valid Chilean RUT." +msgstr "Sisesta korrektne Tšiili RUT." + +#: contrib/localflavor/cl/forms.py:30 +msgid "Enter a valid Chilean RUT. The format is XX.XXX.XXX-X." +msgstr "Sisesta korrektne Tšiili RUT formaadis XX.XXX.XXX-X." + +#: contrib/localflavor/cl/forms.py:31 +msgid "The Chilean RUT is not valid." +msgstr "Tšiili RUT on ebakorrektne." + +#: contrib/localflavor/de/de_states.py:5 +msgid "Baden-Wuerttemberg" +msgstr "Baden-Württemberg" + +#: contrib/localflavor/de/de_states.py:6 +msgid "Bavaria" +msgstr "Baieri" + +#: contrib/localflavor/de/de_states.py:7 +msgid "Berlin" +msgstr "Berliin" + +#: 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 "Alam-Saksi" + +#: contrib/localflavor/de/de_states.py:14 +msgid "North Rhine-Westphalia" +msgstr "Nordrhein-Westfalen" + +#: contrib/localflavor/de/de_states.py:15 +msgid "Rhineland-Palatinate" +msgstr "Rheinland-Pfalz" + +#: contrib/localflavor/de/de_states.py:16 +msgid "Saarland" +msgstr "Saarimaa" + +#: contrib/localflavor/de/de_states.py:17 +msgid "Saxony" +msgstr "Saksimaa" + +#: contrib/localflavor/de/de_states.py:18 +msgid "Saxony-Anhalt" +msgstr "Saksi-Anhalt" + +#: contrib/localflavor/de/de_states.py:19 +msgid "Schleswig-Holstein" +msgstr "Schleswig-Holstein" + +#: contrib/localflavor/de/de_states.py:20 +msgid "Thuringia" +msgstr "Tüüringi" + +#: contrib/localflavor/de/forms.py:14 contrib/localflavor/fi/forms.py:12 +#: contrib/localflavor/fr/forms.py:15 +msgid "Enter a zip code in the format XXXXX." +msgstr "Sisesta postiindeks kujul XXXXX." + +#: contrib/localflavor/de/forms.py:41 +msgid "" +"Enter a valid German identity card number in XXXXXXXXXXX-XXXXXXX-XXXXXXX-X " +"format." +msgstr "" +"Sisesta kehtiv Saksamaa ID-kaardi number kujul XXXXXXXXXXX-XXXXXXX-XXXXXXX-X." + +#: contrib/localflavor/es/es_provinces.py:5 +msgid "Arava" +msgstr "Álava" + +#: contrib/localflavor/es/es_provinces.py:6 +msgid "Albacete" +msgstr "Albacete" + +#: contrib/localflavor/es/es_provinces.py:7 +msgid "Alacant" +msgstr "Alicante" + +#: contrib/localflavor/es/es_provinces.py:8 +msgid "Almeria" +msgstr "Almería" + +#: contrib/localflavor/es/es_provinces.py:9 +msgid "Avila" +msgstr "Ávila" + +#: contrib/localflavor/es/es_provinces.py:10 +msgid "Badajoz" +msgstr "Badajoz" + +#: contrib/localflavor/es/es_provinces.py:11 +msgid "Illes Balears" +msgstr "Baleaarid" + +#: contrib/localflavor/es/es_provinces.py:12 +msgid "Barcelona" +msgstr "Barcelona" + +#: contrib/localflavor/es/es_provinces.py:13 +msgid "Burgos" +msgstr "Burgos" + +#: contrib/localflavor/es/es_provinces.py:14 +msgid "Caceres" +msgstr "Cáceres" + +#: contrib/localflavor/es/es_provinces.py:15 +msgid "Cadiz" +msgstr "Cádiz" + +#: contrib/localflavor/es/es_provinces.py:16 +msgid "Castello" +msgstr "Castellón" + +#: contrib/localflavor/es/es_provinces.py:17 +msgid "Ciudad Real" +msgstr "Ciudad Real" + +#: contrib/localflavor/es/es_provinces.py:18 +msgid "Cordoba" +msgstr "Córdoba" + +#: contrib/localflavor/es/es_provinces.py:19 +msgid "A Coruna" +msgstr "A Coruna" + +#: contrib/localflavor/es/es_provinces.py:20 +msgid "Cuenca" +msgstr "Cuenca" + +#: contrib/localflavor/es/es_provinces.py:21 +msgid "Girona" +msgstr "Girona" + +#: contrib/localflavor/es/es_provinces.py:22 +msgid "Granada" +msgstr "Granada" + +#: contrib/localflavor/es/es_provinces.py:23 +msgid "Guadalajara" +msgstr "Guadalajara" + +#: contrib/localflavor/es/es_provinces.py:24 +msgid "Guipuzkoa" +msgstr "Guipúzcoa" + +#: contrib/localflavor/es/es_provinces.py:25 +msgid "Huelva" +msgstr "Huelva" + +#: contrib/localflavor/es/es_provinces.py:26 +msgid "Huesca" +msgstr "Huesca" + +#: contrib/localflavor/es/es_provinces.py:27 +msgid "Jaen" +msgstr "Jaén" + +#: contrib/localflavor/es/es_provinces.py:28 +msgid "Leon" +msgstr "León" + +#: contrib/localflavor/es/es_provinces.py:29 +msgid "Lleida" +msgstr "Lleida" + +#: contrib/localflavor/es/es_provinces.py:30 +#: contrib/localflavor/es/es_regions.py:17 +msgid "La Rioja" +msgstr "La Rioja" + +#: contrib/localflavor/es/es_provinces.py:31 +msgid "Lugo" +msgstr "Lugo" + +#: contrib/localflavor/es/es_provinces.py:32 +#: contrib/localflavor/es/es_regions.py:18 +msgid "Madrid" +msgstr "Madrid" + +#: contrib/localflavor/es/es_provinces.py:33 +msgid "Malaga" +msgstr "Málaga" + +#: contrib/localflavor/es/es_provinces.py:34 +msgid "Murcia" +msgstr "Murcia" + +#: contrib/localflavor/es/es_provinces.py:35 +msgid "Navarre" +msgstr "Navarra" + +#: contrib/localflavor/es/es_provinces.py:36 +msgid "Ourense" +msgstr "Orense" + +#: contrib/localflavor/es/es_provinces.py:37 +msgid "Asturias" +msgstr "Astuuria" + +#: contrib/localflavor/es/es_provinces.py:38 +msgid "Palencia" +msgstr "Palencia" + +#: contrib/localflavor/es/es_provinces.py:39 +msgid "Las Palmas" +msgstr "Las Palmas" + +#: contrib/localflavor/es/es_provinces.py:40 +msgid "Pontevedra" +msgstr "Pontevedra" + +#: contrib/localflavor/es/es_provinces.py:41 +msgid "Salamanca" +msgstr "Salamanca" + +#: contrib/localflavor/es/es_provinces.py:42 +msgid "Santa Cruz de Tenerife" +msgstr "Tenerife" + +#: contrib/localflavor/es/es_provinces.py:43 +#: contrib/localflavor/es/es_regions.py:11 +msgid "Cantabria" +msgstr "Cantabria" + +#: contrib/localflavor/es/es_provinces.py:44 +msgid "Segovia" +msgstr "Segovia" + +#: contrib/localflavor/es/es_provinces.py:45 +msgid "Seville" +msgstr "Sevilla" + +#: contrib/localflavor/es/es_provinces.py:46 +msgid "Soria" +msgstr "Soria" + +#: contrib/localflavor/es/es_provinces.py:47 +msgid "Tarragona" +msgstr "Tarragona" + +#: contrib/localflavor/es/es_provinces.py:48 +msgid "Teruel" +msgstr "Teruel" + +#: contrib/localflavor/es/es_provinces.py:49 +msgid "Toledo" +msgstr "Toledo" + +#: contrib/localflavor/es/es_provinces.py:50 +msgid "Valencia" +msgstr "Valencia" + +#: contrib/localflavor/es/es_provinces.py:51 +msgid "Valladolid" +msgstr "Valladolid" + +#: contrib/localflavor/es/es_provinces.py:52 +msgid "Bizkaia" +msgstr "Vizcaya" + +#: contrib/localflavor/es/es_provinces.py:53 +msgid "Zamora" +msgstr "Zamora" + +#: contrib/localflavor/es/es_provinces.py:54 +msgid "Zaragoza" +msgstr "Zaragoza" + +#: contrib/localflavor/es/es_provinces.py:55 +msgid "Ceuta" +msgstr "Ceuta" + +#: contrib/localflavor/es/es_provinces.py:56 +msgid "Melilla" +msgstr "Melilla" + +#: contrib/localflavor/es/es_regions.py:5 +msgid "Andalusia" +msgstr "Andaluusia" + +#: contrib/localflavor/es/es_regions.py:6 +msgid "Aragon" +msgstr "Aragón" + +#: contrib/localflavor/es/es_regions.py:7 +msgid "Principality of Asturias" +msgstr "Astuuria" + +#: contrib/localflavor/es/es_regions.py:8 +msgid "Balearic Islands" +msgstr "Baleaarid" + +#: contrib/localflavor/es/es_regions.py:9 +msgid "Basque Country" +msgstr "Baskimaa" + +#: contrib/localflavor/es/es_regions.py:10 +msgid "Canary Islands" +msgstr "Kanaari saared" + +#: contrib/localflavor/es/es_regions.py:12 +msgid "Castile-La Mancha" +msgstr "Castilla-La Mancha" + +#: contrib/localflavor/es/es_regions.py:13 +msgid "Castile and Leon" +msgstr "Castilla-León" + +#: contrib/localflavor/es/es_regions.py:14 +msgid "Catalonia" +msgstr "Kataloonia" + +#: contrib/localflavor/es/es_regions.py:15 +msgid "Extremadura" +msgstr "Extremadura" + +#: contrib/localflavor/es/es_regions.py:16 +msgid "Galicia" +msgstr "Galicia" + +#: contrib/localflavor/es/es_regions.py:19 +msgid "Region of Murcia" +msgstr "Murcia" + +#: contrib/localflavor/es/es_regions.py:20 +msgid "Foral Community of Navarre" +msgstr "Navarra" + +#: contrib/localflavor/es/es_regions.py:21 +msgid "Valencian Community" +msgstr "Valencia" + +#: contrib/localflavor/es/forms.py:19 +msgid "Enter a valid postal code in the range and format 01XXX - 52XXX." +msgstr "Sisesta korrektne postiindeks vahemikus 01XXX - 52XXX." + +#: contrib/localflavor/es/forms.py:39 +msgid "" +"Enter a valid phone number in one of the formats 6XXXXXXXX, 8XXXXXXXX or " +"9XXXXXXXX." +msgstr "" +"Sisesta korrektne telefoninumber, mis on formaadis 6XXXXXXXX, 8XXXXXXXX või " +"9XXXXXXXX." + +#: contrib/localflavor/es/forms.py:66 +msgid "Please enter a valid NIF, NIE, or CIF." +msgstr "Palun sisesta korrektne NIF, NIE või CIF." + +#: contrib/localflavor/es/forms.py:67 +msgid "Please enter a valid NIF or NIE." +msgstr "Palun sisesta korrektne NIF või NIE." + +#: contrib/localflavor/es/forms.py:68 +msgid "Invalid checksum for NIF." +msgstr "Vale NIF-i kontrollsumma." + +#: contrib/localflavor/es/forms.py:69 +msgid "Invalid checksum for NIE." +msgstr "Vale NIE kontrollsumma." + +#: contrib/localflavor/es/forms.py:70 +msgid "Invalid checksum for CIF." +msgstr "Vale CIF-i kontrollsumma." + +#: contrib/localflavor/es/forms.py:142 +msgid "" +"Please enter a valid bank account number in format XXXX-XXXX-XX-XXXXXXXXXX." +msgstr "Palun sisesta korrektne kontonumber formaadis XXXX-XXXX-XX-XXXXXXXXXX." + +#: contrib/localflavor/es/forms.py:143 +msgid "Invalid checksum for bank account number." +msgstr "Pangakonto numbri kontrollsumma on vale." + +#: contrib/localflavor/fi/forms.py:28 +msgid "Enter a valid Finnish social security number." +msgstr "Sisesta korrektne Soome sotsiaalturvatunnus." + +#: contrib/localflavor/in_/forms.py:14 +msgid "Enter a zip code in the format XXXXXXX." +msgstr "Sisesta postiindeks kujul XXXXXXX." + +#: contrib/localflavor/is_/forms.py:17 +msgid "" +"Enter a valid Icelandic identification number. The format is XXXXXX-XXXX." +msgstr "Sisesta kehtiv Islandi isikukood formaadis XXXXXX-XXXX." + +#: contrib/localflavor/is_/forms.py:18 +msgid "The Icelandic identification number is not valid." +msgstr "Islandi isikukood ei ole korrektne." + +#: contrib/localflavor/it/forms.py:14 +msgid "Enter a valid zip code." +msgstr "Sisesta korrektne postiindeks." + +#: contrib/localflavor/it/forms.py:43 +msgid "Enter a valid Social Security number." +msgstr "Sisesta korrektne sotsiaalturvatunnus." + +#: contrib/localflavor/it/forms.py:68 +msgid "Enter a valid VAT number." +msgstr "Sisesta korrektne käibemaksukohuslase kood." + +#: contrib/localflavor/jp/forms.py:17 +msgid "Enter a postal code in the format XXXXXXX or XXX-XXXX." +msgstr "Sisesta postiindeks kujul XXXXXXX või XXX-XXXX." + +#: 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 "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 "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 "Kumamoto" + +#: 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/mx/mx_states.py:12 +msgid "Aguascalientes" +msgstr "Aguascalientes" + +#: contrib/localflavor/mx/mx_states.py:13 +msgid "Baja California" +msgstr "Baja California" + +#: contrib/localflavor/mx/mx_states.py:14 +msgid "Baja California Sur" +msgstr "Baja California Sur" + +#: contrib/localflavor/mx/mx_states.py:15 +msgid "Campeche" +msgstr "Campeche" + +#: contrib/localflavor/mx/mx_states.py:16 +msgid "Chihuahua" +msgstr "Chihuahua" + +#: contrib/localflavor/mx/mx_states.py:17 +msgid "Chiapas" +msgstr "Chiapas" + +#: contrib/localflavor/mx/mx_states.py:18 +msgid "Coahuila" +msgstr "Coahuila" + +#: contrib/localflavor/mx/mx_states.py:19 +msgid "Colima" +msgstr "Colima" + +#: contrib/localflavor/mx/mx_states.py:20 +msgid "Distrito Federal" +msgstr "Distrito Federal" + +#: contrib/localflavor/mx/mx_states.py:21 +msgid "Durango" +msgstr "Durango" + +#: contrib/localflavor/mx/mx_states.py:22 +msgid "Guerrero" +msgstr "Guerrero" + +#: contrib/localflavor/mx/mx_states.py:23 +msgid "Guanajuato" +msgstr "Guanajuato" + +#: contrib/localflavor/mx/mx_states.py:24 +msgid "Hidalgo" +msgstr "Hidalgo" + +#: contrib/localflavor/mx/mx_states.py:25 +msgid "Jalisco" +msgstr "Jalisco" + +#: contrib/localflavor/mx/mx_states.py:26 +msgid "Estado de México" +msgstr "Estado de México" + +#: contrib/localflavor/mx/mx_states.py:27 +msgid "Michoacán" +msgstr "Michoacán" + +#: contrib/localflavor/mx/mx_states.py:28 +msgid "Morelos" +msgstr "Morelos" + +#: contrib/localflavor/mx/mx_states.py:29 +msgid "Nayarit" +msgstr "Nayarit" + +#: contrib/localflavor/mx/mx_states.py:30 +msgid "Nuevo León" +msgstr "Nuevo León" + +#: contrib/localflavor/mx/mx_states.py:31 +msgid "Oaxaca" +msgstr "Oaxaca" + +#: contrib/localflavor/mx/mx_states.py:32 +msgid "Puebla" +msgstr "Puebla" + +#: contrib/localflavor/mx/mx_states.py:33 +msgid "Querétaro" +msgstr "Querétaro" + +#: contrib/localflavor/mx/mx_states.py:34 +msgid "Quintana Roo" +msgstr "Quintana Roo" + +#: contrib/localflavor/mx/mx_states.py:35 +msgid "Sinaloa" +msgstr "Sinaloa" + +#: contrib/localflavor/mx/mx_states.py:36 +msgid "San Luis Potosí" +msgstr "San Luis Potosí" + +#: contrib/localflavor/mx/mx_states.py:37 +msgid "Sonora" +msgstr "Sonora" + +#: contrib/localflavor/mx/mx_states.py:38 +msgid "Tabasco" +msgstr "Tabasco" + +#: contrib/localflavor/mx/mx_states.py:39 +msgid "Tamaulipas" +msgstr "Tamaulipas" + +#: contrib/localflavor/mx/mx_states.py:40 +msgid "Tlaxcala" +msgstr "Tlaxcala" + +#: contrib/localflavor/mx/mx_states.py:41 +msgid "Veracruz" +msgstr "Veracruz" + +#: contrib/localflavor/mx/mx_states.py:42 +msgid "Yucatán" +msgstr "Yucatán" + +#: contrib/localflavor/mx/mx_states.py:43 +msgid "Zacatecas" +msgstr "Zacatecas" + +#: contrib/localflavor/nl/forms.py:21 +msgid "Enter a valid postal code" +msgstr "Sisesta kehtiv postiindeks" + +#: contrib/localflavor/nl/forms.py:52 +msgid "Enter a valid phone number" +msgstr "Sisesta kehtiv telefoninumber" + +#: contrib/localflavor/nl/forms.py:78 +msgid "Enter a valid SoFi number" +msgstr "Sisesta kehtiv SoFi number" + +#: contrib/localflavor/nl/nl_provinces.py:4 +msgid "Drente" +msgstr "Drenthe" + +#: contrib/localflavor/nl/nl_provinces.py:5 +msgid "Flevoland" +msgstr "Flevoland" + +#: contrib/localflavor/nl/nl_provinces.py:6 +msgid "Friesland" +msgstr "Friisimaa" + +#: contrib/localflavor/nl/nl_provinces.py:7 +msgid "Gelderland" +msgstr "Gelderland" + +#: contrib/localflavor/nl/nl_provinces.py:8 +msgid "Groningen" +msgstr "Groningeni provints" + +#: contrib/localflavor/nl/nl_provinces.py:9 +msgid "Limburg" +msgstr "Limburgi provints" + +#: contrib/localflavor/nl/nl_provinces.py:10 +msgid "Noord-Brabant" +msgstr "Põhja-Brabant" + +#: contrib/localflavor/nl/nl_provinces.py:11 +msgid "Noord-Holland" +msgstr "Põhja-Holland" + +#: contrib/localflavor/nl/nl_provinces.py:12 +msgid "Overijssel" +msgstr "Overijssel" + +#: contrib/localflavor/nl/nl_provinces.py:13 +msgid "Utrecht" +msgstr "Utrechti provints" + +#: contrib/localflavor/nl/nl_provinces.py:14 +msgid "Zeeland" +msgstr "Zeeland" + +#: contrib/localflavor/nl/nl_provinces.py:15 +msgid "Zuid-Holland" +msgstr "Lõuna-Holland" + +#: contrib/localflavor/no/forms.py:33 +msgid "Enter a valid Norwegian social security number." +msgstr "Sisesta kehtiv Norra sotsiaalturvatunnus." + +#: contrib/localflavor/pe/forms.py:24 +msgid "This field requires 8 digits." +msgstr "Sellel väljal peab olema 8 numbrit." + +#: contrib/localflavor/pe/forms.py:52 +msgid "This field requires 11 digits." +msgstr "Sellel väljal peab olema 11 numbrit." + +#: contrib/localflavor/pl/forms.py:39 +msgid "National Identification Number consists of 11 digits." +msgstr "Riiklik isikukood koosneb 11 numbrist." + +#: contrib/localflavor/pl/forms.py:40 +msgid "Wrong checksum for the National Identification Number." +msgstr "Isikukoodil on vale kontrollsumma." + +#: contrib/localflavor/pl/forms.py:72 +msgid "" +"Enter a tax number field (NIP) in the format XXX-XXX-XX-XX or XX-XX-XXX-XXX." +msgstr "" +"Sisesta maksumaksja number (NIP) formaadis XXX-XXX-XX-XX või XX-XX-XXX-XXX." + +#: contrib/localflavor/pl/forms.py:73 +msgid "Wrong checksum for the Tax Number (NIP)." +msgstr "Maksukohustusnumbril (NIP) on vale kontrollsumma." + +#: contrib/localflavor/pl/forms.py:112 +msgid "National Business Register Number (REGON) consists of 7 or 9 digits." +msgstr "Riikliku Äriregistri number (REGON) koosneb 7 või 9 numbrist." + +#: contrib/localflavor/pl/forms.py:113 +msgid "Wrong checksum for the National Business Register Number (REGON)." +msgstr "Riiklikul Äriregistri numbril (REGON) on vale kontrollsumma." + +#: contrib/localflavor/pl/forms.py:156 +msgid "Enter a postal code in the format XX-XXX." +msgstr "Sisesta postiindeks kujul XX-XXX." + +#: contrib/localflavor/pl/pl_voivodeships.py:8 +msgid "Lower Silesia" +msgstr "Alam-Sileesia" + +#: contrib/localflavor/pl/pl_voivodeships.py:9 +msgid "Kuyavia-Pomerania" +msgstr "Kujawy-Pomorze" + +#: contrib/localflavor/pl/pl_voivodeships.py:10 +msgid "Lublin" +msgstr "Lublin" + +#: contrib/localflavor/pl/pl_voivodeships.py:11 +msgid "Lubusz" +msgstr "Lubusz" + +#: contrib/localflavor/pl/pl_voivodeships.py:12 +msgid "Lodz" +msgstr "Łódź" + +#: contrib/localflavor/pl/pl_voivodeships.py:13 +msgid "Lesser Poland" +msgstr "Väike-Poola" + +#: contrib/localflavor/pl/pl_voivodeships.py:14 +msgid "Masovia" +msgstr "Masoovia" + +#: contrib/localflavor/pl/pl_voivodeships.py:15 +msgid "Opole" +msgstr "Opole" + +#: contrib/localflavor/pl/pl_voivodeships.py:16 +msgid "Subcarpatia" +msgstr "Podkarpacie" + +#: contrib/localflavor/pl/pl_voivodeships.py:17 +msgid "Podlasie" +msgstr "Podlaasia" + +#: contrib/localflavor/pl/pl_voivodeships.py:18 +msgid "Pomerania" +msgstr "Pomorze" + +#: contrib/localflavor/pl/pl_voivodeships.py:19 +msgid "Silesia" +msgstr "Sileesia" + +#: contrib/localflavor/pl/pl_voivodeships.py:20 +msgid "Swietokrzyskie" +msgstr "Święty Krzyżi" + +#: contrib/localflavor/pl/pl_voivodeships.py:21 +msgid "Warmia-Masuria" +msgstr "Warmia-Masuuria" + +#: contrib/localflavor/pl/pl_voivodeships.py:22 +msgid "Greater Poland" +msgstr "Suur-Poola" + +#: contrib/localflavor/pl/pl_voivodeships.py:23 +msgid "West Pomerania" +msgstr "Lääne-Pomorze" + +#: contrib/localflavor/sk/forms.py:30 +msgid "Enter a postal code in the format XXXXX or XXX XX." +msgstr "Sisesta postiindeks kujul XXXXX või XXX XX." + +#: contrib/localflavor/sk/sk_districts.py:8 +msgid "Banska Bystrica" +msgstr "Banska Bystrica" + +#: contrib/localflavor/sk/sk_districts.py:9 +msgid "Banska Stiavnica" +msgstr "Banska Stiavnica" + +#: contrib/localflavor/sk/sk_districts.py:10 +msgid "Bardejov" +msgstr "Bardejov" + +#: contrib/localflavor/sk/sk_districts.py:11 +msgid "Banovce nad Bebravou" +msgstr "Banovce nad Bebravou" + +#: contrib/localflavor/sk/sk_districts.py:12 +msgid "Brezno" +msgstr "Brezno" + +#: contrib/localflavor/sk/sk_districts.py:13 +msgid "Bratislava I" +msgstr "Bratislava I" + +#: contrib/localflavor/sk/sk_districts.py:14 +msgid "Bratislava II" +msgstr "Bratislava II" + +#: contrib/localflavor/sk/sk_districts.py:15 +msgid "Bratislava III" +msgstr "Bratislava III" + +#: contrib/localflavor/sk/sk_districts.py:16 +msgid "Bratislava IV" +msgstr "Bratislava IV" + +#: contrib/localflavor/sk/sk_districts.py:17 +msgid "Bratislava V" +msgstr "Bratislava V" + +#: contrib/localflavor/sk/sk_districts.py:18 +msgid "Bytca" +msgstr "Bytca" + +#: contrib/localflavor/sk/sk_districts.py:19 +msgid "Cadca" +msgstr "Cadca" + +#: contrib/localflavor/sk/sk_districts.py:20 +msgid "Detva" +msgstr "Detva" + +#: contrib/localflavor/sk/sk_districts.py:21 +msgid "Dolny Kubin" +msgstr "Dolny Kubin" + +#: contrib/localflavor/sk/sk_districts.py:22 +msgid "Dunajska Streda" +msgstr "Dunajska Streda" + +#: contrib/localflavor/sk/sk_districts.py:23 +msgid "Galanta" +msgstr "Galanta" + +#: contrib/localflavor/sk/sk_districts.py:24 +msgid "Gelnica" +msgstr "Gelnica" + +#: contrib/localflavor/sk/sk_districts.py:25 +msgid "Hlohovec" +msgstr "Hlohovec" + +#: contrib/localflavor/sk/sk_districts.py:26 +msgid "Humenne" +msgstr "Humenne" + +#: contrib/localflavor/sk/sk_districts.py:27 +msgid "Ilava" +msgstr "Ilava" + +#: contrib/localflavor/sk/sk_districts.py:28 +msgid "Kezmarok" +msgstr "Kezmarok" + +#: contrib/localflavor/sk/sk_districts.py:29 +msgid "Komarno" +msgstr "Komarno" + +#: contrib/localflavor/sk/sk_districts.py:30 +msgid "Kosice I" +msgstr "Kosice I" + +#: contrib/localflavor/sk/sk_districts.py:31 +msgid "Kosice II" +msgstr "Kosice II" + +#: contrib/localflavor/sk/sk_districts.py:32 +msgid "Kosice III" +msgstr "Kosice III" + +#: contrib/localflavor/sk/sk_districts.py:33 +msgid "Kosice IV" +msgstr "Kosice IV" + +#: contrib/localflavor/sk/sk_districts.py:34 +msgid "Kosice - okolie" +msgstr "Kosice - okolie" + +#: contrib/localflavor/sk/sk_districts.py:35 +msgid "Krupina" +msgstr "Krupina" + +#: contrib/localflavor/sk/sk_districts.py:36 +msgid "Kysucke Nove Mesto" +msgstr "Kysucke Nove Mesto" + +#: contrib/localflavor/sk/sk_districts.py:37 +msgid "Levice" +msgstr "Levice" + +#: contrib/localflavor/sk/sk_districts.py:38 +msgid "Levoca" +msgstr "Levoca" + +#: contrib/localflavor/sk/sk_districts.py:39 +msgid "Liptovsky Mikulas" +msgstr "Liptovsky Mikulas" + +#: contrib/localflavor/sk/sk_districts.py:40 +msgid "Lucenec" +msgstr "Lucenec" + +#: contrib/localflavor/sk/sk_districts.py:41 +msgid "Malacky" +msgstr "Malacky" + +#: contrib/localflavor/sk/sk_districts.py:42 +msgid "Martin" +msgstr "Martin" + +#: contrib/localflavor/sk/sk_districts.py:43 +msgid "Medzilaborce" +msgstr "Medzilaborce" + +#: contrib/localflavor/sk/sk_districts.py:44 +msgid "Michalovce" +msgstr "Michalovce" + +#: contrib/localflavor/sk/sk_districts.py:45 +msgid "Myjava" +msgstr "Myjava" + +#: contrib/localflavor/sk/sk_districts.py:46 +msgid "Namestovo" +msgstr "Namestovo" + +#: contrib/localflavor/sk/sk_districts.py:47 +msgid "Nitra" +msgstr "Nitra" + +#: contrib/localflavor/sk/sk_districts.py:48 +msgid "Nove Mesto nad Vahom" +msgstr "Nove Mesto nad Vahom" + +#: contrib/localflavor/sk/sk_districts.py:49 +msgid "Nove Zamky" +msgstr "Nove Zamky" + +#: contrib/localflavor/sk/sk_districts.py:50 +msgid "Partizanske" +msgstr "Partizanske" + +#: contrib/localflavor/sk/sk_districts.py:51 +msgid "Pezinok" +msgstr "Pezinok" + +#: contrib/localflavor/sk/sk_districts.py:52 +msgid "Piestany" +msgstr "Piestany" + +#: contrib/localflavor/sk/sk_districts.py:53 +msgid "Poltar" +msgstr "Poltar" + +#: contrib/localflavor/sk/sk_districts.py:54 +msgid "Poprad" +msgstr "Poprad" + +#: contrib/localflavor/sk/sk_districts.py:55 +msgid "Povazska Bystrica" +msgstr "Povazska Bystrica" + +#: contrib/localflavor/sk/sk_districts.py:56 +msgid "Presov" +msgstr "Presov" + +#: contrib/localflavor/sk/sk_districts.py:57 +msgid "Prievidza" +msgstr "Prievidza" + +#: contrib/localflavor/sk/sk_districts.py:58 +msgid "Puchov" +msgstr "Puchov" + +#: contrib/localflavor/sk/sk_districts.py:59 +msgid "Revuca" +msgstr "Revuca" + +#: contrib/localflavor/sk/sk_districts.py:60 +msgid "Rimavska Sobota" +msgstr "Rimavska Sobota" + +#: contrib/localflavor/sk/sk_districts.py:61 +msgid "Roznava" +msgstr "Roznava" + +#: contrib/localflavor/sk/sk_districts.py:62 +msgid "Ruzomberok" +msgstr "Ruzomberok" + +#: contrib/localflavor/sk/sk_districts.py:63 +msgid "Sabinov" +msgstr "Sabinov" + +#: contrib/localflavor/sk/sk_districts.py:64 +msgid "Senec" +msgstr "Senec" + +#: contrib/localflavor/sk/sk_districts.py:65 +msgid "Senica" +msgstr "Senica" + +#: contrib/localflavor/sk/sk_districts.py:66 +msgid "Skalica" +msgstr "Skalica" + +#: contrib/localflavor/sk/sk_districts.py:67 +msgid "Snina" +msgstr "Snina" + +#: contrib/localflavor/sk/sk_districts.py:68 +msgid "Sobrance" +msgstr "Sobrance" + +#: contrib/localflavor/sk/sk_districts.py:69 +msgid "Spisska Nova Ves" +msgstr "Spisska Nova Ves" + +#: contrib/localflavor/sk/sk_districts.py:70 +msgid "Stara Lubovna" +msgstr "Stara Lubovna" + +#: contrib/localflavor/sk/sk_districts.py:71 +msgid "Stropkov" +msgstr "Stropkov" + +#: contrib/localflavor/sk/sk_districts.py:72 +msgid "Svidnik" +msgstr "Svidnik" + +#: contrib/localflavor/sk/sk_districts.py:73 +msgid "Sala" +msgstr "Sala" + +#: contrib/localflavor/sk/sk_districts.py:74 +msgid "Topolcany" +msgstr "Topolcany" + +#: contrib/localflavor/sk/sk_districts.py:75 +msgid "Trebisov" +msgstr "Trebisov" + +#: contrib/localflavor/sk/sk_districts.py:76 +msgid "Trencin" +msgstr "Trencin" + +#: contrib/localflavor/sk/sk_districts.py:77 +msgid "Trnava" +msgstr "Trnava" + +#: contrib/localflavor/sk/sk_districts.py:78 +msgid "Turcianske Teplice" +msgstr "Turcianske Teplice" + +#: contrib/localflavor/sk/sk_districts.py:79 +msgid "Tvrdosin" +msgstr "Tvrdosin" + +#: contrib/localflavor/sk/sk_districts.py:80 +msgid "Velky Krtis" +msgstr "Velky Krtis" + +#: contrib/localflavor/sk/sk_districts.py:81 +msgid "Vranov nad Toplou" +msgstr "Vranov nad Toplou" + +#: contrib/localflavor/sk/sk_districts.py:82 +msgid "Zlate Moravce" +msgstr "Zlate Moravce" + +#: contrib/localflavor/sk/sk_districts.py:83 +msgid "Zvolen" +msgstr "Zvolen" + +#: contrib/localflavor/sk/sk_districts.py:84 +msgid "Zarnovica" +msgstr "Zarnovica" + +#: contrib/localflavor/sk/sk_districts.py:85 +msgid "Ziar nad Hronom" +msgstr "Ziar nad Hronom" + +#: contrib/localflavor/sk/sk_districts.py:86 +msgid "Zilina" +msgstr "Zilina" + +#: contrib/localflavor/sk/sk_regions.py:8 +msgid "Banska Bystrica region" +msgstr "Banská Bystrica regioon" + +#: contrib/localflavor/sk/sk_regions.py:9 +msgid "Bratislava region" +msgstr "Bratislava regioon" + +#: contrib/localflavor/sk/sk_regions.py:10 +msgid "Kosice region" +msgstr "Košice regioon" + +#: contrib/localflavor/sk/sk_regions.py:11 +msgid "Nitra region" +msgstr "Nitra regioon" + +#: contrib/localflavor/sk/sk_regions.py:12 +msgid "Presov region" +msgstr "Prešovi regioon" + +#: contrib/localflavor/sk/sk_regions.py:13 +msgid "Trencin region" +msgstr "Trenšíni regioon" + +#: contrib/localflavor/sk/sk_regions.py:14 +msgid "Trnava region" +msgstr "Trnava regioon" + +#: contrib/localflavor/sk/sk_regions.py:15 +msgid "Zilina region" +msgstr "Žilina regioon" + +#: contrib/localflavor/uk/forms.py:21 +msgid "Enter a valid postcode." +msgstr "Sisesta kehtiv postiindeks." + +#: contrib/localflavor/uk/uk_regions.py:11 +msgid "Bedfordshire" +msgstr "Bedfordshire" + +#: contrib/localflavor/uk/uk_regions.py:12 +msgid "Buckinghamshire" +msgstr "Buckinghamshire" + +#: contrib/localflavor/uk/uk_regions.py:14 +msgid "Cheshire" +msgstr "Cheshire" + +#: contrib/localflavor/uk/uk_regions.py:15 +msgid "Cornwall and Isles of Scilly" +msgstr "Cornwall and Isles of Scilly" + +#: contrib/localflavor/uk/uk_regions.py:16 +msgid "Cumbria" +msgstr "Cumbria" + +#: contrib/localflavor/uk/uk_regions.py:17 +msgid "Derbyshire" +msgstr "Derbyshire" + +#: contrib/localflavor/uk/uk_regions.py:18 +msgid "Devon" +msgstr "Devon" + +#: contrib/localflavor/uk/uk_regions.py:19 +msgid "Dorset" +msgstr "Dorset" + +#: contrib/localflavor/uk/uk_regions.py:20 +msgid "Durham" +msgstr "Durham" + +#: contrib/localflavor/uk/uk_regions.py:21 +msgid "East Sussex" +msgstr "East Sussex" + +#: contrib/localflavor/uk/uk_regions.py:22 +msgid "Essex" +msgstr "Essex" + +#: contrib/localflavor/uk/uk_regions.py:23 +msgid "Gloucestershire" +msgstr "Gloucestershire" + +#: contrib/localflavor/uk/uk_regions.py:24 +msgid "Greater London" +msgstr "Suur-London" + +#: contrib/localflavor/uk/uk_regions.py:25 +msgid "Greater Manchester" +msgstr "Suur-Manchester" + +#: contrib/localflavor/uk/uk_regions.py:26 +msgid "Hampshire" +msgstr "Hampshire" + +#: contrib/localflavor/uk/uk_regions.py:27 +msgid "Hertfordshire" +msgstr "Hertfordshire" + +#: contrib/localflavor/uk/uk_regions.py:28 +msgid "Kent" +msgstr "Kent" + +#: contrib/localflavor/uk/uk_regions.py:29 +msgid "Lancashire" +msgstr "Lancashire" + +#: contrib/localflavor/uk/uk_regions.py:30 +msgid "Leicestershire" +msgstr "Leicestershire" + +#: contrib/localflavor/uk/uk_regions.py:31 +msgid "Lincolnshire" +msgstr "Lincolnshire" + +#: contrib/localflavor/uk/uk_regions.py:32 +msgid "Merseyside" +msgstr "Merseyside" + +#: contrib/localflavor/uk/uk_regions.py:33 +msgid "Norfolk" +msgstr "Norfolk" + +#: contrib/localflavor/uk/uk_regions.py:34 +msgid "North Yorkshire" +msgstr "North Yorkshire" + +#: contrib/localflavor/uk/uk_regions.py:35 +msgid "Northamptonshire" +msgstr "Northamptonshire" + +#: contrib/localflavor/uk/uk_regions.py:36 +msgid "Northumberland" +msgstr "Northumberland" + +#: contrib/localflavor/uk/uk_regions.py:37 +msgid "Nottinghamshire" +msgstr "Nottinghamshire" + +#: contrib/localflavor/uk/uk_regions.py:38 +msgid "Oxfordshire" +msgstr "Oxfordshire" + +#: contrib/localflavor/uk/uk_regions.py:39 +msgid "Shropshire" +msgstr "Shropshire" + +#: contrib/localflavor/uk/uk_regions.py:40 +msgid "Somerset" +msgstr "Somerset" + +#: contrib/localflavor/uk/uk_regions.py:41 +msgid "South Yorkshire" +msgstr "Lõuna-Yorkshire" + +#: contrib/localflavor/uk/uk_regions.py:42 +msgid "Staffordshire" +msgstr "Staffordshire" + +#: contrib/localflavor/uk/uk_regions.py:43 +msgid "Suffolk" +msgstr "Suffolk" + +#: contrib/localflavor/uk/uk_regions.py:44 +msgid "Surrey" +msgstr "Surrey" + +#: contrib/localflavor/uk/uk_regions.py:45 +msgid "Tyne and Wear" +msgstr "Tyne ja Wear" + +#: contrib/localflavor/uk/uk_regions.py:46 +msgid "Warwickshire" +msgstr "Warwickshire" + +#: contrib/localflavor/uk/uk_regions.py:47 +msgid "West Midlands" +msgstr "West Midlands" + +#: contrib/localflavor/uk/uk_regions.py:48 +msgid "West Sussex" +msgstr "Lääne-Sussex" + +#: contrib/localflavor/uk/uk_regions.py:49 +msgid "West Yorkshire" +msgstr "Lääne-Yorkshire" + +#: contrib/localflavor/uk/uk_regions.py:50 +msgid "Wiltshire" +msgstr "Wiltshire" + +#: contrib/localflavor/uk/uk_regions.py:51 +msgid "Worcestershire" +msgstr "Worcestershire" + +#: contrib/localflavor/uk/uk_regions.py:55 +msgid "County Antrim" +msgstr "County Antrim" + +#: contrib/localflavor/uk/uk_regions.py:56 +msgid "County Armagh" +msgstr "County Armagh" + +#: contrib/localflavor/uk/uk_regions.py:57 +msgid "County Down" +msgstr "County Down" + +#: contrib/localflavor/uk/uk_regions.py:58 +msgid "County Fermanagh" +msgstr "County Fermanagh" + +#: contrib/localflavor/uk/uk_regions.py:59 +msgid "County Londonderry" +msgstr "County Londonderry" + +#: contrib/localflavor/uk/uk_regions.py:60 +msgid "County Tyrone" +msgstr "County Tyrone" + +#: contrib/localflavor/uk/uk_regions.py:64 +msgid "Clwyd" +msgstr "Clwyd" + +#: contrib/localflavor/uk/uk_regions.py:65 +msgid "Dyfed" +msgstr "Dyfed" + +#: contrib/localflavor/uk/uk_regions.py:66 +msgid "Gwent" +msgstr "Gwent" + +#: contrib/localflavor/uk/uk_regions.py:67 +msgid "Gwynedd" +msgstr "Gwynedd" + +#: contrib/localflavor/uk/uk_regions.py:68 +msgid "Mid Glamorgan" +msgstr "Mid Glamorgan" + +#: contrib/localflavor/uk/uk_regions.py:69 +msgid "Powys" +msgstr "Powys" + +#: contrib/localflavor/uk/uk_regions.py:70 +msgid "South Glamorgan" +msgstr "South Glamorgan" + +#: contrib/localflavor/uk/uk_regions.py:71 +msgid "West Glamorgan" +msgstr "Lääne-Glamorgan" + +#: contrib/localflavor/uk/uk_regions.py:75 +msgid "Borders" +msgstr "Piirid" + +#: contrib/localflavor/uk/uk_regions.py:76 +msgid "Central Scotland" +msgstr "Kesk-Šotimaa" + +#: contrib/localflavor/uk/uk_regions.py:77 +msgid "Dumfries and Galloway" +msgstr "Dumfries and Galloway" + +#: contrib/localflavor/uk/uk_regions.py:78 +msgid "Fife" +msgstr "Fife" + +#: contrib/localflavor/uk/uk_regions.py:79 +msgid "Grampian" +msgstr "Grampian" + +#: contrib/localflavor/uk/uk_regions.py:80 +msgid "Highland" +msgstr "Highland" + +#: contrib/localflavor/uk/uk_regions.py:81 +msgid "Lothian" +msgstr "Lothian" + +#: contrib/localflavor/uk/uk_regions.py:82 +msgid "Orkney Islands" +msgstr "Orkney saared" + +#: contrib/localflavor/uk/uk_regions.py:83 +msgid "Shetland Islands" +msgstr "Shetlandi saared" + +#: contrib/localflavor/uk/uk_regions.py:84 +msgid "Strathclyde" +msgstr "Strathclyde" + +#: contrib/localflavor/uk/uk_regions.py:85 +msgid "Tayside" +msgstr "Tayside" + +#: contrib/localflavor/uk/uk_regions.py:86 +msgid "Western Isles" +msgstr "Western Isles" + +#: contrib/localflavor/uk/uk_regions.py:90 +msgid "England" +msgstr "Inglismaa" + +#: contrib/localflavor/uk/uk_regions.py:91 +msgid "Northern Ireland" +msgstr "Põhja-Iirimaa" + +#: contrib/localflavor/uk/uk_regions.py:92 +msgid "Scotland" +msgstr "Šotimaa" + +#: contrib/localflavor/uk/uk_regions.py:93 +msgid "Wales" +msgstr "Wales" + +#: contrib/localflavor/us/forms.py:16 +msgid "Enter a zip code in the format XXXXX or XXXXX-XXXX." +msgstr "Sisesta postiindeks kujul XXXXX või XXXXX-XXXX." + +#: contrib/localflavor/us/forms.py:54 +msgid "Enter a valid U.S. Social Security number in XXX-XX-XXXX format." +msgstr "Sisesta kehtiv U.S. Social Security number formaadis XXX-XX-XXXX." + +#: contrib/localflavor/za/forms.py:20 +msgid "Enter a valid South African ID number" +msgstr "Sisesta kehtiv Lõuna-Aafrika ID-number" + +#: contrib/localflavor/za/forms.py:54 +msgid "Enter a valid South African postal code" +msgstr "Sisesta kehtiv Lõuna-Aafrika postiindeks" + +#: contrib/localflavor/za/za_provinces.py:4 +msgid "Eastern Cape" +msgstr "Eastern Cape" + +#: contrib/localflavor/za/za_provinces.py:5 +msgid "Free State" +msgstr "Free State" + +#: contrib/localflavor/za/za_provinces.py:6 +msgid "Gauteng" +msgstr "Gauteng" + +#: contrib/localflavor/za/za_provinces.py:7 +msgid "KwaZulu-Natal" +msgstr "KwaZulu-Natal" + +#: contrib/localflavor/za/za_provinces.py:8 +msgid "Limpopo" +msgstr "Limpopo" + +#: contrib/localflavor/za/za_provinces.py:9 +msgid "Mpumalanga" +msgstr "Mpumalanga" + +#: contrib/localflavor/za/za_provinces.py:10 +msgid "Northern Cape" +msgstr "Northern Cape" + +#: contrib/localflavor/za/za_provinces.py:11 +msgid "North West" +msgstr "North West" + +#: contrib/localflavor/za/za_provinces.py:12 +msgid "Western Cape" +msgstr "Western Cape" + +#: contrib/redirects/models.py:7 +msgid "redirect from" +msgstr "ümbersuunatav asukoht" + +#: contrib/redirects/models.py:8 +msgid "" +"This should be an absolute path, excluding the domain name. Example: '/" +"events/search/'." +msgstr "" +"See peaks olema absoluutne asukoht, v.a. domeeninimi. Näide: '/events/" +"search/'." + +#: contrib/redirects/models.py:9 +msgid "redirect to" +msgstr "suuna aadressile" + +#: contrib/redirects/models.py:10 +msgid "" +"This can be either an absolute path (as above) or a full URL starting with " +"'http://'." +msgstr "" +"See võib olla kas absoluutne asukoht (nagu ülemine) või täielik URL algusega " +"'http://'." + +#: contrib/redirects/models.py:13 +msgid "redirect" +msgstr "suunamine" + +#: contrib/redirects/models.py:14 +msgid "redirects" +msgstr "suunamised" + +#: contrib/sessions/models.py:41 +msgid "session key" +msgstr "sessioonivõti" + +#: contrib/sessions/models.py:42 +msgid "session data" +msgstr "sessiooni andmed" + +#: contrib/sessions/models.py:43 +msgid "expire date" +msgstr "kehtivusaja lõpp" + +#: contrib/sessions/models.py:48 +msgid "session" +msgstr "sessioon" + +#: contrib/sessions/models.py:49 +msgid "sessions" +msgstr "sessioonid" + +#: contrib/sites/models.py:32 +msgid "domain name" +msgstr "domeeninimi" + +#: contrib/sites/models.py:33 +msgid "display name" +msgstr "hüüdnimi" + +#: contrib/sites/models.py:37 +msgid "site" +msgstr "sait" + +#: contrib/sites/models.py:38 +msgid "sites" +msgstr "saidid" + +#: core/validators.py:72 +msgid "This value must contain only letters, numbers and underscores." +msgstr "See väärtus võib sisaldada ainult tähti, numbreid ja alakriipse." + +#: core/validators.py:76 +msgid "" +"This value must contain only letters, numbers, underscores, dashes or " +"slashes." +msgstr "" +"See väärtus võib sisaldada ainult tähti, numbreid, alakriipse, mõttekriipse " +"või kaldkriipse." + +#: core/validators.py:80 +msgid "This value must contain only letters, numbers, underscores or hyphens." +msgstr "" +"See väärtus võib sisaldada ainult tähti, nubmreid, alakriipse ja sidekriipse." + +#: core/validators.py:84 +msgid "Uppercase letters are not allowed here." +msgstr "Suured tähed ei ole siin lubatud." + +#: core/validators.py:88 +msgid "Lowercase letters are not allowed here." +msgstr "Väiksed tähed ei ole siin lubatud." + +#: core/validators.py:95 +msgid "Enter only digits separated by commas." +msgstr "Sisestage ainult komaga eraldatud numbreid." + +#: core/validators.py:107 +msgid "Enter valid e-mail addresses separated by commas." +msgstr "Sisestage korrektseid komaga eraldatud e-posti aadresseid." + +#: core/validators.py:111 +msgid "Please enter a valid IP address." +msgstr "Palun sisestage korrektne IP aadress." + +#: core/validators.py:115 +msgid "Empty values are not allowed here." +msgstr "Tühjad väärtused ei ole siin lubatud." + +#: core/validators.py:119 +msgid "Non-numeric characters aren't allowed here." +msgstr "Mittenumbrilised märgid ei ole siin lubatud." + +#: core/validators.py:123 +msgid "This value can't be comprised solely of digits." +msgstr "See väärtus ei tohi sisaldada ainult numbreid." + +#: core/validators.py:128 newforms/fields.py:152 +msgid "Enter a whole number." +msgstr "Sisestage täisarv." + +#: core/validators.py:132 +msgid "Only alphabetical characters are allowed here." +msgstr "Siin on lubatud ainult tähestiku tähed." + +#: core/validators.py:147 +msgid "Year must be 1900 or later." +msgstr "Aasta peab olema 1900 või hiljem." + +#: core/validators.py:151 +#, python-format +msgid "Invalid date: %s" +msgstr "Ebakorrektne kuupäev: %s" + +#: core/validators.py:156 db/models/fields/__init__.py:548 +msgid "Enter a valid date in YYYY-MM-DD format." +msgstr "Sisestage korrektne kuupäev formaadis AAAA-KK-PP." + +#: core/validators.py:161 +msgid "Enter a valid time in HH:MM format." +msgstr "Sisestage korrektne kellaaeg formaadis TT:MM" + +#: core/validators.py:165 db/models/fields/__init__.py:625 +msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format." +msgstr "Sisestage korrektne kuupäev ja kellaaeg formaadis AAAA-KK-PP TT:MM." + +#: core/validators.py:170 newforms/fields.py:403 +msgid "Enter a valid e-mail address." +msgstr "Sisestage korrektne e-posti aadress:" + +#: core/validators.py:182 core/validators.py:474 newforms/fields.py:433 +#: oldforms/__init__.py:687 +msgid "No file was submitted. Check the encoding type on the form." +msgstr "Ühtegi faili ei saadetud. Kontrollige vormi kodeeringutüüpi." + +#: core/validators.py:193 newforms/fields.py:459 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" +"Laadige korrektne pilt. Fail, mille laadisite, ei olnud kas pilt või oli " +"fail vigane." + +#: core/validators.py:200 +#, python-format +msgid "The URL %s does not point to a valid image." +msgstr "URL %s ei viita korrektsele pildile." + +#: core/validators.py:204 +#, python-format +msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid." +msgstr "" +"Telefoninumbrid peavad olema formaadis XXX-XXX-XXXX. \"%s\" on ebakorrektne." + +#: core/validators.py:212 +#, python-format +msgid "The URL %s does not point to a valid QuickTime video." +msgstr "URL %s ei viita korrektsele QuickTime videole." + +#: core/validators.py:216 +msgid "A valid URL is required." +msgstr "Korrektne URL on nõutav." + +#: core/validators.py:230 +#, python-format +msgid "" +"Valid HTML is required. Specific errors are:\n" +"%s" +msgstr "" +"Korrektne HTML on nõutav. Vead on järgnevad:\n" +"%s" + +#: core/validators.py:237 +#, python-format +msgid "Badly formed XML: %s" +msgstr "Vigane XML: %s" + +#: core/validators.py:254 +#, python-format +msgid "Invalid URL: %s" +msgstr "Vigane URL: %s" + +#: core/validators.py:259 core/validators.py:261 +#, python-format +msgid "The URL %s is a broken link." +msgstr "URL %s on katkine." + +#: core/validators.py:267 +msgid "Enter a valid U.S. state abbreviation." +msgstr "Sisestage korrektne USA osariigilühend." + +#: core/validators.py:281 +#, 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] "Jälgige oma keelekasutust. Sõna %s ei ole lubatud." +msgstr[1] "Jälgige oma keelekasutust. Sõnad %s ei ole lubatud." + +#: core/validators.py:288 +#, python-format +msgid "This field must match the '%s' field." +msgstr "See väli peab sobima väljaga '%s'." + +#: core/validators.py:307 +msgid "Please enter something for at least one field." +msgstr "Palun täitke vähemalt üks väli." + +#: core/validators.py:316 core/validators.py:327 +msgid "Please enter both fields or leave them both empty." +msgstr "Palun täitke mõlemad lahtrid või jätke mõlemad tühjaks." + +#: core/validators.py:335 +#, python-format +msgid "This field must be given if %(field)s is %(value)s" +msgstr "See lahter on kohustuslik, kui %(field)s on %(value)s" + +#: core/validators.py:348 +#, python-format +msgid "This field must be given if %(field)s is not %(value)s" +msgstr "See lahter on nõutav, kui %(field)s ei ole %(value)s" + +#: core/validators.py:367 +msgid "Duplicate values are not allowed." +msgstr "Mitte-unikaalsed väärtused ei ole lubatud." + +#: core/validators.py:382 +#, python-format +msgid "This value must be between %(lower)s and %(upper)s." +msgstr "See väärtus peab olema vahemikus %(lower)s kuni %(upper)s." + +#: core/validators.py:384 +#, python-format +msgid "This value must be at least %s." +msgstr "See väärtus peab olema vähemalt %s." + +#: core/validators.py:386 +#, python-format +msgid "This value must be no more than %s." +msgstr "See väärtus ei tohi olla rohkem kui %s." + +#: core/validators.py:427 +#, python-format +msgid "This value must be a power of %s." +msgstr "See väärtus peab jaguma arvuga %s." + +#: core/validators.py:437 +msgid "Please enter a valid decimal number." +msgstr "Palun sisestage korrektne kümnendarv." + +#: core/validators.py:444 +#, python-format +msgid "Please enter a valid decimal number with at most %s total digit." +msgid_plural "" +"Please enter a valid decimal number with at most %s total digits." +msgstr[0] "Palun sisestage %s-kohaline kümnendarv." +msgstr[1] "Palun sisestage %s-kohaline kümnendarv." + +#: core/validators.py:447 +#, python-format +msgid "" +"Please enter a valid decimal number with a whole part of at most %s digit." +msgid_plural "" +"Please enter a valid decimal number with a whole part of at most %s digits." +msgstr[0] "Palun sisestage korrektne kümnendarv, mille täisosa on %s-kohaline" +msgstr[1] "Palun sisestage korrektne kümnendarv, mille täisosa on %s-kohaline" + +#: core/validators.py:450 +#, python-format +msgid "Please enter a valid decimal number with at most %s decimal place." +msgid_plural "" +"Please enter a valid decimal number with at most %s decimal places." +msgstr[0] "" +"Palun sisestage korrektne kümnendarv, millel on maksimaalselt %s komakoht." +msgstr[1] "" +"Palun sisestage korrektne kümnendarv, millel on maksimaalselt %s komakohta." + +#: core/validators.py:458 +msgid "Please enter a valid floating point number." +msgstr "Palun sisestage korrektne murdarv." + +#: core/validators.py:467 +#, python-format +msgid "Make sure your uploaded file is at least %s bytes big." +msgstr "Veenduge, et üleslaetud fail on vähemalt %s baiti suur." + +#: core/validators.py:468 +#, python-format +msgid "Make sure your uploaded file is at most %s bytes big." +msgstr "Veenduge, et üleslaetud fail ei ole suurem kui %s baiti." + +#: core/validators.py:485 +msgid "The format for this field is wrong." +msgstr "Selle lahtri formaat on ebakorrektne." + +#: core/validators.py:500 +msgid "This field is invalid." +msgstr "See lahter on ebakorrektne." + +#: core/validators.py:536 +#, python-format +msgid "Could not retrieve anything from %s." +msgstr "Ei õnnestunud leida midagi aadressilt %s." + +#: core/validators.py:539 +#, python-format +msgid "" +"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'." +msgstr "URL %(url)s tagastas sobimatu Content-Type päise '%(contenttype)s'." + +#: core/validators.py:572 +#, python-format +msgid "" +"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with " +"\"%(start)s\".)" +msgstr "" +"Palun sulgege sulgemata jäänud %(tag)s lipik real %(line)s. (Rea algus: \"%" +"(start)s\".)" + +#: core/validators.py:576 +#, python-format +msgid "" +"Some text starting on line %(line)s is not allowed in that context. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Rida %(line)s sisaldab teksti, mis ei ole selles kontekstis lubatud. (Rea " +"algus: \"%(start)s\".)" + +#: core/validators.py:581 +#, python-format +msgid "" +"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"Real %(line)s on vigane attribute \"%(attr)s\". (Rea algus: \"%(start)s\".)" + +#: core/validators.py:586 +#, python-format +msgid "" +"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%" +"(start)s\".)" +msgstr "" +"Real %(line)s on vigane lipik \"<%(tag)s>\". (Rea algus: \"%(start)s\".)" + +#: core/validators.py:590 +#, python-format +msgid "" +"A tag on line %(line)s is missing one or more required attributes. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Real %(line)s on lipik, millel on puudu üks või enam nõutavatest " +"atribuutidest. (Rea algus: \"%(start)s\".)" + +#: core/validators.py:595 +#, python-format +msgid "" +"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line " +"starts with \"%(start)s\".)" +msgstr "" +"Real %(line)s on atribuut \"%(attr)s\", mille väärtus on vigane. (Rea algus: " +"\"%(start)s\".)" + +#: db/models/manipulators.py:308 +#, python-format +msgid "%(object)s with this %(type)s already exists for the given %(field)s." +msgstr "" +"%(type)s tüüpi %(object)s on juba olemas etteantud väärtustele %(field)s." + +#: db/models/fields/__init__.py:54 +#, python-format +msgid "%(optname)s with this %(fieldname)s already exists." +msgstr "" + +#: db/models/fields/__init__.py:179 db/models/fields/__init__.py:348 +#: db/models/fields/__init__.py:780 db/models/fields/__init__.py:791 +#: newforms/fields.py:46 oldforms/__init__.py:374 +msgid "This field is required." +msgstr "See lahter on nõutav." + +#: db/models/fields/__init__.py:448 +msgid "This value must be an integer." +msgstr "See väärtus peab olema täisarv." + +#: db/models/fields/__init__.py:487 +msgid "This value must be either True or False." +msgstr "See väärtus peab olema kas tõene või väär" + +#: db/models/fields/__init__.py:511 +msgid "This field cannot be null." +msgstr "See lahter ei tohi olla tühi." + +#: db/models/fields/__init__.py:689 +msgid "This value must be a decimal number." +msgstr "See väärtus peab olema kümnendarv." + +#: db/models/fields/__init__.py:800 +msgid "Enter a valid filename." +msgstr "Sisestage korrektne failinimi." + +#: db/models/fields/__init__.py:981 +msgid "This value must be either None, True or False." +msgstr "See väärtus peab olema kas tühi, tõene või väär." + +#: db/models/fields/related.py:94 +#, python-format +msgid "Please enter a valid %s." +msgstr "Palun sisestage korrektne %s." + +#: db/models/fields/related.py:721 +msgid "Separate multiple IDs with commas." +msgstr "Eraldage mitu ID-d komaga." + +#: db/models/fields/related.py:723 +msgid "" +"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgstr "Et valida mitu, hoidke all \"Control\"-nuppu (Maci puhul \"Command\")." + +#: db/models/fields/related.py:770 +#, 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] "Palun sisestage korrektne %(self)s ID. Väärtus %(value)r on vigane." +msgstr[1] "" +"Palun sisestage korrektne %(self)s ID. Väärtused %(value)r on vigased." + +#: newforms/fields.py:47 +msgid "Enter a valid value." +msgstr "Sisestage korrektne väärtus." + +#: newforms/fields.py:124 +#, python-format +msgid "Ensure this value has at most %(max)d characters (it has %(length)d)." +msgstr "" +"Veenduge, et see väärtus sisaldab kõige rohkem %(max)d tähemärki (hetkel on %" +"(length)d)." + +#: newforms/fields.py:125 +#, python-format +msgid "Ensure this value has at least %(min)d characters (it has %(length)d)." +msgstr "" +"Veenduge, et see väärtus sisaldab vähemalt %(min)d märki (hetkel on %(length)" +"d)." + +#: newforms/fields.py:153 newforms/fields.py:182 newforms/fields.py:211 +#, python-format +msgid "Ensure this value is less than or equal to %s." +msgstr "Veenduge, et see väärtus on väiksem või võrdne kui %s." + +#: newforms/fields.py:154 newforms/fields.py:183 newforms/fields.py:212 +#, python-format +msgid "Ensure this value is greater than or equal to %s." +msgstr "Veenduge, et see väärtus on suurem või võrdne kui %s." + +#: newforms/fields.py:181 newforms/fields.py:210 +msgid "Enter a number." +msgstr "Sisestage arv." + +#: newforms/fields.py:213 +#, python-format +msgid "Ensure that there are no more than %s digits in total." +msgstr "Veenduge, et kogu numbrikohtade arv ei ületaks %s." + +#: newforms/fields.py:214 +#, python-format +msgid "Ensure that there are no more than %s decimal places." +msgstr "Veenduge, et komakohtade arv ei ületaks %s." + +#: newforms/fields.py:215 +#, python-format +msgid "Ensure that there are no more than %s digits before the decimal point." +msgstr "Veenduge, et komast vasakul olevaid numbreid ei oleks rohkem kui %s." + +#: newforms/fields.py:263 newforms/fields.py:751 +msgid "Enter a valid date." +msgstr "Sisestage korrektne kuupäev." + +#: newforms/fields.py:296 newforms/fields.py:752 +msgid "Enter a valid time." +msgstr "Sisestage korrektne kellaaeg." + +#: newforms/fields.py:335 +msgid "Enter a valid date/time." +msgstr "Sisestage korrektne kuupäev ja kellaaeg." + +#: newforms/fields.py:434 +msgid "No file was submitted." +msgstr "Ühtegi faili ei saadetud." + +#: newforms/fields.py:435 oldforms/__init__.py:689 +msgid "The submitted file is empty." +msgstr "Saadetud fail on tühi." + +#: newforms/fields.py:497 +msgid "Enter a valid URL." +msgstr "Sisestage korrektne URL." + +#: newforms/fields.py:498 +msgid "This URL appears to be a broken link." +msgstr "See URL näib olevat katkine." + +#: newforms/fields.py:560 newforms/models.py:299 +msgid "Select a valid choice. That choice is not one of the available choices." +msgstr "Valige korrektne väärtus. Valitud väärtus ei ole valitav." + +#: newforms/fields.py:599 +#, python-format +msgid "Select a valid choice. %(value)s is not one of the available choices." +msgstr "Valige korrektne väärtus. %(value)s ei ole valitav." + +#: newforms/fields.py:600 newforms/fields.py:662 newforms/models.py:371 +msgid "Enter a list of values." +msgstr "Sisestage väärtuste nimekiri." + +#: newforms/fields.py:780 +msgid "Enter a valid IPv4 address." +msgstr "Sisestage korrektne IPv4 aadress." + +#: newforms/models.py:372 +#, python-format +msgid "Select a valid choice. %s is not one of the available choices." +msgstr "Valige korrektne väärtus. %s ei ole valitav." + +#: oldforms/__init__.py:409 +#, python-format +msgid "Ensure your text is less than %s character." +msgid_plural "Ensure your text is less than %s characters." +msgstr[0] "Veenduge, et tekst on alla %s tähemärgi." +msgstr[1] "Veenduge, et tekst on alla %s tähemärgi." + +#: oldforms/__init__.py:414 +msgid "Line breaks are not allowed here." +msgstr "Reavahetused ei ole lubatud." + +#: oldforms/__init__.py:512 oldforms/__init__.py:586 oldforms/__init__.py:625 +#, python-format +msgid "Select a valid choice; '%(data)s' is not in %(choices)s." +msgstr "Valige korrektne väärtus; '%(data)s' ei kuulu valikutesse %(choices)s." + +#: oldforms/__init__.py:745 +msgid "Enter a whole number between -32,768 and 32,767." +msgstr "Sisestage täisarv vahemikus -32 768 kuni 32 767." + +#: oldforms/__init__.py:755 +msgid "Enter a positive number." +msgstr "Sisestage postiivne arv." + +#: oldforms/__init__.py:765 +msgid "Enter a whole number between 0 and 32,767." +msgstr "Sisestage täisarv vahemikus 0 kuni 32 767." + +#: template/defaultfilters.py:698 +msgid "yes,no,maybe" +msgstr "jah,ei,võib-olla" + +#: template/defaultfilters.py:729 +#, python-format +msgid "%(size)d byte" +msgid_plural "%(size)d bytes" +msgstr[0] "%(size)d bait" +msgstr[1] "%(size)d baiti" + +#: template/defaultfilters.py:731 +#, python-format +msgid "%.1f KB" +msgstr "%.1f KB" + +#: template/defaultfilters.py:733 +#, python-format +msgid "%.1f MB" +msgstr "%.1f MB" + +#: template/defaultfilters.py:734 +#, python-format +msgid "%.1f GB" +msgstr "%.1f GB" + +#: utils/dateformat.py:41 +msgid "p.m." +msgstr "p.l." + +#: utils/dateformat.py:42 +msgid "a.m." +msgstr "e.l." + +#: utils/dateformat.py:47 +msgid "PM" +msgstr "PL" + +#: utils/dateformat.py:48 +msgid "AM" +msgstr "EL" + +#: utils/dateformat.py:97 +msgid "midnight" +msgstr "südaöö" + +#: utils/dateformat.py:99 +msgid "noon" +msgstr "keskpäev" + +#: utils/dates.py:6 +msgid "Monday" +msgstr "esmaspäev" + +#: utils/dates.py:6 +msgid "Tuesday" +msgstr "teisipäev" + +#: utils/dates.py:6 +msgid "Wednesday" +msgstr "kolmapäev" + +#: utils/dates.py:6 +msgid "Thursday" +msgstr "neljapäev" + +#: utils/dates.py:6 +msgid "Friday" +msgstr "reede" + +#: utils/dates.py:7 +msgid "Saturday" +msgstr "laupäev" + +#: utils/dates.py:7 +msgid "Sunday" +msgstr "pühapäev" + +#: utils/dates.py:10 +msgid "Mon" +msgstr "esmasp." + +#: utils/dates.py:10 +msgid "Tue" +msgstr "teisip." + +#: utils/dates.py:10 +msgid "Wed" +msgstr "kolmap." + +#: utils/dates.py:10 +msgid "Thu" +msgstr "neljap." + +#: utils/dates.py:10 +msgid "Fri" +msgstr "reede" + +#: utils/dates.py:11 +msgid "Sat" +msgstr "laup." + +#: utils/dates.py:11 +msgid "Sun" +msgstr "pühap." + +#: utils/dates.py:18 +msgid "January" +msgstr "jaanuar" + +#: utils/dates.py:18 +msgid "February" +msgstr "veebruar" + +#: utils/dates.py:18 utils/dates.py:31 +msgid "March" +msgstr "märts" + +#: utils/dates.py:18 utils/dates.py:31 +msgid "April" +msgstr "aprill" + +#: utils/dates.py:18 utils/dates.py:31 +msgid "May" +msgstr "mai" + +#: utils/dates.py:18 utils/dates.py:31 +msgid "June" +msgstr "juuni" + +#: utils/dates.py:19 utils/dates.py:31 +msgid "July" +msgstr "juuli" + +#: utils/dates.py:19 +msgid "August" +msgstr "august" + +#: utils/dates.py:19 +msgid "September" +msgstr "september" + +#: utils/dates.py:19 +msgid "October" +msgstr "oktoober" + +#: utils/dates.py:19 +msgid "November" +msgstr "november" + +#: utils/dates.py:20 +msgid "December" +msgstr "detsember" + +#: utils/dates.py:23 +msgid "jan" +msgstr "jaan" + +#: utils/dates.py:23 +msgid "feb" +msgstr "veeb" + +#: utils/dates.py:23 +msgid "mar" +msgstr "märts" + +#: utils/dates.py:23 +msgid "apr" +msgstr "apr" + +#: utils/dates.py:23 +msgid "may" +msgstr "mai" + +#: utils/dates.py:23 +msgid "jun" +msgstr "jun" + +#: utils/dates.py:24 +msgid "jul" +msgstr "jul" + +#: utils/dates.py:24 +msgid "aug" +msgstr "aug" + +#: utils/dates.py:24 +msgid "sep" +msgstr "sept" + +#: utils/dates.py:24 +msgid "oct" +msgstr "okt" + +#: utils/dates.py:24 +msgid "nov" +msgstr "nov" + +#: utils/dates.py:24 +msgid "dec" +msgstr "dets" + +#: utils/dates.py:31 +msgid "Jan." +msgstr "Jaan." + +#: utils/dates.py:31 +msgid "Feb." +msgstr "Veeb." + +#: utils/dates.py:32 +msgid "Aug." +msgstr "Aug." + +#: utils/dates.py:32 +msgid "Sept." +msgstr "Sept." + +#: utils/dates.py:32 +msgid "Oct." +msgstr "Okt." + +#: utils/dates.py:32 +msgid "Nov." +msgstr "Nov." + +#: utils/dates.py:32 +msgid "Dec." +msgstr "Dets." + +#: utils/text.py:127 +msgid "or" +msgstr "või" + +#: utils/timesince.py:21 +msgid "year" +msgid_plural "years" +msgstr[0] "aasta" +msgstr[1] "aastat" + +#: utils/timesince.py:22 +msgid "month" +msgid_plural "months" +msgstr[0] "kuu" +msgstr[1] "kuud" + +#: utils/timesince.py:23 +msgid "week" +msgid_plural "weeks" +msgstr[0] "nädal" +msgstr[1] "nädalat" + +#: utils/timesince.py:24 +msgid "day" +msgid_plural "days" +msgstr[0] "päev" +msgstr[1] "päeva" + +#: utils/timesince.py:25 +msgid "hour" +msgid_plural "hours" +msgstr[0] "tund" +msgstr[1] "tundi" + +#: utils/timesince.py:26 +msgid "minute" +msgid_plural "minutes" +msgstr[0] "minut" +msgstr[1] "minutit" + +#: utils/timesince.py:46 +msgid "minutes" +msgstr "minutit" + +#: utils/timesince.py:51 +#, python-format +msgid "%(number)d %(type)s" +msgstr "%(number)d %(type)s" + +#: utils/timesince.py:57 +#, python-format +msgid ", %(number)d %(type)s" +msgstr ", %(number)d %(type)s" + +#: utils/translation/trans_real.py:403 +msgid "DATE_FORMAT" +msgstr "N j, Y" + +#: utils/translation/trans_real.py:404 +msgid "DATETIME_FORMAT" +msgstr "j. N Y, H:i" + +#: utils/translation/trans_real.py:405 +msgid "TIME_FORMAT" +msgstr "H:i" + +#: utils/translation/trans_real.py:421 +msgid "YEAR_MONTH_FORMAT" +msgstr "F Y" + +#: utils/translation/trans_real.py:422 +msgid "MONTH_DAY_FORMAT" +msgstr "j. F" + +#: views/generic/create_update.py:43 +#, python-format +msgid "The %(verbose_name)s was created successfully." +msgstr "%(verbose_name)s edukalt loodud." + +#: views/generic/create_update.py:117 +#, python-format +msgid "The %(verbose_name)s was updated successfully." +msgstr "%(verbose_name)s edukalt muudetud." + +#: views/generic/create_update.py:184 +#, python-format +msgid "The %(verbose_name)s was deleted." +msgstr "%(verbose_name)s kustutatud." diff --git a/django/conf/locale/et/LC_MESSAGES/djangojs.mo b/django/conf/locale/et/LC_MESSAGES/djangojs.mo new file mode 100644 index 0000000000000000000000000000000000000000..c3cd06ee57b52caea1f565c3c2783c392dddee1d GIT binary patch literal 1603 zcmZXSzi%8x6vqb$5DWwoeikWS6Okxd=WJr@I7}2{pB2YG=XAGm6j4Ou-N)YeW_M1r zvxbvWr=p>tOKEDVq(U^;@)saP7a<`E8jz^q`}P(h%xK?y-psro^Jd>q=T3d4Fy4in zhx`b+0D1TfCXCjzO1%IsfzN?$@D*?kJPmF)=L7IntnY#gUUqKS7Brn*^Kz#s3P}2Csq=HwPt72}<7k;1D%D0OdYEz)Ad` zV0sz+1r+-~8vfPrG=ho!*@ovq$^RY*6SV^3Qyom7fY(8Z^AME0UxRY*Z@?G9$DsIs z2g)0N-<&@IyIB7U;#13T61G9fa}AVVAbaxOGTwy9-6W30lsuAK#u>=l5XpIRywz;H z4!+UolH(l+o=2T)_VCo|HOSd!E%nG-{b#I_Ud$KOdYY>BBWCxND}@|296N%&%UiFA=tVofq8H5|cpSfS7<^<0g(;!>7(I4$N{JgR)X zwdIYR40WhH6cxMqoICFk=Ps9l>w~^`he#Z4r_nz9(zv2Sn}@o{+<+&}hp1O(CXGI> zvNDQYhZg#`;%LLO4ls>2b>I#yw_5F}wHmdSY3YN`)#b~r_ggI(Mgu-F67q!I(yG|4 ztXyuvb75DPA&R{&N~?qO9qM{BrgdvEulf3|!pM{n<9C_yJss|4IsSf>xcnNNi>%Ta zM=|UCpPNT!sa?=oT9;8Tu4m3=mNW0FNx4{i_O^T7rzI~fwiY&A5xBrzrV|tu`15dO zVzntg#1GNFZO2ZoTYE{%TGW@?~$HATK*-*}#c8AOH?D6ce5@j+w<|EbjxMQWdoNJqE z)u%2xcZc?9K)WhtCKPDK7pwFV9pbij_Gp6A_h!ciHTF@guH#U*%yl_eV@7w()g5Q^ f#$b=_VWSS1Q>I;A&94y8jti}B;B8rTjb-&Wm#c}D literal 0 HcmV?d00001 diff --git a/django/conf/locale/et/LC_MESSAGES/djangojs.po b/django/conf/locale/et/LC_MESSAGES/djangojs.po new file mode 100644 index 0000000000..604eaa004a --- /dev/null +++ b/django/conf/locale/et/LC_MESSAGES/djangojs.po @@ -0,0 +1,115 @@ +# Estonian translation for the Django Project. +# Copyright (C) 2008, Django Project +# This file is distributed under the same license as the django package. +msgid "" +msgstr "" +"Project-Id-Version: Django" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2008-06-02 19:42+0300\n" +"PO-Revision-Date: 2008-06-16 19:55+0200\n" +"Last-Translator: Erik Allik \n" +"Language-Team: Django-i18n \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 "Saadaval %s" + +#: contrib/admin/media/js/SelectFilter2.js:41 +msgid "Choose all" +msgstr "Vali kõik" + +#: contrib/admin/media/js/SelectFilter2.js:46 +msgid "Add" +msgstr "Lisa" + +#: contrib/admin/media/js/SelectFilter2.js:48 +msgid "Remove" +msgstr "Eemalda" + +#: contrib/admin/media/js/SelectFilter2.js:53 +#, perl-format +msgid "Chosen %s" +msgstr "Valitud %s" + +#: contrib/admin/media/js/SelectFilter2.js:54 +msgid "Select your choice(s) and click " +msgstr "Tee valik(ud) ja klõpsa" + +#: contrib/admin/media/js/SelectFilter2.js:59 +msgid "Clear all" +msgstr "Puhasta kõik" + +#: contrib/admin/media/js/calendar.js:24 +#: contrib/admin/media/js/dateparse.js:32 +msgid "" +"January February March April May June July August September October November " +"December" +msgstr "Jaanuar Veebruar Märts Aprill Mai Juuni Juuli August September Oktoober November Detsember" + +#: contrib/admin/media/js/calendar.js:25 +msgid "S M T W T F S" +msgstr "P E T K N R L" + +#: contrib/admin/media/js/dateparse.js:33 +msgid "Sunday Monday Tuesday Wednesday Thursday Friday Saturday" +msgstr "Pühapäev Esmaspäev Teisipäev Kolmapäev Neljapäev Reede Laupäev" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:34 +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:72 +msgid "Show" +msgstr "Näita" + +#: contrib/admin/media/js/admin/CollapsedFieldsets.js:63 +msgid "Hide" +msgstr "Varja" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:47 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:81 +msgid "Now" +msgstr "Praegu" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:51 +msgid "Clock" +msgstr "Kell" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:78 +msgid "Choose a time" +msgstr "Vali aeg" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:82 +msgid "Midnight" +msgstr "Kesköö" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:83 +msgid "6 a.m." +msgstr "6 hommikul" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:84 +msgid "Noon" +msgstr "Keskpäev" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:88 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:183 +msgid "Cancel" +msgstr "Tühista" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:128 +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:177 +msgid "Today" +msgstr "Täna" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:132 +msgid "Calendar" +msgstr "Kalender" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:175 +msgid "Yesterday" +msgstr "Eile" + +#: contrib/admin/media/js/admin/DateTimeShortcuts.js:179 +msgid "Tomorrow" +msgstr "Homme" diff --git a/django/conf/locale/hr/LC_MESSAGES/django.mo b/django/conf/locale/hr/LC_MESSAGES/django.mo index adbbfa1d7d78bb836cbed22b2b3c61cbd4d85049..0290455bc2725bc3e3a1f5b4cc4e41dd1679b3b6 100644 GIT binary patch delta 11927 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 OHE>2F?~-+MH~cRa)=}pG diff --git a/django/contrib/flatpages/models.py b/django/contrib/flatpages/models.py index 80e8a2775b..2b62d38e07 100644 --- a/django/contrib/flatpages/models.py +++ b/django/contrib/flatpages/models.py @@ -20,7 +20,7 @@ class FlatPage(models.Model): verbose_name = _('flat page') verbose_name_plural = _('flat pages') ordering = ('url',) - + def __unicode__(self): return u"%s -- %s" % (self.url, self.title) @@ -38,7 +38,8 @@ class FlatPageAdmin(admin.ModelAdmin): (None, {'fields': ('url', 'title', 'content', 'sites')}), (_('Advanced options'), {'classes': ('collapse',), 'fields': ('enable_comments', 'registration_required', 'template_name')}), ) - list_filter = ('sites',) + list_display = ('url', 'title') + list_filter = ('sites', 'enable_comments', 'registration_required') search_fields = ('url', 'title') admin.site.register(FlatPage, FlatPageAdmin) diff --git a/django/contrib/formtools/wizard.py b/django/contrib/formtools/wizard.py index a197c3e659..398de742ec 100644 --- a/django/contrib/formtools/wizard.py +++ b/django/contrib/formtools/wizard.py @@ -149,7 +149,7 @@ class FormWizard(object): data = [(bf.name, bf.data or '') for bf in form] + [settings.SECRET_KEY] # Use HIGHEST_PROTOCOL because it's the most efficient. It requires # Python 2.3, but Django requires 2.3 anyway, so that's OK. - pickled = pickle.dumps(data, protocol=pickle.HIGHEST_PROTOCOL) + pickled = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) return md5.new(pickled).hexdigest() def determine_step(self, request, *args, **kwargs): diff --git a/django/contrib/localflavor/it/forms.py b/django/contrib/localflavor/it/forms.py index 88e65734e4..901c86fafa 100644 --- a/django/contrib/localflavor/it/forms.py +++ b/django/contrib/localflavor/it/forms.py @@ -27,7 +27,7 @@ class ITRegionSelect(Select): class ITProvinceSelect(Select): """ - A Select widget that uses a list of IT regions as its choices. + A Select widget that uses a list of IT provinces as its choices. """ def __init__(self, attrs=None): from it_province import PROVINCE_CHOICES diff --git a/django/contrib/redirects/models.py b/django/contrib/redirects/models.py index a35c95f1a8..991423268d 100644 --- a/django/contrib/redirects/models.py +++ b/django/contrib/redirects/models.py @@ -15,7 +15,7 @@ class Redirect(models.Model): db_table = 'django_redirect' unique_together=(('site', 'old_path'),) ordering = ('old_path',) - + def __unicode__(self): return "%s ---> %s" % (self.old_path, self.new_path) @@ -26,6 +26,7 @@ class Redirect(models.Model): from django.contrib import admin class RedirectAdmin(admin.ModelAdmin): + list_display = ('old_path', 'new_path') list_filter = ('site',) search_fields = ('old_path', 'new_path') radio_fields = {'site': admin.VERTICAL} diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py index 2642ae925e..2559d57104 100644 --- a/django/core/management/commands/dumpdata.py +++ b/django/core/management/commands/dumpdata.py @@ -9,6 +9,8 @@ class Command(BaseCommand): help='Specifies the output serialization format for fixtures.'), make_option('--indent', default=None, dest='indent', type='int', help='Specifies the indent level to use when pretty-printing output'), + make_option('-e', '--exclude', dest='exclude',action='append', default=[], + help='App to exclude (use multiple --exclude to exclude multiple apps).'), ) help = 'Output the contents of the database as a fixture of the given format.' args = '[appname ...]' @@ -16,12 +18,15 @@ class Command(BaseCommand): def handle(self, *app_labels, **options): from django.db.models import get_app, get_apps, get_models - format = options.get('format', 'json') - indent = options.get('indent', None) + format = options.get('format','json') + indent = options.get('indent',None) + exclude = options.get('exclude',[]) show_traceback = options.get('traceback', False) + excluded_apps = [get_app(app_label) for app_label in exclude] + if len(app_labels) == 0: - app_list = get_apps() + app_list = [app for app in get_apps() if app not in excluded_apps] else: app_list = [get_app(app_label) for app_label in app_labels] diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py index 193bb26ccf..688cd58e2c 100644 --- a/django/core/management/commands/loaddata.py +++ b/django/core/management/commands/loaddata.py @@ -111,7 +111,10 @@ class Command(BaseCommand): models.add(obj.object.__class__) obj.save() label_found = True - except Exception, e: + except (SystemExit, KeyboardInterrupt): + raise + except Exception: + import traceback fixture.close() transaction.rollback() transaction.leave_transaction_management() @@ -121,7 +124,7 @@ class Command(BaseCommand): else: sys.stderr.write( self.style.ERROR("Problem installing fixture '%s': %s\n" % - (full_path, str(e)))) + (full_path, traceback.format_exc()))) return fixture.close() except: diff --git a/django/core/management/commands/startapp.py b/django/core/management/commands/startapp.py index a3d517dd7a..a81c427142 100644 --- a/django/core/management/commands/startapp.py +++ b/django/core/management/commands/startapp.py @@ -3,8 +3,7 @@ import os from django.core.management.base import copy_helper, CommandError, LabelCommand class Command(LabelCommand): - help = ("Creates a Django app directory structure for the given app name" - " in the current directory.") + help = "Creates a Django app directory structure for the given app name in the current directory." args = "[appname]" label = 'application name' @@ -16,6 +15,7 @@ class Command(LabelCommand): def handle_label(self, app_name, directory=None, **options): if directory is None: directory = os.getcwd() + # Determine the project_name by using the basename of directory, # which should be the full path of the project directory (or the # current directory if no directory was passed). @@ -23,6 +23,15 @@ class Command(LabelCommand): if app_name == project_name: raise CommandError("You cannot create an app with the same name" " (%r) as your project." % app_name) + + # Check that the app_name cannot be imported. + try: + __import__(app_name) + except ImportError: + pass + else: + raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as an app name. Please try another name." % app_name) + copy_helper(self.style, 'app', app_name, directory, project_name) class ProjectCommand(Command): diff --git a/django/core/management/commands/startproject.py b/django/core/management/commands/startproject.py index 867d4fd3da..540a64d2ea 100644 --- a/django/core/management/commands/startproject.py +++ b/django/core/management/commands/startproject.py @@ -3,8 +3,6 @@ import os import re from random import choice -INVALID_PROJECT_NAMES = ('django', 'site', 'test') - class Command(LabelCommand): help = "Creates a Django project directory structure for the given project name in the current directory." args = "[projectname]" @@ -20,13 +18,13 @@ class Command(LabelCommand): # the parent directory. directory = os.getcwd() + # Check that the project_name cannot be imported. try: - proj_name = __import__(project_name) - if proj_name: - raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name) + __import__(project_name) except ImportError: - if project_name in INVALID_PROJECT_NAMES: - raise CommandError("%r contains an invalid project name. Please try another name." % project_name) + pass + else: + raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name) copy_helper(self.style, 'project', project_name, directory) diff --git a/django/core/management/commands/syncdb.py b/django/core/management/commands/syncdb.py index b8b2ff1beb..d87644d049 100644 --- a/django/core/management/commands/syncdb.py +++ b/django/core/management/commands/syncdb.py @@ -34,7 +34,16 @@ class Command(NoArgsCommand): try: __import__(app_name + '.management', {}, {}, ['']) except ImportError, exc: - if not exc.args[0].startswith('No module named management'): + # This is slightly hackish. We want to ignore ImportErrors + # if the "management" module itself is missing -- but we don't + # want to ignore the exception if the management module exists + # but raises an ImportError for some reason. The only way we + # can do this is to check the text of the exception. Note that + # we're a bit broad in how we check the text, because different + # Python implementations may not use the same text. CPython + # uses the text "No module named management". + msg = exc.args[0] + if not msg.startswith('No module named management') or 'management' not in msg: raise cursor = connection.cursor() diff --git a/django/core/urlresolvers.py b/django/core/urlresolvers.py index 2ef3d6f169..2ad63bfc7d 100644 --- a/django/core/urlresolvers.py +++ b/django/core/urlresolvers.py @@ -86,7 +86,7 @@ def reverse_helper(regex, *args, **kwargs): """ # TODO: Handle nested parenthesis in the following regex. result = re.sub(r'\(([^)]+)\)', MatchChecker(args, kwargs), regex.pattern) - return result.replace('^', '').replace('$', '') + return result.replace('^', '').replace('$', '').replace('\\', '') class MatchChecker(object): "Class used in reverse RegexURLPattern lookup." diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py index 063c0ae411..63a6435bdb 100644 --- a/django/db/backends/__init__.py +++ b/django/db/backends/__init__.py @@ -52,6 +52,10 @@ class BaseDatabaseFeatures(object): uses_custom_query_class = False empty_fetchmany_value = [] update_can_self_select = True + supports_usecs = True + time_field_needs_date = False + interprets_empty_strings_as_nulls = False + date_field_supports_time_value = True class BaseDatabaseOperations(object): """ @@ -202,8 +206,8 @@ class BaseDatabaseOperations(object): def query_class(self, DefaultQueryClass): """ - Given the default QuerySet class, returns a custom QuerySet class - to use for this backend. Returns None if a custom QuerySet isn't used. + Given the default Query class, returns a custom Query class + to use for this backend. Returns None if a custom Query isn't used. See also BaseDatabaseFeatures.uses_custom_query_class, which regulates whether this method is called at all. """ @@ -266,3 +270,8 @@ class BaseDatabaseOperations(object): tablespaces. """ return None + + def prep_for_like_query(self, x): + """Prepares a value for use in a LIKE query.""" + from django.utils.encoding import smart_unicode + return smart_unicode(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_") diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index da57ecbe47..23735a023b 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -64,6 +64,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): inline_fk_references = False empty_fetchmany_value = () update_can_self_select = False + supports_usecs = False class DatabaseOperations(BaseDatabaseOperations): def date_extract_sql(self, lookup_type, field_name): diff --git a/django/db/backends/mysql_old/base.py b/django/db/backends/mysql_old/base.py index 0ae114d176..e57aee6a04 100644 --- a/django/db/backends/mysql_old/base.py +++ b/django/db/backends/mysql_old/base.py @@ -68,6 +68,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): inline_fk_references = False empty_fetchmany_value = () update_can_self_select = False + supports_usecs = False class DatabaseOperations(BaseDatabaseOperations): def date_extract_sql(self, lookup_type, field_name): diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 3635acdf2a..a1a9fb1c73 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -31,6 +31,9 @@ class DatabaseFeatures(BaseDatabaseFeatures): supports_tablespaces = True uses_case_insensitive_names = True uses_custom_query_class = True + time_field_needs_date = True + interprets_empty_strings_as_nulls = True + date_field_supports_time_value = False class DatabaseOperations(BaseDatabaseOperations): def autoinc_sql(self, table, column): diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index e71f41cb85..8a51193a01 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -7,7 +7,7 @@ try: except ImportError: from django.utils import _decimal as decimal # for Python 2.3 -from django.db import get_creation_module +from django.db import connection, get_creation_module from django.db.models import signals from django.db.models.query_utils import QueryWrapper from django.dispatch import dispatcher @@ -30,9 +30,6 @@ class NOT_PROVIDED: BLANK_CHOICE_DASH = [("", "---------")] BLANK_CHOICE_NONE = [("", "None")] -# prepares a value for use in a LIKE query -prep_for_like_query = lambda x: smart_unicode(x).replace("\\", "\\\\").replace("%", "\%").replace("_", "\_") - class FieldDoesNotExist(Exception): pass @@ -91,7 +88,7 @@ class Field(object): 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': + if self.empty_strings_allowed and connection.features.interprets_empty_strings_as_nulls: self.null = True self.core, self.rel, self.default = core, rel, default self.editable = editable @@ -227,13 +224,13 @@ class Field(object): elif lookup_type in ('range', 'in'): return value elif lookup_type in ('contains', 'icontains'): - return ["%%%s%%" % prep_for_like_query(value)] + return ["%%%s%%" % connection.ops.prep_for_like_query(value)] elif lookup_type == 'iexact': - return [prep_for_like_query(value)] + return [connection.ops.prep_for_like_query(value)] elif lookup_type in ('startswith', 'istartswith'): - return ["%s%%" % prep_for_like_query(value)] + return ["%s%%" % connection.ops.prep_for_like_query(value)] elif lookup_type in ('endswith', 'iendswith'): - return ["%%%s" % prep_for_like_query(value)] + return ["%%%s" % connection.ops.prep_for_like_query(value)] elif lookup_type == 'isnull': return [] elif lookup_type == 'year': @@ -244,9 +241,12 @@ class Field(object): if settings.DATABASE_ENGINE == 'sqlite3': first = '%s-01-01' second = '%s-12-31 23:59:59.999999' - elif settings.DATABASE_ENGINE == 'oracle' and self.get_internal_type() == 'DateField': + elif not connection.features.date_field_supports_time_value and self.get_internal_type() == 'DateField': first = '%s-01-01' second = '%s-12-31' + elif not connection.features.supports_usecs: + first = '%s-01-01 00:00:00' + second = '%s-12-31 23:59:59.99' else: first = '%s-01-01 00:00:00' second = '%s-12-31 23:59:59.999999' @@ -263,7 +263,7 @@ class Field(object): if callable(self.default): return self.default() return force_unicode(self.default, strings_only=True) - if not self.empty_strings_allowed or (self.null and settings.DATABASE_ENGINE != 'oracle'): + if not self.empty_strings_allowed or (self.null and not connection.features.interprets_empty_strings_as_nulls): return None return "" @@ -614,7 +614,7 @@ class DateTimeField(DateField): if value is not None: # MySQL will throw a warning if microseconds are given, because it # doesn't support microseconds. - if settings.DATABASE_ENGINE == 'mysql' and hasattr(value, 'microsecond'): + if not connection.features.supports_usecs and hasattr(value, 'microsecond'): value = value.replace(microsecond=0) value = smart_unicode(value) return Field.get_db_prep_save(self, value) @@ -848,7 +848,7 @@ class FilePathField(Field): self.path, self.match, self.recursive = path, match, recursive kwargs['max_length'] = kwargs.get('max_length', 100) Field.__init__(self, verbose_name, name, **kwargs) - + def formfield(self, **kwargs): defaults = { 'path': self.path, @@ -1060,7 +1060,7 @@ class TimeField(Field): return "TimeField" def get_db_prep_lookup(self, lookup_type, value): - if settings.DATABASE_ENGINE == 'oracle': + if connection.features.time_field_needs_date: # Oracle requires a date in order to parse. def prep(value): if isinstance(value, datetime.time): @@ -1087,9 +1087,9 @@ class TimeField(Field): if value is not None: # MySQL will throw a warning if microseconds are given, because it # doesn't support microseconds. - if settings.DATABASE_ENGINE == 'mysql' and hasattr(value, 'microsecond'): + if not connection.features.supports_usecs and hasattr(value, 'microsecond'): value = value.replace(microsecond=0) - if settings.DATABASE_ENGINE == 'oracle': + if connection.features.time_field_needs_date: # 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, diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index c82574081c..495f9f05d6 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -351,7 +351,7 @@ def create_many_related_manager(superclass): self.target_col_name = target_col_name self._pk_val = self.instance._get_pk_val() if self._pk_val is None: - raise ValueError("%r instance needs to have a primary key value before a many-to-many relationship can be used." % model) + raise ValueError("%r instance needs to have a primary key value before a many-to-many relationship can be used." % instance.__class__.__name__) def get_query_set(self): return superclass.get_query_set(self).filter(**(self.core_filters)) diff --git a/django/db/models/query.py b/django/db/models/query.py index 12731caa94..fb6d116a6e 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -513,7 +513,9 @@ class ValuesQuerySet(QuerySet): # names of the model fields to select. def iterator(self): - self.query.trim_extra_select(self.extra_names) + if (not self.extra_names and + len(self.field_names) != len(self.model._meta.fields)): + self.query.trim_extra_select(self.extra_names) names = self.query.extra_select.keys() + self.field_names for row in self.query.results_iter(): yield dict(zip(names, row)) diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py index 7385cd00e1..28436abede 100644 --- a/django/db/models/sql/subqueries.py +++ b/django/db/models/sql/subqueries.py @@ -2,10 +2,9 @@ Query subclasses which provide extra functionality beyond simple data retrieval. """ -from django.contrib.contenttypes import generic from django.core.exceptions import FieldError from django.db.models.sql.constants import * -from django.db.models.sql.datastructures import RawValue, Date +from django.db.models.sql.datastructures import Date from django.db.models.sql.query import Query from django.db.models.sql.where import AND @@ -43,6 +42,7 @@ class DeleteQuery(Query): More than one physical query may be executed if there are a lot of values in pk_list. """ + from django.contrib.contenttypes import generic cls = self.model for related in cls._meta.get_all_related_many_to_many_objects(): if not isinstance(related.field, generic.GenericRelation): @@ -382,4 +382,3 @@ class CountQuery(Query): def get_ordering(self): return () - diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index 3e8bfed087..14e54487a3 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -18,7 +18,7 @@ class WhereNode(tree.Node): Used to represent the SQL where-clause. The class is tied to the Query class that created it (in order to create - the corret SQL). + the correct SQL). The children in this tree are usually either Q-like objects or lists of [table_alias, field_name, field_class, lookup_type, value]. However, a diff --git a/django/middleware/common.py b/django/middleware/common.py index 3d57fa4367..5cb7ca1bd3 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -108,7 +108,7 @@ class CommonMiddleware(object): if response.has_header('ETag'): etag = response['ETag'] else: - etag = md5.new(response.content).hexdigest() + etag = '"%s"' % md5.new(response.content).hexdigest() if response.status_code >= 200 and response.status_code < 300 and request.META.get('HTTP_IF_NONE_MATCH') == etag: cookies = response.cookies response = http.HttpResponseNotModified() diff --git a/django/newforms/fields.py b/django/newforms/fields.py index 08e8b842ec..dfe46a2e3e 100644 --- a/django/newforms/fields.py +++ b/django/newforms/fields.py @@ -514,7 +514,6 @@ class URLField(RegexField): return value if self.verify_exists: import urllib2 - from django.conf import settings headers = { "Accept": "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5", "Accept-Language": "en-us,en;q=0.5", diff --git a/django/newforms/models.py b/django/newforms/models.py index a60c1793a7..e515071162 100644 --- a/django/newforms/models.py +++ b/django/newforms/models.py @@ -544,13 +544,7 @@ class ModelChoiceField(ChoiceField): # the queryset. return ModelChoiceIterator(self) - def _set_choices(self, value): - # This method is copied from ChoiceField._set_choices(). It's necessary - # because property() doesn't allow a subclass to overwrite only - # _get_choices without implementing _set_choices. - self._choices = self.widget.choices = list(value) - - choices = property(_get_choices, _set_choices) + choices = property(_get_choices, ChoiceField._set_choices) def clean(self, value): Field.clean(self, value) diff --git a/django/utils/cache.py b/django/utils/cache.py index 4fcf493944..603199cc7e 100644 --- a/django/utils/cache.py +++ b/django/utils/cache.py @@ -104,7 +104,7 @@ def patch_response_headers(response, cache_timeout=None): if cache_timeout < 0: cache_timeout = 0 # Can't have max-age negative if not response.has_header('ETag'): - response['ETag'] = md5.new(response.content).hexdigest() + response['ETag'] = '"%s"' % md5.new(response.content).hexdigest() if not response.has_header('Last-Modified'): response['Last-Modified'] = http_date() if not response.has_header('Expires'): diff --git a/django/views/defaults.py b/django/views/defaults.py index b4dfc1e1eb..8a8fa474b9 100644 --- a/django/views/defaults.py +++ b/django/views/defaults.py @@ -68,8 +68,7 @@ def shortcut(request, content_type_id, object_id): def page_not_found(request, template_name='404.html'): """ - Default 404 handler, which looks for the requested URL in the redirects - table, redirects if found, and displays 404 page if not redirected. + Default 404 handler. Templates: `404.html` Context: diff --git a/docs/authentication.txt b/docs/authentication.txt index aacf21c106..cd76731bc4 100644 --- a/docs/authentication.txt +++ b/docs/authentication.txt @@ -270,17 +270,17 @@ to create a superuser at a later date, you can use a command line utility. manage.py createsuperuser --username=joe --email=joe@example.com -You will be prompted for a password. Once entered, the user is created. If you -leave off the ``--username`` or the ``--email`` option, It will prompt you for -those values as well. +You will be prompted for a password. After you enter one, the user will be +created immediately. If you leave off the ``--username`` or the ``--email`` +options, it will prompt you for those values. If you're using an older release of Django, the old way of creating a superuser on the command line still works:: python /path/to/django/contrib/auth/create_superuser.py -Where ``/path/to`` is the path to the Django codebase on your filesystem. The -``manage.py`` command is prefered since it'll figure out the correct path and +...where ``/path/to`` is the path to the Django codebase on your filesystem. The +``manage.py`` command is preferred because it figures out the correct path and environment for you. Storing additional information about users diff --git a/docs/contributing.txt b/docs/contributing.txt index 885f5159b9..c5f98bec11 100644 --- a/docs/contributing.txt +++ b/docs/contributing.txt @@ -148,15 +148,17 @@ Once you've claimed a ticket, you have a responsibility to work on that ticket in a reasonably timely fashion. If you don't have time to work on it, either unclaim it or don't claim it in the first place! -Core Django developers go through the list of claimed tickets from time to +Ticket triagers go through the list of claimed tickets from time to time, checking whether any progress has been made. If there's no sign of -progress on a particular claimed ticket for a week or two after it's been -claimed, we will unclaim it for you so that it's no longer monopolized and +progress on a particular claimed ticket for a week or two, a triager may ask +you to relinquish the ticket claim so that it's no longer monopolized and somebody else can claim it. If you've claimed a ticket and it's taking a long time (days or weeks) to code, -keep everybody updated by posting comments on the ticket. That way, we'll know -not to unclaim it. More communication is better than less communication! +keep everybody updated by posting comments on the ticket. If you don't provide +regular updates, and you don't respond to a request for a progress report, +your claim on the ticket may be revoked. As always, more communication is +better than less communication! Which tickets should be claimed? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -177,10 +179,10 @@ Patch style English than in code. Indentation is the most common example; it's hard to read patches when the only difference in code is that it's indented. - * When creating patches, always run ``svn diff`` from the top-level - ``trunk`` directory -- i.e., the one that contains ``django``, ``docs``, - ``tests``, ``AUTHORS``, etc. This makes it easy for other people to apply - your patches. + * When creating patches, always run ``svn diff`` from the top-level + ``trunk`` directory -- i.e., the one that contains ``django``, ``docs``, + ``tests``, ``AUTHORS``, etc. This makes it easy for other people to apply + your patches. * Attach patches to a ticket in the `ticket tracker`_, using the "attach file" button. Please *don't* put the patch in the ticket description or comment @@ -234,22 +236,28 @@ Since a picture is worth a thousand words, let's start there: :width: 590 :alt: Django's ticket workflow -We've got two roles here: +We've got two official roles here: - * Core developers: people with commit access who make the decisions and - write the bulk of the code. - - * Ticket triagers: community members who keep track of tickets, making - sure the tickets are always categorized correctly. + * Core developers: people with commit access who make the big decisions + and write the bulk of the code. + * Ticket triagers: trusted community members with a proven history of + working with the Django community. As a result of this history, they + have been entrusted by the core developers to make some of the smaller + decisions about tickets. + Second, note the five triage stages: - 1. A ticket starts as "Unreviewed", meaning that a triager has yet to - examine the ticket and move it along. + 1. A ticket starts as "Unreviewed", meaning that nobody has examined + the ticket. 2. "Design decision needed" means "this concept requires a design decision," which should be discussed either in the ticket comments or on - django-developers. + `django-developers`_. The "Design decision needed" step will generally + only be used for feature requests. It can also be used for issues + that *might* be bugs, depending on opinion or interpretation. Obvious + bugs (such as crashes, incorrect query results, or non-compliance with a + standard) skip this step and move straight to "Accepted". 3. Once a ticket is ruled to be approved for fixing, it's moved into the "Accepted" stage. This stage is where all the real work gets done. @@ -269,7 +277,7 @@ ticket has or needs in order to be "ready for checkin": "Has patch" This means the ticket has an associated patch_. These will be - reviewed to see if the patch is "good". + reviewed by the triage team to see if the patch is "good". "Needs documentation" This flag is used for tickets with patches that need associated @@ -292,7 +300,11 @@ A ticket can be resolved in a number of ways: Django and the issue is fixed. "invalid" - Used if the ticket is found to be incorrect or a user error. + Used if the ticket is found to be incorrect. This means that the + issue in the ticket is actually the result of a user error, or + describes a problem with something other than Django, or isn't + a bug report or feature request at all (for example, some new users + submit support queries as tickets). "wontfix" Used when a core developer decides that this request is not @@ -305,7 +317,8 @@ A ticket can be resolved in a number of ways: tickets, we keep all the discussion in one place, which helps everyone. "worksforme" - Used when the triage team is unable to replicate the original bug. + Used when the the ticket doesn't contain enough detail to replicate + the original bug. If you believe that the ticket was closed in error -- because you're still having the issue, or it's popped up somewhere else, or the triagers have @@ -316,6 +329,55 @@ reopen tickets that have been marked as "wontfix" by core developers. .. _good patch: `Patch style`_ .. _patch: `Submitting patches`_ +Triage by the general community +------------------------------- + +Although the Core Developers and Ticket Triagers make the big decisions in +the ticket triage process, there is also a lot that general community +members can do to help the triage process. In particular, you can help out by: + + * Closing "Unreviewed" tickets as "invalid", "worksforme", or "duplicate". + + * Promoting "Unreviewed" tickets to "Design Decision Required" if there + is a design decision that needs to be made, or "Accepted" if they are + an obvious bug. + + * Correcting the "Needs Tests", "Needs documentation", or "Has Patch" flags + for tickets where they are incorrectly set. + + * Checking that old tickets are still valid. If a ticket hasn't seen + any activity in a long time, it's possible that the problem has been + fixed, but the ticket hasn't been closed. + + * Contact the owners of tickets that have been claimed, but have not seen + any recent activity. If the owner doesn't respond after a week or so, + remove the owner's claim on the ticket. + + * Identifying trends and themes in the tickets. If there a lot of bug reports + about a particular part of Django, it possibly indicates that we need + to consider refactoring that part of the code. If a trend is emerging, + you should raise it for discussion (referencing the relevant tickets) + on `django-developers`_. + +However, we do ask that as a general community member working in the +ticket database: + + * Please **don't** close tickets as "wontfix". The core developers will + make the final determination of the fate of a ticket, usually after + consultation with the community. + + * Please **don't** promote tickets to "Ready for checkin" unless they are + *trivial* changes - for example, spelling mistakes or + broken links in documentation. + + * Please **don't** reverse a decision that has been made by a core + developer. If you disagree with a discussion that has been made, + please post a message to `django-developers`_. + + * Please be conservative in your actions. If you're unsure if you should + be making a change, don't make the change - leave a comment with your + concerns on the ticket, or post a message to `django-developers`_. + Submitting and maintaining translations ======================================= diff --git a/docs/db-api.txt b/docs/db-api.txt index a15c45d37b..4e1c2c5791 100644 --- a/docs/db-api.txt +++ b/docs/db-api.txt @@ -1373,6 +1373,17 @@ SQL equivalent:: SELECT ... WHERE id IN (1, 3, 4); +You can also use a queryset to dynamically evaluate the list of values +instead of providing a list of literal values. The queryset must be +reduced to a list of individual values using the ``values()`` method, +and then converted into a query using the ``query`` attribute:: + + Entry.objects.filter(blog__in=Blog.objects.filter(name__contains='Cheddar').values('pk').query) + +This queryset will be evaluated as subselect statement:: + + SELET ... WHERE blog.id IN (SELECT id FROM ... WHERE NAME LIKE '%Cheddar%') + startswith ~~~~~~~~~~ @@ -2026,6 +2037,37 @@ Each "reverse" operation described in this section has an immediate effect on the database. Every addition, creation and deletion is immediately and automatically saved to the database. +One-to-one relationships +------------------------ + +One-to-one relationships are very similar to Many-to-one relationships. +If you define a OneToOneField on your model, instances of that model will have +access to the related object via a simple attribute of the model. + +For example:: + + class EntryDetail(models.Model): + entry = models.OneToOneField(Entry) + details = models.TextField() + + ed = EntryDetail.objects.get(id=2) + ed.entry # Returns the related Entry object. + +The difference comes in reverse queries. The related model in a One-to-one +relationship also has access to a ``Manager`` object; however, that ``Manager`` +represents a single object, rather than a collection of objects:: + + e = Entry.objects.get(id=2) + e.entrydetail # returns the related EntryDetail object + +If no object has been assigned to this relationship, Django will raise +a ``DoesNotExist`` exception. + +Instances can be assigned to the reverse relationship in the same way as +you would assign the forward relationship:: + + e.entrydetail = ed + Many-to-many relationships -------------------------- @@ -2053,12 +2095,6 @@ above example, if the ``ManyToManyField`` in ``Entry`` had specified ``related_name='entries'``, then each ``Author`` instance would have an ``entries`` attribute instead of ``entry_set``. -One-to-one relationships ------------------------- - -The semantics of one-to-one relationships will be changing soon, so we don't -recommend you use them. - How are the backward relationships possible? -------------------------------------------- diff --git a/docs/django-admin.txt b/docs/django-admin.txt index 5aed3b0816..8797d2e988 100644 --- a/docs/django-admin.txt +++ b/docs/django-admin.txt @@ -93,6 +93,31 @@ backend. See the `cache documentation`_ for more information. .. _cache documentation: ../cache/ +createsuperuser +--------------- + +**New in Django development version** + +Creates a superuser account (a user who has all permissions). This is +useful if you need to create an initial superuser account but did not +do so during ``syncdb``, or if you need to programmatically generate +superuser accounts for your site(s). + +When run interactively, this command will prompt for a password for +the new superuser account. When run non-interactively, no password +will be set, and the superuser account will not be able to log in until +a password has been manually set for it. + +The username and e-mail address for the new account can be supplied by +using the ``--username`` and ``--email`` arguments on the command +line. If either of those is not supplied, ``createsuperuser`` will prompt for +it when running interactively. + +This command is only available if Django's `authentication system`_ +(``django.contrib.auth``) is installed. + +.. _authentication system: ../authentication/ + dbshell ------- @@ -109,31 +134,6 @@ the program name (``psql``, ``mysql``, ``sqlite3``) will find the program in the right place. There's no way to specify the location of the program manually. -createsuperuser ---------------- - -**New in Django development version** - -Creates a superuser account (a user who has all permissions). This is -useful if you need to create an initial superuser account but did not -do so during ``syncdb``, or if you need to programmatically generate -superuser accounts for your site(s). - -When run interactively, this command will prompt for a password for -the new superuser account; when run non-interactively, no password -will be set and the superuser account will not be able to log in until -a password has been manually set for it. - -The username and e-mail address for the new account can be supplied by -using the ``--username`` and ``--email`` arguments on the command -line; if not supplied, ``createsuperuser`` will prompt for them when -running interactively. - -This command is only available if Django's `authentication system`_ -(``django.contrib.auth``) is installed. - -.. _authentication system: ../authentication/ - diffsettings ------------ @@ -164,6 +164,22 @@ dumped. .. _custom manager: ../model-api/#custom-managers +--exclude +~~~~~~~~~ + +**New in Django development version** + +Exclude a specific application from the applications whose contents is +output. For example, to specifically exclude the `auth` application from +the output, you would call:: + + django-admin.py dumpdata --exclude=auth + +If you want to exclude multiple applications, use multiple ``--exclude`` +directives:: + + django-admin.py dumpdata --exclude=auth --exclude=contenttype + --format ~~~~~~~~ @@ -338,9 +354,9 @@ The ``dumpdata`` command can be used to generate input for ``loaddata``. Use ``--verbosity`` to specify the amount of notification and debug information that ``django-admin.py`` should print to the console. - * ``0`` means no input. - * ``1`` means normal input (default). - * ``2`` means verbose input. + * ``0`` means no output. + * ``1`` means normal output (default). + * ``2`` means verbose output. Example usage:: @@ -422,6 +438,10 @@ means any Python code changes you make while the server is running will *not* take effect if the particular Python modules have already been loaded into memory. +Example usage:: + + django-admin.py runserver --noreload + Examples of using different ports and addresses ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -451,14 +471,6 @@ documentation. .. _serving static files: ../static_files/ -Turning off auto-reload -~~~~~~~~~~~~~~~~~~~~~~~ - -To disable auto-reloading of code while the development server is running, use the -``--noreload`` option, like so:: - - django-admin.py runserver --noreload - shell ----- @@ -581,9 +593,9 @@ data files. Use ``--verbosity`` to specify the amount of notification and debug information that ``django-admin.py`` should print to the console. - * ``0`` means no input. - * ``1`` means normal input (default). - * ``2`` means verbose input. + * ``0`` means no output. + * ``1`` means normal output (default). + * ``2`` means verbose output. Example usage:: @@ -617,9 +629,9 @@ is being executed as an unattended, automated script. Use ``--verbosity`` to specify the amount of notification and debug information that ``django-admin.py`` should print to the console. - * ``0`` means no input. - * ``1`` means normal input (default). - * ``2`` means verbose input. + * ``0`` means no output. + * ``1`` means normal output (default). + * ``2`` means verbose output. Example usage:: @@ -693,9 +705,9 @@ To run on 1.2.3.4:7000 with a ``test`` fixture:: Use ``--verbosity`` to specify the amount of notification and debug information that ``django-admin.py`` should print to the console. - * ``0`` means no input. - * ``1`` means normal input (default). - * ``2`` means verbose input. + * ``0`` means no output. + * ``1`` means normal output (default). + * ``2`` means verbose output. Example usage:: diff --git a/docs/faq.txt b/docs/faq.txt index 5e36f1d933..6d12a95cba 100644 --- a/docs/faq.txt +++ b/docs/faq.txt @@ -226,7 +226,7 @@ When will you release Django 1.0? Short answer: When we're comfortable with Django's APIs, have added all features that we feel are necessary to earn a "1.0" status, and are ready to -begin maintaining backwards compatibility. +begin maintaining backwards compatibility. The merging of Django's `Queryset Refactor branch`_ went a long way toward Django 1.0. Merging the `Newforms Admin branch` will be another important step. @@ -260,8 +260,8 @@ Where can I find Django developers for hire? Consult our `developers for hire page`_ for a list of Django developers who would be happy to help you. -You might also be interested in posting a job to http://djangogigs.com/ . -If you want to find Django-capable people in your local area, try +You might also be interested in posting a job to http://djangogigs.com/ . +If you want to find Django-capable people in your local area, try http://djangopeople.net/ . .. _developers for hire page: http://code.djangoproject.com/wiki/DevelopersForHire @@ -646,18 +646,18 @@ You can also use the Python API. See `creating users`_ for full info. .. _creating users: ../authentication/#creating-users -Getting Help +Getting help ============ How do I do X? Why doesn't Y work? Where can I go to get help? -------------------------------------------------------------- If this FAQ doesn't contain an answer to your question, you might want to -try the `django-users mailing list`_. Feel free to ask any question related -to installing, using, or debugging Django. +try the `django-users mailing list`_. Feel free to ask any question related +to installing, using, or debugging Django. -If you prefer IRC, the `#django IRC channel`_ on freenode is an active -community of helpful individuals who may be able to solve your problem. +If you prefer IRC, the `#django IRC channel`_ on the Freenode IRC network is an +active community of helpful individuals who may be able to solve your problem. .. _`django-users mailing list`: http://groups.google.com/group/django-users .. _`#django IRC channel`: irc://irc.freenode.net/django @@ -666,35 +666,36 @@ Why hasn't my message appeared on django-users? ----------------------------------------------- django-users_ has a lot of subscribers. This is good for the community, as -there are lot of people that can contribute answers to questions. +it means many people are available to contribute answers to questions. Unfortunately, it also means that django-users_ is an attractive target for -spammers. +spammers. In order to combat the spam problem, when you join the django-users_ mailing -list, we manually moderate the first message you send to the list. This means -that spammers get caught, but it also means that your first question to the +list, we manually moderate the first message you send to the list. This means +that spammers get caught, but it also means that your first question to the list might take a little longer to get answered. We apologize for any inconvenience that this policy may cause. .. _django-users: http://groups.google.com/group/django-users -Nobody on django-users answered my question? What should I do? +Nobody on django-users answered my question! What should I do? -------------------------------------------------------------- -Wait. Ask again later. Try making your question more specific, or provide -a better example of your problem. +Try making your question more specific, or provide a better example of your +problem. -Remember, the readers of django-users_ are all volunteers. If nobody has -answered your question, it may be because nobody knows the answer, it may -be because nobody can understand the question, or it may be that everybody -that can help is extremely busy. +As with most open-source mailing lists, the folks on django-users_ are +volunteers. If nobody has answered your question, it may be because nobody +knows the answer, it may be because nobody can understand the question, or it +may be that everybody that can help is busy. One thing you might try is to ask +the question on IRC -- visit the `#django IRC channel`_ on the Freenode IRC +network. -Resist any temptation to mail the `django-developers mailing list`_ in an -attempt to get an answer to your question. django-developers_ is for discussing -the development of Django itself. Attempts to use django-developers_ as -a second-tier support mechanism will not be met an enthusiastic response. +You might notice we have a second mailing list, called django-developers_ -- +but please don't e-mail support questions to this mailing list. This list is +for discussion of the development of Django itself. Asking a tech support +question there is considered quite impolite. -.. _`django-developers mailing list`: http://groups.google.com/group/django-developers .. _django-developers: http://groups.google.com/group/django-developers I think I've found a bug! What should I do? @@ -708,15 +709,14 @@ Detailed instructions on how to handle a potential bug can be found in our I think I've found a security problem! What should I do? -------------------------------------------------------- -If you think you have found a security problem with Django, please send -a message to security@djangoproject.com. This is a private list only -open to long-time, highly trusted Django developers, and its archives -are not publicly readable. +If you think you've found a security problem with Django, please send a message +to security@djangoproject.com. This is a private list only open to long-time, +highly trusted Django developers, and its archives are not publicly readable. Due to the sensitive nature of security issues, we ask that if you think you -have found a security problem, *please* don't send a message to one of the +have found a security problem, *please* don't send a message to one of the public mailing lists. Django has a `policy for handling security issues`_; -while a defect is outstanding, we would like to minimize any damage that +while a defect is outstanding, we would like to minimize any damage that could be inflicted through public knowledge of that defect. .. _`policy for handling security issues`: ../contributing/#reporting-security-issues @@ -742,10 +742,10 @@ ignored" and "a ticket has not been attended to yet." Django's ticket system contains hundreds of open tickets, of various degrees of impact on end-user functionality, and Django's developers have to review and prioritize. -On top of that - the team working on Django are all volunteers. As a result, -the amount of time that we have to work on Django is limited, and will vary -from week to week depending on how much spare time we have. If we are busy, we -may not be able to spend as much time on Django as we might want. +On top of that: the people who work on Django are all volunteers. As a result, +the amount of time that we have to work on the framework is limited and will +vary from week to week depending on our spare time. If we're busy, we may not +be able to spend as much time on Django as we might want. Besides, if your feature request stands no chance of inclusion in Django, we won't ignore it -- we'll just close the ticket. So if your ticket is still diff --git a/docs/model-api.txt b/docs/model-api.txt index 57e366f959..2c497b30c2 100644 --- a/docs/model-api.txt +++ b/docs/model-api.txt @@ -669,7 +669,7 @@ unless you want to override the default primary-key behavior. If ``True``, this field must be unique throughout the table. This is enforced at the database level and at the Django admin-form level. If -you try to add save a model with a duplicate value in a ``unique`` field, a +you try to save a model with a duplicate value in a ``unique`` field, a ``django.db.IntegrityError`` will be raised by the model's ``save()`` method. ``unique_for_date`` diff --git a/docs/sessions.txt b/docs/sessions.txt index 86ed49f135..0c47f0deed 100644 --- a/docs/sessions.txt +++ b/docs/sessions.txt @@ -112,7 +112,7 @@ It also has these methods: Sets a test cookie to determine whether the user's browser supports cookies. Due to the way cookies work, you won't be able to test this - until the user's next page request. See "Setting test cookies" below for + until the user's next page request. See `Setting test cookies`_ below for more information. * ``test_cookie_worked()`` @@ -120,7 +120,7 @@ It also has these methods: Returns either ``True`` or ``False``, depending on whether the user's browser accepted the test cookie. Due to the way cookies work, you'll have to call ``set_test_cookie()`` on a previous, separate page request. - See "Setting test cookies" below for more information. + See `Setting test cookies`_ below for more information. * ``delete_test_cookie()`` @@ -139,10 +139,10 @@ It also has these methods: in 5 minutes. * If ``value`` is a ``datetime`` or ``timedelta`` object, the - session will expire at that specific time. - - * If ``value`` is ``0`` then the user's session cookie will expire - when their browser is closed. + session will expire at that specific date/time. + + * If ``value`` is ``0``, the user's session cookie will expire + when the user's Web browser is closed. * If ``value`` is ``None``, the session reverts to using the global session expiry policy. @@ -168,7 +168,7 @@ It also has these methods: **New in Django development version** Returns either ``True`` or ``False``, depending on whether the user's - session cookie will expire when their browser is closed. + session cookie will expire when the user's Web browser is closed. You can edit ``request.session`` at any point in your view. You can edit it multiple times. diff --git a/docs/settings.txt b/docs/settings.txt index 9b89c92343..02e458fcda 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -394,6 +394,8 @@ site with ``DEBUG`` turned on. DEBUG_PROPAGATE_EXCEPTIONS -------------------------- +**New in Django development version** + Default: ``False`` If set to True, Django's normal exception handling of view functions diff --git a/docs/templates.txt b/docs/templates.txt index ea9f3fb6b2..3b2c03766b 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -819,7 +819,7 @@ The 'ifchanged' block tag is used within a loop. It has two possible uses. 2. If given a variable, check whether that variable has changed. For example, the following shows the date every time it changes, but - only shows the hour if both the hour and the date has changed:: + only shows the hour if both the hour and the date have changed:: {% for date in days %} {% ifchanged date.date %} {{ date.date }} {% endifchanged %} diff --git a/docs/templates_python.txt b/docs/templates_python.txt index 43ef016ed4..a03ea215d2 100644 --- a/docs/templates_python.txt +++ b/docs/templates_python.txt @@ -1059,8 +1059,8 @@ Passing template variables to the tag Although you can pass any number of arguments to a template tag using ``token.split_contents()``, the arguments are all unpacked as -string literals. A little more work is required in order to dynamic content (a -template variable) to a template tag as an argument. +string literals. A little more work is required in order to pass dynamic +content (a template variable) to a template tag as an argument. While the previous examples have formatted the current time into a string and returned the string, suppose you wanted to pass in a ``DateTimeField`` from an @@ -1169,10 +1169,11 @@ Our earlier ``current_time`` function could thus be written like this:: In Python 2.4, the decorator syntax also works:: @register.simple_tag - def current_time(token): + def current_time(format_string): ... A couple of things to note about the ``simple_tag`` helper function: + * Checking for the required number of arguments, etc, has already been done by the time our function is called, so we don't need to do that. * The quotes around the argument (if any) have already been stripped away, diff --git a/docs/tutorial01.txt b/docs/tutorial01.txt index b84ecd5f7e..04863cc7fd 100644 --- a/docs/tutorial01.txt +++ b/docs/tutorial01.txt @@ -22,8 +22,8 @@ installed. .. admonition:: Where to get help: If you're having trouble going through this tutorial, please post a message - to `django-users`_ or drop by `#django`_ on ``irc.freenode.net`` and we'll - try to help. + to `django-users`_ or drop by `#django`_ on ``irc.freenode.net`` to chat + with other Django users who might be able to help. .. _django-users: http://groups.google.com/group/django-users .. _#django: irc://irc.freenode.net/django diff --git a/tests/modeltests/many_to_many/models.py b/tests/modeltests/many_to_many/models.py index e09fd825f8..c2ab2897b6 100644 --- a/tests/modeltests/many_to_many/models.py +++ b/tests/modeltests/many_to_many/models.py @@ -39,6 +39,14 @@ __test__ = {'API_TESTS':""" # Create an Article. >>> a1 = Article(id=None, headline='Django lets you build Web apps easily') + +# You can't associate it with a Publication until it's been saved. +>>> a1.publications.add(p1) +Traceback (most recent call last): +... +ValueError: 'Article' instance needs to have a primary key value before a many-to-many relationship can be used. + +# Save it! >>> a1.save() # Associate the Article with a Publication. diff --git a/tests/modeltests/many_to_one/models.py b/tests/modeltests/many_to_one/models.py index 53ad4466bb..dfb17b8344 100644 --- a/tests/modeltests/many_to_one/models.py +++ b/tests/modeltests/many_to_one/models.py @@ -175,6 +175,12 @@ False >>> Article.objects.filter(reporter__in=[r,r2]).distinct() [, , ] +# You can also use a queryset instead of a literal list of instances. +# The queryset must be reduced to a list of values using values(), +# then converted into a query +>>> Article.objects.filter(reporter__in=Reporter.objects.filter(first_name='John').values('pk').query).distinct() +[, ] + # You need two underscores between "reporter" and "id" -- not one. >>> Article.objects.filter(reporter_id__exact=1) Traceback (most recent call last): diff --git a/tests/regressiontests/forms/widgets.py b/tests/regressiontests/forms/widgets.py index fb0af1760b..379e05f028 100644 --- a/tests/regressiontests/forms/widgets.py +++ b/tests/regressiontests/forms/widgets.py @@ -772,7 +772,7 @@ True False >>> r[1].name, r[1].value, r[1].choice_value, r[1].choice_label ('beatle', u'J', u'P', u'Paul') ->>> r[10] +>>> r[10] # doctest: +IGNORE_EXCEPTION_DETAIL Traceback (most recent call last): ... IndexError: list index out of range diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py index 8c9334c849..aa78d6583a 100644 --- a/tests/regressiontests/queries/models.py +++ b/tests/regressiontests/queries/models.py @@ -507,6 +507,12 @@ True >>> [sorted(d.items()) for d in dicts] [[('id', 1), ('rank', 2)], [('id', 2), ('rank', 1)], [('id', 3), ('rank', 3)]] +Bug #7256 +# An empty values() call includes all aliases, including those from an extra() +>>> dicts = qs.values().order_by('id') +>>> [sorted(d.items()) for d in dicts] +[[('author_id', 2), ('good', 0), ('id', 1), ('rank', 2)], [('author_id', 3), ('good', 0), ('id', 2), ('rank', 1)], [('author_id', 1), ('good', 1), ('id', 3), ('rank', 3)]] + Bugs #2874, #3002 >>> qs = Item.objects.select_related().order_by('note__note', 'name') >>> list(qs) diff --git a/tests/regressiontests/urlpatterns_reverse/tests.py b/tests/regressiontests/urlpatterns_reverse/tests.py index 8f571ac66c..610c3f7bc7 100644 --- a/tests/regressiontests/urlpatterns_reverse/tests.py +++ b/tests/regressiontests/urlpatterns_reverse/tests.py @@ -17,6 +17,7 @@ test_data = ( ('^hardcoded/$', 'hardcoded/', [], {}), ('^hardcoded/$', 'hardcoded/', ['any arg'], {}), ('^hardcoded/$', 'hardcoded/', [], {'kwarg': 'foo'}), + ('^hardcoded/doc\\.pdf$', 'hardcoded/doc.pdf', [], {}), ('^people/(?P\w\w)/(?P\w+)/$', 'people/il/adrian/', [], {'state': 'il', 'name': 'adrian'}), ('^people/(?P\w\w)/(?P\d)/$', NoReverseMatch, [], {'state': 'il', 'name': 'adrian'}), ('^people/(?P\w\w)/(?P\w+)/$', NoReverseMatch, [], {'state': 'il'}),