diff --git a/django/bin/compile-messages.py b/django/bin/compile-messages.py
new file mode 100755
index 0000000000..0b5127f6b2
--- /dev/null
+++ b/django/bin/compile-messages.py
@@ -0,0 +1,24 @@
+#!/usr/bin/python
+
+import os
+import sys
+import getopt
+
+basedir = None
+
+if os.path.isdir(os.path.join('conf', 'locale')):
+    basedir = os.path.abspath(os.path.join('conf', 'locale'))
+elif os.path.isdir('locale'):
+    basedir = os.path.abspath('locale')
+else:
+    print "this script should be run from the django svn tree or your project or app tree"
+    sys.exit(1)
+
+for (dirpath, dirnames, filenames) in os.walk(basedir):
+    for file in filenames:
+        if file.endswith('.po'):
+            sys.stderr.write('processing file %s in %s\n' % (file, dirpath))
+            pf = os.path.splitext(os.path.join(dirpath, file))[0]
+            cmd = 'msgfmt -o %s.mo %s.po' % (pf, pf)
+            os.system(cmd)
+
diff --git a/django/bin/django-admin.py b/django/bin/django-admin.py
index 8cf042a5c1..89297d4cf9 100755
--- a/django/bin/django-admin.py
+++ b/django/bin/django-admin.py
@@ -3,6 +3,14 @@ from django.core import management
 from optparse import OptionParser
 import os, sys
 
+# switch to english, because django-admin creates database content
+# like permissions, and those shouldn't contain any translations
+try:
+    from django.utils import translation
+    translation.activate('en-us')
+except:
+    pass
+
 ACTION_MAPPING = {
     'adminindex': management.get_admin_index,
     'createsuperuser': management.createsuperuser,
@@ -129,3 +137,4 @@ def main():
 
 if __name__ == "__main__":
     main()
+
diff --git a/django/bin/make-messages.py b/django/bin/make-messages.py
new file mode 100755
index 0000000000..c78faac694
--- /dev/null
+++ b/django/bin/make-messages.py
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+
+import re
+import os
+import sys
+import getopt
+
+from django.utils.translation import templateize
+
+localedir = None
+
+if os.path.isdir(os.path.join('conf', 'locale')):
+    localedir = os.path.abspath(os.path.join('conf', 'locale'))
+elif os.path.isdir('locale'):
+    localedir = os.path.abspath('locale')
+else:
+    print "this script should be run from the django svn tree or your project or app tree"
+    sys.exit(1)
+
+(opts, args) = getopt.getopt(sys.argv[1:], 'l:d:va')
+
+lang = None
+domain = 'django'
+verbose = False
+all = False
+
+for o, v in opts:
+    if o == '-l':
+        lang = v
+    elif o == '-d':
+        domain = v
+    elif o == '-v':
+        verbose = True
+    elif o == '-a':
+        all = True
+
+if (lang is None and not all) or domain is None:
+    print "usage: make-messages.py -l <language>"
+    print "   or: make-messages.py -a"
+    sys.exit(1)
+
+languages = []
+
+if lang is not None:
+    languages.append(lang)
+elif all:
+    languages = [el for el in os.listdir(localedir) if not el.startswith('.')]
+
+for lang in languages:
+
+    print "processing language", lang
+    basedir = os.path.join(localedir, lang, 'LC_MESSAGES')
+    if not os.path.isdir(basedir):
+        os.makedirs(basedir)
+
+    pofile = os.path.join(basedir, '%s.po' % domain)
+    potfile = os.path.join(basedir, '%s.pot' % domain)
+
+    if os.path.exists(potfile):
+        os.unlink(potfile)
+
+    for (dirpath, dirnames, filenames) in os.walk("."):
+        for file in filenames:
+            if file.endswith('.py') or file.endswith('.html'):
+                thefile = file
+                if file.endswith('.html'):
+                    src = open(os.path.join(dirpath, file), "rb").read()
+                    open(os.path.join(dirpath, '%s.py' % file), "wb").write(templateize(src))
+                    thefile = '%s.py' % file
+                if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
+                cmd = 'xgettext %s -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy -o - "%s"' % (
+                    os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
+                msgs = os.popen(cmd, 'r').read()
+                if thefile != file:
+                    old = '#: '+os.path.join(dirpath, thefile)[2:]
+                    new = '#: '+os.path.join(dirpath, file)[2:]
+                    msgs = msgs.replace(old, new)
+                if msgs:
+                    open(potfile, 'ab').write(msgs)
+                if thefile != file:
+                    os.unlink(os.path.join(dirpath, thefile))
+
+    msgs = os.popen('msguniq %s' % potfile, 'r').read()
+    open(potfile, 'w').write(msgs)
+    if os.path.exists(pofile):
+        msgs = os.popen('msgmerge %s %s' % (pofile, potfile), 'r').read()
+    open(pofile, 'wb').write(msgs)
+    os.unlink(potfile)
+
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 40e230b04c..70d38d6993 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -1,6 +1,8 @@
 # Default Django settings. Override these with settings in the module
 # pointed-to by the DJANGO_SETTINGS_MODULE environment variable.
 
+from django.utils.translation import gettext_lazy as _
+
 ####################
 # CORE             #
 ####################
@@ -28,6 +30,23 @@ TIME_ZONE = 'America/Chicago'
 # http://blogs.law.harvard.edu/tech/stories/storyReader$15
 LANGUAGE_CODE = 'en-us'
 
+# Languages we provide translations for out of the base. The
+# language name should be the utf-8 encoded local name for the
+# language.
+LANGUAGES = (
+    ('cs', _('Czech')),
+    ('de', _('German')),
+    ('en', _('English')),
+    ('es', _('Spanish')),
+    ('fr', _('French')),
+    ('gl', _('Galician')),
+    ('it', _('Italian')),
+    ('pt-br', _('Brazilian')),
+    ('ru', _('Russian')),
+    ('sr', _('Serbian')),
+    ('zh-cn', _('Traditional Chinese')),
+)
+
 # Not-necessarily-technical managers of the site. They get broken link
 # notifications and other various e-mails.
 MANAGERS = ADMINS
diff --git a/django/conf/locale/cs/LC_MESSAGES/django.mo b/django/conf/locale/cs/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..dd2e7649e6
Binary files /dev/null and b/django/conf/locale/cs/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/cs/LC_MESSAGES/django.po b/django/conf/locale/cs/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..1c091b014c
--- /dev/null
+++ b/django/conf/locale/cs/LC_MESSAGES/django.po
@@ -0,0 +1,978 @@
+# Translation of django.po to Czech
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the DJANGO package.
+# Radek Svarz <translate@svarz.cz>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-31 19:42+0100\n"
+"Last-Translator: Radek Svarz <translate@svarz.cz>\n"
+"Language-Team: Czech\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Domů"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Historie"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Datum/čas"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Uživatel"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Akce"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "Plné datum s časem"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Tento objekt nemá historii změn. Pravděpodobně nebyl přidán přes "
+"administrátorské rozhraní."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django správa webu"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django správa"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Chyba serveru (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Chyba serveru (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Chyba serveru <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Nastala chyba. Ta byla oznámena administrátorovi serveru pomocí e-mailu a "
+"měla by být brzy odstraněna. Děkujeme za trpělivost."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Stránka nenalezena"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Je nám líto, ale vyžádaná stránka nebyla nalezena."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Přidat"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Změnit"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Nemáte oprávnění nic měnit."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Poslední akce"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Mé akce"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Nic"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Uživatelské jméno:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Heslo:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "<a href=\"/password_reset/\">Zapomněl(a) jste své heslo?</a>"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Přihlášení"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Vítejte,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Změnit heslo"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Odhlásit se"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Mazání %(object_name)s  '%(object)s' by vyústilo v mazání souvisejících "
+"objektů, ale Váš účet nemá oprávnění pro mazání následujících typů objektů:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"Jste si jist(á), že chcete smazat %(object_name)s \"%(object)s\"? Všechny "
+"následující související položky budou smazány:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "Ano, jsem si jist"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Změna hesla"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Změna hesla byla úspěšná"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Vaše heslo bylo změněno."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Obnovení hesla"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+"Zapomněl(a) jste heslo? Vložte níže Vaši e-mailovou adresu a my Vaše heslo "
+"obnovíme a zašleme Vám e-mailem nové."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-mailová adresa:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Obnovit mé heslo"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Děkujeme Vám za Váš strávený čas na našich webových stránkách."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Přihlašte se znova"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Obnovení hesla bylo úspěšné"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"Poslali jsme Vám e-mailem nové heslo na adresu, kterou jste zadal(a). Měl(a) "
+"byste ji dostat během okamžiku."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Prosíme, pro zabezpečení vložte svoje staré heslo a poté vložte dvakrát nové "
+"heslo, takže můžeme ověřit, že jste ho napsal(a) správně."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Staré heslo:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nové heslo:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Potvrdit heslo:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Změnit mé heslo:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Dostal(a) jste tento e-mail, protože jste požádal(a) o obnovení hesla"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "pro Váš uživatelský účet na %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Vaše nové heslo je: %(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 "Můžete změnit toto heslo na následující stránce: "
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Vaše uživatelské jméno, pro případ, že jste zapomněl(a):"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Děkujeme za používání našeho webu!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Tým %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "čas akce"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "object id"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "object repr"
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "příznak akce"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "zpráva změny"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "log záznam"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "log záznamy"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Pondělí"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Úterý"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Středa"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Čtvrtek"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Pátek"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Sobota"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Neděle"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Leden"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Únor"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Březen"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Duben"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Květen"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Červen"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Červenec"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Srpen"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Září"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Říjen"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Listopad"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Prosinec"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Led."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Ún."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Srp."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Zář."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Říj."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "List."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Pros."
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "jméno domény"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "zobrazené jméno"
+
+#: models/core.py:8
+msgid "site"
+msgstr "web"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "weby"
+
+#: models/core.py:22
+msgid "label"
+msgstr "nadpis"
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr "jméno"
+
+#: models/core.py:25
+msgid "package"
+msgstr "balík"
+
+#: models/core.py:26
+msgid "packages"
+msgstr "balíky"
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "jméno modulu Pythonu"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "typ obsahu"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "typy obsahu"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "přesměrovat z"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Toto by měla být absolutní cesta, bez domény. Např.  '/udalosti/hledat/'."
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "přesměrovat na"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Toto může být buď absolutní cesta (jako nahoře) nebo plné URL začínající na "
+"'http://'."
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "přesměrovat"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "přesměrování"
+
+#: models/core.py:81
+msgid "URL"
+msgstr "URL"
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Příklad: '/o/kontakt/'. Ujistěte se, že máte počáteční a konečná lomítka."
+
+#: models/core.py:83
+msgid "title"
+msgstr "titulek"
+
+#: models/core.py:84
+msgid "content"
+msgstr "obsah"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "povolit komentáře"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "jméno šablony"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"Například: 'flatfiles/kontaktni_stranka'. Pokud toto není zadáno, systém "
+"použije 'flatfiles/default'."
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "nutná registrace"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Pokud je zaškrtnuto, pouze přihlášení uživatelé budou moci prohlížet tuto "
+"stránku."
+
+#: models/core.py:92
+#, fuzzy
+msgid "flat page"
+msgstr "plochá strana"
+
+#: models/core.py:93
+#, fuzzy
+msgid "flat pages"
+msgstr "ploché stránky"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "klíč sezení"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "data sezení"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "datum expirace"
+
+#: models/core.py:118
+msgid "session"
+msgstr "sezení"
+
+#: models/core.py:119
+msgid "sessions"
+msgstr "sezení"
+
+#: models/auth.py:8
+msgid "codename"
+msgstr "codename"
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "Oprávnění"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "Oprávnění"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "Skupina"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "Skupiny"
+
+#: models/auth.py:33
+msgid "username"
+msgstr "uživatelské jméno"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "křestní jméno"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "příjmení"
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr "e-mailová adresa"
+
+#: models/auth.py:37
+msgid "password"
+msgstr "heslo"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "Použije se MD5 hash -- ne čisté heslo."
+
+#: models/auth.py:38
+#, fuzzy
+msgid "staff status"
+msgstr "stav pracovníků"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr "Rozhodne, zda se může uživatel přihlásit do správy webu."
+
+#: models/auth.py:39
+msgid "active"
+msgstr "aktivní"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "stav superuživatel"
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "poslední přihlášení"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "datum zaregistrování"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Kromě manuálně přidělených oprávnění uživatel dostane všechna oprávnění pro "
+"každou skupinu, ve které je."
+
+#: models/auth.py:48
+msgid "Users"
+msgstr "Uživatelé"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "Osobní informace"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "Důležitá data"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "Zpráva"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr "Česky"
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "Německy"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "Anglicky"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "Španělsky"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "Francouzsky"
+
+#: conf/global_settings.py:42
+#, fuzzy
+msgid "Galician"
+msgstr "Galicijský"
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr "Italsky"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "Brazilsky"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "Rusky"
+
+#: conf/global_settings.py:46
+#, fuzzy
+msgid "Serbian"
+msgstr "Srbsky"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Tato hodnota musí obsahovat pouze znaky, čísla nebo podtržítka."
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr ""
+"Tato hodnota musí obsahovat pouze znaky, čísla, podtržítka nebo lomítka."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "Velká písmena zde nejsou povolená."
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "Malá písmena zde nejsou povolená."
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "Vložte pouze cifry oddělené čárkami."
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Vložte platné e-mailové adresy oddělené čárkami."
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "Prosíme, zadejte platnou IP adresu."
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "Zde nejsou povolené prázdné hodnoty."
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Znaky, které nejsou čísla, nejsou zde povoleny."
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "Tato hodnota nemůže být složená pouze z cifer."
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "Vložte celé číslo."
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "Zde jsou povoleny pouze alfanumerické znaky."
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Vložte platné datum ve formátu RRRR-MM-DD."
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "Vložte platný čas ve formátu HH:MM."
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Vložte platné datum a čas ve formátu RRRR-MM-DD HH:MM."
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "Vložte platnou e-mailovou adresu."
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Nahrajte na server platný obrázek. Soubor, který jste nahrál(a) nebyl "
+"obrázek, nebo byl porušen."
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "URL %s neukazuje na platný obrázek."
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "Telefonní čísla musí být ve formátu XXX-XXX-XXXX. \"%s\" není platné."
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "URL %s neodkazuje na platné video ve formátu QuickTime."
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "Je vyžadováno platné URL."
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Je vyžadováno platné HTML. Konkrétní chyby jsou:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Špatně formované XML: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Neplatné URL: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "Odkaz na URL %s je rozbitý."
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Vložte platnou zkraku U.S. státu."
+
+#: core/validators.py:226
+#, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "Mluvte slušně! Slovo %s zde není přípustné."
+msgstr[1] "Mluvte slušně! Slova %s zde nejsou přípustná."
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Toto pole se musí shodovat s polem '%s'."
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "Prosíme, vložte něco alespoň pro jedno pole."
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "Prosíme, vložte obě pole, nebo je nechte obě prázdná."
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Toto pole musí být vyplněno, když %(field)s má %(value)s"
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Toto pole musí být vyplněno, když %(field)s nemá %(value)s"
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "Duplikátní hodnoty nejsou povolené."
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Tato hodnota musí být mocninou %s."
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "Prosíme, vložte platné číslo."
+
+#: core/validators.py:346
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
+msgstr[0] "Prosíme, vložte platné číslo s nejvíce %s cifrou celkem."
+msgstr[1] "Prosíme, vložte platné číslo s nejvíce %s ciframi celkem."
+
+#: core/validators.py:349
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+"Prosíme, vložte platné číslo s nejvíce %s cifrou za desetinnou čárkou celkem."
+msgstr[1] ""
+"Prosíme, vložte platné číslo s nejvíce %s ciframi za desetinnou čárkou "
+"celkem."
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Ujistěte se, že posílaný soubor je velký nejméně %s bytů."
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Ujistěte se, že posílaný soubor je velký nejvíce %s bytů."
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "Formát pro toto pole je špatný."
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "Toto pole není platné."
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Nemohl jsem získat nic z %s."
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "URL %(url)s vrátilo neplatnou hlavičku Content-Type '%(contenttype)s'."
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Prosíme, zavřete nezavřenou značku %(tag)s z řádky %(line)s. (Řádka začíná s "
+"\"%(start)s\".)"
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Nějaký text začínající na řádce %(line)s není povolen v tomto kontextu. "
+"(Řádka začíná s \"%(start)s\".)"
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"%(attr)s\" na řádce %(line)s je neplatný atribut. (Řádka začíná s \"%"
+"(start)s\".)"
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"<%(tag)s>\" na řádce %(line)s je neplatná značka. (Řádka začíná s \"%"
+"(start)s\".)"
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Značce na řádce %(line)s schází jeden nebo více požadovaných atributů. "
+"(Řádka začíná s \"%(start)s\".)"
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Atribut \"%(attr)s\" na řádce %(line)s má neplatnou hodnotu. (Řádka začína s "
+"\"%(start)s\".)"
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr "Oddělte více identifikátorů čárkami."
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Podržte  \"Control\", nebo \"Command\" na Macu pro vybrání více jak jedné "
+"položky."
diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..73ce9d0476
Binary files /dev/null and b/django/conf/locale/de/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..337076bae4
--- /dev/null
+++ b/django/conf/locale/de/LC_MESSAGES/django.po
@@ -0,0 +1,984 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Django 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-08 00:03+0200\n"
+"Last-Translator: Georg Bauer <gb@bofh.ms>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Start"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Geschichte"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Datum/Zeit"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Benutzer"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Aktion"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Dieses Objekt hat keine �nderungsgeschichte. Es wurde m�glicherweise nicht "
+"�ber diese Verwaltungsseiten angelegt."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django Systemverwaltung"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django Verwaltung"
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr "Serverfehler"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Serverfehler (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Serverfehler <em>(500)</em>"
+
+#: 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 ""
+"Es hat einen Fehler gegeben. Dieser Fehler wurde an die Serververwalter per "
+"eMail weitergegeben und sollte bald behoben sein. Vielen Dank f�r Ihr "
+"Verst�ndnis."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Seite nicht gefunden"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr ""
+"Es tut uns leid, aber die angeforderte Seite kann nicht gefunden werden."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Zuf�gen"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "�ndern"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Sie haben keine Berechtigung irgendwas zu �ndern."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "K�rzliche Aktionen"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Meine Aktionen"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Keine vorhanden"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Benutzername:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Passwort:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Haben Sie <a href=\"/password_reset/\">ihr Passwort vergessen</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Anmelden"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Willkommen,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Passwort �ndern"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Abmelden"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Die L�schung des %(object_name)s '%(object)s' h�tte die L�schung von "
+"abh�ngigen Daten zur Folge, aber Sie haben nicht die n�tigen Rechte um die "
+"folgenden abh�ngigen Daten zu l�schen:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"Sind Sie sicher, das Sie %(object_name)s \"%(object)s\" l�schen wollen? Es "
+"werden zus�tzlich die folgenden abh�ngigen Daten mit gel�scht:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "Ja, ich bin sicher"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Kennwort �ndern"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Erfolgreiche Kennwort�nderung"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Ihr Kennwort wurde ge�ndert."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Kennwort zur�cksetzen"
+
+#: 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 ""
+"Sie haben Ihr Kennwort vergessen? Geben Sie bitte Ihre eMail-Adresse ein und "
+"wir setzen das Kennwort auf einen neuen Wert und schicken den per eMail an "
+"Sie raus."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "eMail-Adresse:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Mein Kennwort zur�cksetzen"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Danke, dass Sie eine Weile bei uns waren."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Neu anmelden"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Erfolgreich Kennwort zur�ckgesetzt"
+
+#: 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 ""
+"Wir haben Ihnen ein neues Kennwort per eMail zugeschickt an die Adresse, die "
+"Sie uns gegeben haben. Es sollte in K�rze ankommen."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Bitte geben Sie aus Sicherheitsgr�nden erst Ihr altes Kennwort und darunter "
+"dann zweimal (um sicherzustellen, das Sie es korrekt eingegeben haben) das "
+"neue Kennwort ein."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "altes Kennwort:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "neues Kennwort:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Kennwortwiederholung:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Mein Kennwort �ndern"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Sie erhalten diese Mail, weil Sie ein neues Kennwort"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "f�r ihren Benutzer bei %(site_name)s angefordert haben."
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Ihr neues Kennwort ist: %(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 "Sie k�nnen das Kennwort auf folgender Seite �ndern:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Ihr Benutzername, falls Sie ihn vergessen haben:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Vielen Dank, das Sie unsere Seiten benutzen!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Das Team von %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "Zeit der Aktion"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "Objekt ID"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "Objekt Darst."
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "Aktionskennzeichen"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "�nderungsmeldung"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "Logeintrag"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "Logeintr�ge"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Montag"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Freitag"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Samstag"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Januar"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Februa"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "M�rz"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "April"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Mai"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Juni"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Juli"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "August"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "September"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Oktober"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "November"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Dezember"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Jan."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Feb."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Aug."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Sept."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Okt."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Dez."
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "Domainname"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "Anzeigename"
+
+#: models/core.py:8
+msgid "site"
+msgstr "Website"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "Websites"
+
+#: models/core.py:22
+msgid "label"
+msgstr "Label"
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr "Name"
+
+#: models/core.py:25
+msgid "package"
+msgstr "Paket"
+
+#: models/core.py:26
+msgid "packages"
+msgstr "Pakete"
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "Python Modulname"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "Inhaltstyp"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "Inhaltstypen"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "Umleitung von"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Hier sollte ein absoluter Pfad stehen, ohne den Domainnamen. Beispiel: '/"
+"events/search/'."
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "Umleitung zu"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Hier mus entweder ein absoluter Pfad oder eine komplette URL mit http:// am "
+"Anfang stehen."
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "Umleitung"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "Umleitungen"
+
+#: models/core.py:81
+msgid "URL"
+msgstr "URL"
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Beispiel: '/about/contact/'. Wichtig: vorne und hinten muss ein / stehen."
+
+#: models/core.py:83
+msgid "title"
+msgstr "Titel"
+
+#: models/core.py:84
+msgid "content"
+msgstr "Inhalt"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "Kommentare aktivieren"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "Name der Vorlage"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"Beispiel: 'flatfiles/contact_page'. Wenn dieses Feld nicht gef�llt ist, wird "
+"'flatfiles/default' als Standard gew�hlt."
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "Registrierung erforderlich"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Wenn hier ein Haken ist, k�nnen nur angemeldete Benutzer diese Seite sehen."
+
+#: models/core.py:92
+msgid "flat page"
+msgstr "Webseite"
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr "Webseiten"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "Sitzungs-ID"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "Sitzungsdaten"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "Ablaufdatum"
+
+#: models/core.py:118
+msgid "session"
+msgstr "Sitzung"
+
+#: models/core.py:119
+msgid "sessions"
+msgstr "Sitzungen"
+
+#: models/auth.py:8
+msgid "codename"
+msgstr "Codename"
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "Berechtigung"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "Berechtigungen"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "Gruppe"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "Gruppen"
+
+#: models/auth.py:33
+msgid "username"
+msgstr "Benutzername"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "Vorname"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "Nachname"
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr "eMail-Adresse"
+
+#: models/auth.py:37
+msgid "password"
+msgstr "Passwort"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "Nicht das Passwort selber eintragen, sondern dessen MD5 signatur."
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr "Administrator"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+"Gibt an, ob der Benutzer sich an der Administrationsseite anmelden kann."
+
+#: models/auth.py:39
+msgid "active"
+msgstr "Aktiv"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "Hauptadmin."
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "letzte Anmeldung"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "Mitglied seit"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Zus�tzlich zu den manuell angelegten Rechten erh�lt dieser Benutzer auch "
+"alle Rechte, die seine zugewiesenen Gruppen haben."
+
+#: models/auth.py:48
+msgid "Users"
+msgstr "Benutzer"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "Pers�nliche Infos"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "Wichtige Daten"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "Mitteilung"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr "Tschechisch"
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "Deutsch"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "Englisch"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "Spanisch"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "Franz�sisch"
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr "Galicisch"
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr "Italienisch"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "Brasilianisch"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "Russisch"
+
+#: conf/global_settings.py:46
+msgid "Serbian"
+msgstr "Serbisch"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Der Wert darf nur Buchstaben, Ziffern und Unterstriche enthalten."
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr ""
+"Der Wert darf nur Buchstaben, Ziffern, Unterstriche und Schr�gstriche "
+"enthalten."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "Gro�buchstaben sind hier nicht erlaubt."
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "Kleinbuchstaben sind hier nicht erlaubt."
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "Hier sind nur durch Komma getrennte Ziffern erlaubt."
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Bitte mit Komma getrennte, g�ltige eMail-Adressen eingeben."
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "Bitte eine g�ltige IP-Adresse eingeben."
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "Dieses Feld darf nicht leer sein."
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Nichtnumerische Zeichen sind hier nicht erlaubt."
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "Dieser Wert darf nicht nur aus Ziffern bestehen."
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "Bitte eine ganze Zahl eingeben."
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "Nur alphabetische Zeichen sind hier erlaubt."
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Bitte ein g�ltiges Datum im Format JJJJ-MM-TT eingeben."
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "Bitte eine g�ltige Zeit im Format SS:MM eingeben."
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+"Bitte eine g�ltige Datum+Zeit Angabe im Format JJJJ-MM-TT SS:MM eingeben."
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "Bitte eine g�ltige eMail-Adresse eingeben"
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Bitte ein Bild hochladen. Die Datei, die hochgeladen wurde, ist kein Bild "
+"oder ist defekt."
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "Die URL %s zeigt nicht auf ein g�ltiges Bild."
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Telefonnummern m�ssen im Format XXX-XXX-XXXX sein. \"%s\" ist ung�ltig."
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "Die URL %s zeigt nicht auf ein g�ltiges QuickTime video."
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "Eine g�ltige URL ist hier verlangt."
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Bitte g�ltiges HTML eingeben. Fehler sind:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Ung�ltiges XML: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Ung�ltige URL: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "Die URL %s funktioniert nicht."
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Bitte eine g�ltige Abk�rzung f�r einen US-Staat eingeben."
+
+#: core/validators.py:226
+#, 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] "Keine Schimpfworte! Das Wort %s ist hier nicht gern gesehen!"
+msgstr[1] "Keine Schimpfworte! Die W�rter %s sind hier nicht gern gesehen!"
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Dieses Feld muss zum Feld '%s' passen."
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "Bitte mindestens eins der Felder ausf�llen."
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "Bitte entweder beide Felder ausf�llen, oder beide leer lassen."
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr ""
+"Dieses Feld muss gef�llt sein, wenn Feld %(field)s den Wert %(value)s hat."
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr ""
+"Dieses Feld muss gef�llt sein, wenn Feld %(field)s nicht %(value)s ist."
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "Doppelte Werte sind hier nicht erlaubt."
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Dieser Wert muss eine Potenz von %s sein."
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "Bitte eine g�ltige Dezimalzahl eingeben."
+
+#: core/validators.py:346
+#, 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] "Bitte eine g�ltige Dezimalzahl mit maximal %s Ziffer eingeben."
+msgstr[1] "Bitte eine g�ltige Dezimalzahl mit maximal %s Ziffern eingeben."
+
+#: core/validators.py:349
+#, 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] ""
+"Bitte eine g�ltige Dezimalzahl mit maximal %s Dezimalstelle  eingeben."
+msgstr[1] ""
+"Bitte eine g�ltige Dezimalzahl mit maximal %s Dezimalstellen eingeben."
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+"Bitte sicherstellen, da� die hochgeladene Datei mindestens %s Bytes gross "
+"ist."
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+"Bitte sicherstellen, da� die hochgeladene Datei maximal %s Bytes gross ist."
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "Das Format f�r dieses Feld ist falsch."
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "Dieses Feld ist ung�ltig."
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Konnte nichts von %s empfangen."
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "Die URL %(url)s lieferte den falschen Content-Type '%(contenttype)s'."
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Bitte das ungeschlossene %(tag)s Tag in Zeile %(line)s schlie�en. Die Zeile "
+"beginnt mit \"%(start)s\"."
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"In Zeile %(line)s ist Text, der nicht in dem Kontext erlaubt ist. Die Zeile "
+"beginnt mit \"%(start)s\"."
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"Das Attribute %(attr)s in Zeile %(line)s ist ung�ltig. Die Zeile beginnt mit "
+"\"%(start)s\"."
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"<%(tag)s> in Zeile %(line)s ist ung�ltig. Die Zeile beginnt mit \"%(start)s"
+"\"."
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Ein Tag in Zeile %(line)s hat eines oder mehrere Pflichtattribute nicht. Die "
+"Zeile beginnt mit \"%(start)s\"."
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Das Attribut %(attr)s in Zeile %(line)s hat einen ung�ltigen Wert. Die Zeile "
+"beginnt mit \"%(start)s\"."
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr "Mehrere IDs k�nnen mit Komma getrennt werden."
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+" Um mehr als eine Selektion zu treffen, \"Control\" oder auf dem Mac "
+"\"Command\" beim Klicken gedr�ckt halten."
diff --git a/django/conf/locale/en/LC_MESSAGES/django.mo b/django/conf/locale/en/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..ba26220d0e
Binary files /dev/null and b/django/conf/locale/en/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/en/LC_MESSAGES/django.po b/django/conf/locale/en/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..539b8b5015
--- /dev/null
+++ b/django/conf/locale/en/LC_MESSAGES/django.po
@@ -0,0 +1,927 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr ""
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "N j, Y, P"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr ""
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:4
+msgid "Server error"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr ""
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr ""
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr ""
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr ""
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr ""
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr ""
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr ""
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr ""
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr ""
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr ""
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "January"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "February"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr ""
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "August"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "September"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "October"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "November"
+msgstr ""
+
+#: utils/dates.py:16
+msgid "December"
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr ""
+
+#: models/core.py:5
+msgid "domain name"
+msgstr ""
+
+#: models/core.py:6
+msgid "display name"
+msgstr ""
+
+#: models/core.py:8
+msgid "site"
+msgstr ""
+
+#: models/core.py:9
+msgid "sites"
+msgstr ""
+
+#: models/core.py:22
+msgid "label"
+msgstr ""
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr ""
+
+#: models/core.py:25
+msgid "package"
+msgstr ""
+
+#: models/core.py:26
+msgid "packages"
+msgstr ""
+
+#: models/core.py:36
+msgid "python module name"
+msgstr ""
+
+#: models/core.py:38
+msgid "content type"
+msgstr ""
+
+#: models/core.py:39
+msgid "content types"
+msgstr ""
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr ""
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr ""
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: models/core.py:67
+msgid "redirect"
+msgstr ""
+
+#: models/core.py:68
+msgid "redirects"
+msgstr ""
+
+#: models/core.py:81
+msgid "URL"
+msgstr ""
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: models/core.py:83
+msgid "title"
+msgstr ""
+
+#: models/core.py:84
+msgid "content"
+msgstr ""
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr ""
+
+#: models/core.py:86
+msgid "template name"
+msgstr ""
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+
+#: models/core.py:88
+msgid "registration required"
+msgstr ""
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: models/core.py:92
+msgid "flat page"
+msgstr ""
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr ""
+
+#: models/core.py:114
+msgid "session key"
+msgstr ""
+
+#: models/core.py:115
+msgid "session data"
+msgstr ""
+
+#: models/core.py:116
+msgid "expire date"
+msgstr ""
+
+#: models/core.py:118
+msgid "session"
+msgstr ""
+
+#: models/core.py:119
+msgid "sessions"
+msgstr ""
+
+#: models/auth.py:8
+msgid "codename"
+msgstr ""
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr ""
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr ""
+
+#: models/auth.py:22
+msgid "Group"
+msgstr ""
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr ""
+
+#: models/auth.py:33
+msgid "username"
+msgstr ""
+
+#: models/auth.py:34
+msgid "first name"
+msgstr ""
+
+#: models/auth.py:35
+msgid "last name"
+msgstr ""
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr ""
+
+#: models/auth.py:37
+msgid "password"
+msgstr ""
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr ""
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr ""
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: models/auth.py:39
+msgid "active"
+msgstr ""
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr ""
+
+#: models/auth.py:41
+msgid "last login"
+msgstr ""
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr ""
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: models/auth.py:48
+msgid "Users"
+msgstr ""
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr ""
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr ""
+
+#: models/auth.py:182
+msgid "Message"
+msgstr ""
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr ""
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr ""
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr ""
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr ""
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr ""
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr ""
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr ""
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr ""
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr ""
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr ""
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr ""
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr ""
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr ""
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr ""
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr ""
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr ""
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr ""
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr ""
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr ""
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr ""
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr ""
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr ""
+
+#: core/validators.py:226
+#, 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] ""
+msgstr[1] ""
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr ""
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr ""
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr ""
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr ""
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr ""
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr ""
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr ""
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr ""
+
+#: core/validators.py:346
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:349
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr ""
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr ""
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr ""
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr ""
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
diff --git a/django/conf/locale/es/LC_MESSAGES/django.mo b/django/conf/locale/es/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..71a633795c
Binary files /dev/null and b/django/conf/locale/es/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/es/LC_MESSAGES/django.po b/django/conf/locale/es/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..7a00bc51a3
--- /dev/null
+++ b/django/conf/locale/es/LC_MESSAGES/django.po
@@ -0,0 +1,959 @@
+# translation of django.po to Espa�ol
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Ricardo Javier C�rdenes Medina <ricardo.cardenes@gmail.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-04 20:59GMT\n"
+"Last-Translator: Ricardo Javier C�rdenes Medina <ricardo.cardenes@gmail."
+"com>\n"
+"Language-Team: Espa�ol <es@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.10.2\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Inicio"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Hist�rico"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Fecha/hora"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Usuario"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Acci�n"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Este objeto no tiene hist�rico de cambios. Probablemente no fue a�adido "
+"usando este sitio de administraci�n."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Sitio de administraci�n de Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administraci�n de Django"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Error del servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Error del servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Error de servidor <em>(500)</em>"
+
+#: 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 ""
+"Ha ocurrido un error. Se ha informado a los administradores del sitio "
+"mediante correo electr�nico y deber�a arreglarse en breve. Gracias por su "
+"paciencia"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "P�gina no encontrada"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Lo sentimos, pero no se encuentra la p�gina solicitada."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Agregar"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Modificar"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "No tiene permiso para editar nada."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Acciones recientes"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Mis acciones"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Ninguno disponible"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Usuario:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Clave:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "�Ha <a href=\"/password_reset/\">olvidado su clave</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Registrarse"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Bienvenido,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Cambiar clave"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Terminar"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Eliminar el %(object_name)s '%(object)s' provocar�a la eliminaci�n de "
+"objetos relacionados, pero su cuenta no tiene permiso para borrar los "
+"siguientes tipos de objetos:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"�Est� seguro de que quiere borrar los %(object_name)s \"%(object)s\"? Se "
+"borrar�n los siguientes objetos relacionados:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "S�, estoy seguro"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Cambiar clave"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Cambio de clave con �xito"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Su clave ha cambiado."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Recuperar clave"
+
+#: 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 ""
+"�Ha olvidado su clave? Introduzca su direcci�n de correo, y crearemos una "
+"nueva que le enviaremos por correo."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Direcci�n de correo:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Recuperar mi clave"
+
+#: 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."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Registrarse de nuevo"
+
+#: 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 con �xito"
+
+#: 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 "
+"recibirla en breve."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Por favor, introduzca su clave antigua, por seguridad, y despu�s introduzca "
+"la nueva clave dos veces para verificar que la ha escrito correctamente."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Clave antigua:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Clave nueva:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirme clave:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Cambiar mi clave"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Recibe este mensaje debido a que solicit� recuperar la clave"
+
+#: 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."
+
+#: 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"
+
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
+msgstr "Puede cambiarla accediendo a esta p�gina:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Su nombre de usuario, en caso de haberlo olvidado:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "�Gracias por usar nuestro sitio!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "El equipo de %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+#, fuzzy
+msgid "action time"
+msgstr "Fecha/hora"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr ""
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "January"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "February"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr ""
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "August"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "September"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "October"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "November"
+msgstr ""
+
+#: utils/dates.py:16
+msgid "December"
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr ""
+
+#: models/core.py:5
+msgid "domain name"
+msgstr ""
+
+#: models/core.py:6
+msgid "display name"
+msgstr ""
+
+#: models/core.py:8
+msgid "site"
+msgstr ""
+
+#: models/core.py:9
+msgid "sites"
+msgstr ""
+
+#: models/core.py:22
+msgid "label"
+msgstr ""
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+#, fuzzy
+msgid "name"
+msgstr "Usuario:"
+
+#: models/core.py:25
+msgid "package"
+msgstr ""
+
+#: models/core.py:26
+msgid "packages"
+msgstr ""
+
+#: models/core.py:36
+msgid "python module name"
+msgstr ""
+
+#: models/core.py:38
+msgid "content type"
+msgstr ""
+
+#: models/core.py:39
+msgid "content types"
+msgstr ""
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr ""
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr ""
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: models/core.py:67
+msgid "redirect"
+msgstr ""
+
+#: models/core.py:68
+msgid "redirects"
+msgstr ""
+
+#: models/core.py:81
+msgid "URL"
+msgstr ""
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: models/core.py:83
+msgid "title"
+msgstr ""
+
+#: models/core.py:84
+msgid "content"
+msgstr ""
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr ""
+
+#: models/core.py:86
+msgid "template name"
+msgstr ""
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+
+#: models/core.py:88
+msgid "registration required"
+msgstr ""
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: models/core.py:92
+msgid "flat page"
+msgstr ""
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr ""
+
+#: models/core.py:114
+msgid "session key"
+msgstr ""
+
+#: models/core.py:115
+msgid "session data"
+msgstr ""
+
+#: models/core.py:116
+msgid "expire date"
+msgstr ""
+
+#: models/core.py:118
+msgid "session"
+msgstr ""
+
+#: models/core.py:119
+msgid "sessions"
+msgstr ""
+
+#: models/auth.py:8
+msgid "codename"
+msgstr ""
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr ""
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr ""
+
+#: models/auth.py:22
+msgid "Group"
+msgstr ""
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr ""
+
+#: models/auth.py:33
+#, fuzzy
+msgid "username"
+msgstr "Usuario:"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr ""
+
+#: models/auth.py:35
+msgid "last name"
+msgstr ""
+
+#: models/auth.py:36
+#, fuzzy
+msgid "e-mail address"
+msgstr "Direcci�n de correo:"
+
+#: models/auth.py:37
+#, fuzzy
+msgid "password"
+msgstr "Clave:"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr ""
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr ""
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: models/auth.py:39
+msgid "active"
+msgstr ""
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr ""
+
+#: models/auth.py:41
+msgid "last login"
+msgstr ""
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr ""
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: models/auth.py:48
+#, fuzzy
+msgid "Users"
+msgstr "Usuario"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr ""
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr ""
+
+#: models/auth.py:182
+msgid "Message"
+msgstr ""
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr ""
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr ""
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr ""
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr ""
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Este valor debe contener s�lo letras, n�meros y gui�n bajo."
+
+#: core/validators.py:62
+#, fuzzy
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr "Este valor debe contener s�lo letras, n�meros y gui�n bajo."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr ""
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr ""
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr ""
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr ""
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr ""
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr ""
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr ""
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr ""
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+
+#: core/validators.py:137
+#, fuzzy
+msgid "Enter a valid e-mail address."
+msgstr "Direcci�n de correo:"
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr ""
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr ""
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr ""
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr ""
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr ""
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr ""
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr ""
+
+#: core/validators.py:226
+#, 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] ""
+msgstr[1] ""
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr ""
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr ""
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr ""
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr ""
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr ""
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr ""
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr ""
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr ""
+
+#: core/validators.py:346
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:349
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr ""
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr ""
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr ""
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr ""
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+
+#~ msgid "Server error <em>(500)</em>"
+#~ msgstr "Error del servidor <em>(500)</em>"
+
+#~ msgid "Click to change"
+#~ msgstr "Cambie para modificar"
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.mo b/django/conf/locale/fr/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..64ab862e5b
Binary files /dev/null and b/django/conf/locale/fr/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/fr/LC_MESSAGES/django.po b/django/conf/locale/fr/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..6e88cc51f4
--- /dev/null
+++ b/django/conf/locale/fr/LC_MESSAGES/django.po
@@ -0,0 +1,995 @@
+# translation of django.po to french
+# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
+# Laurent Rahuel <laurent.rahuel@gmail.com>, 2005.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-18 12:27+0200\n"
+"Last-Translator: Laurent Rahuel <laurent.rahuel@gmail.com>\n"
+"Language-Team: fran�ais <fr@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Accueil"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Historique"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Date/Heure"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Utilisateur"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Action"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Cet objet n'a pas d'historique de modification. Il n'a probablement pas �t� "
+"ajout� au moyen de ce site d'administration."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Site d'administration de Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administration de Django"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Erreur du serveur (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Erreur du serveur (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Erreur du serveur <em>(500)</em>"
+
+#: 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 ""
+"Une erreur est survenue. Elle a �t� transmise par courriel aux "
+"administrateurs du site et sera corrig�e dans les meilleurs d�lais. Merci "
+"pour votre patience."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Cette page n'a pas �t� trouv�e"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Nous sommes d�sol�s, mais la page demand�e est introuvable."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Ajouter"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Modifier"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Vous n'avez pas la permission d'�diter quoi que ce soit."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Actions r�centes"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Mes actions"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Aucun(e) disponible"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Nom d'utilisateur"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Mot de passe"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Avez vous <a href=\"/password_reset/\">perdu votre mot de passe</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Connectez vous"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Bienvenue,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Modifier votre mot de passe"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "D�connection"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Supprimer %(object_name)s '%(object)s' provoquerait la suppression des "
+"objets qui lui sont li�s mais votre compte ne poss�de pas la permission de "
+"supprimer les types d'objets suivants:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"�tes vous certain de vouloir supprimer %(object_name)s \"%(object)s\"? Tous "
+"les �l�ments li�s suivants seront supprim�s:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "Oui, je suis certain"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Modification de votre mot de passe"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Mot de passe modifi� avec succ�s"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Votre mot de passe a �t� modifi�."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "R�initialisation de votre mot de passe"
+
+#: 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 ""
+"Mot de passe perdu ? Saisissez votre adresse de courriel ci-dessous et nous "
+"annulerons votre mot de passe actuel avant de vous en faire parvenir un "
+"nouveau par courriel."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Courriel:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "R�initialiser mon mot de passe"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Merci pour le temps que vous avez accord� au site aujourd'hui."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Connectez vous � nouveau"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Mot de passe r�initialis� avec succ�s"
+
+#: 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 ""
+"Nous vous avons envoy� par courriel un nouveau mot de passe. Vous devriez le "
+"recevoir rapidement."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Pour des raisons de s�curit�, veuillez entrer votre ancien mot de passe puis "
+"saisissez deux fois votre nouveau mot de passe afin que nous puissions "
+"v�rifier que vous l'avez tap� correctement."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Ancien mot de passe:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nouveau mot de passe:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirmation de votre nouveau mot de passe"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Modifier mon mot de passe"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+"Vous recevez ce courriel car vous avez demand� un changement de mot de passe"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "pour votre compte du site %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Votre nouveau mot de passe est: %(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 "Vous pouvez modifier ce mot de passe � l'adresse suivante:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Votre nom d'utilisateur, en cas d'oubli:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Merci d'utiliser notre site!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "L'�quipe %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "heure de l'action"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "id de l'objet"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "repr de l'objet"
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "drapeau de l'action"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "message de modification"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "entr�e de log"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "entr�es de log"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Lundi"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Mardi"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Mercredi"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Jeudi"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Vendredi"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Samedi"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Dimanche"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Janvier"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "F�vrier"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Mars"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Avril"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Mai"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Juin"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Juillet"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "A�ut"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Septembre"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Octobre"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembre"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "D�cembre"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Jan."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "F�v."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "A�ut"
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Sept."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Oct."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "D�c."
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "nom de domaine"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "nom � afficher"
+
+#: models/core.py:8
+msgid "site"
+msgstr "site"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "sites"
+
+#: models/core.py:22
+msgid "label"
+msgstr "intitul�"
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr "nom"
+
+#: models/core.py:25
+msgid "package"
+msgstr "paquetage"
+
+#: models/core.py:26
+msgid "packages"
+msgstr "paquetages"
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "nom du module python"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "type de contenu"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "types de contenu"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "redirig� depuis"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Ceci doit �tre un chemin absolu, sans nom de domaine. Par exemple: '/events/"
+"search/'."
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "redirig� vers"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Ceci peut �tre soit un chemin absolu (voir ci-dessus) soit une URL compl�te "
+"d�butant par 'http://'."
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "redirection"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "redirections"
+
+#: models/core.py:81
+msgid "URL"
+msgstr "URL"
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Par exemple : '/about/contact/'. V�rifiez la pr�sence du caract�re '/' en "
+"d�but et en fin de chaine."
+
+#: models/core.py:83
+msgid "title"
+msgstr "titre"
+
+#: models/core.py:84
+msgid "content"
+msgstr "contenu"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "autoriser les commentaires"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "nom du template"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"Par exemple: 'flatfiles/contact_page'. Sans d�finition, le syst�me utilisera "
+"'flatfiles/default'."
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "enregistrement requis"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Si coch�, seuls les utilisateurs connect�s auront la possibilit� de voir "
+"cette page."
+
+#: models/core.py:92
+msgid "flat page"
+msgstr "page � plat"
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr "pages � plat"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "cl� de session"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "donn�e de session"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "date d'expiration"
+
+#: models/core.py:118
+msgid "session"
+msgstr "session"
+
+#: models/core.py:119
+msgid "sessions"
+msgstr "sessions"
+
+#: models/auth.py:8
+msgid "codename"
+msgstr "nom de code"
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "Permission"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "Permissions"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "Groupe"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "Groupes"
+
+#: models/auth.py:33
+msgid "username"
+msgstr "nom d'utilisateur"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "pr�nom"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "nom"
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr "courriel"
+
+#: models/auth.py:37
+msgid "password"
+msgstr "mot de passe"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "Utilisez une chaine crypt�e MD5 -- pas un mot de passe en clair."
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr "statut staff"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr "Pr�cise si l'utilisateur peut se connecter � ce site d'administration."
+
+#: models/auth.py:39
+msgid "active"
+msgstr "actif"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "statut superuser"
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "derni�re connection"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "date d'inscription"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"En plus des permissions qui lui sont manuellement assign�es, cet utilisateur "
+"recevra aussi toutes les permissions de tous les groupes auquels il "
+"appartient. "
+
+#: models/auth.py:48
+msgid "Users"
+msgstr "Utilisateurs"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "Information personnelle"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "Dates importantes"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "Message"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr "Tch�que"
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "Allemand"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "Anglais"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "Espagnol"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "Fran�ais"
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr "Galicien"
+
+#: conf/global_settings.py:43
+#, fuzzy
+msgid "Italian"
+msgstr "Italien"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "Br�silien"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "Russe"
+
+#: conf/global_settings.py:46
+#, fuzzy
+msgid "Serbian"
+msgstr "Serbe"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr ""
+"Ce champ ne doit contenir que des lettres, des nombres et des sous-tirets."
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr ""
+"Ce champ ne doit contenir que des lettres, des nombres, des sous-tirets et "
+"des '/'."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "Les lettres majuscules ne sont pas autoris�es ici."
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "Les lettres minuscules ne sont pas autoris�es ici."
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "Seulement des chiffres ([0-9]), s�par�s par des virgules."
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Entrez des adresses de courriel valides s�par�es par des virgules."
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "Entrez une adresse IP valide."
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "Vous ne pouvez pas laisser ce champ vide."
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Les caract�res non num�riques ne sont pas autoris�s ici."
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "Cette valeur ne peut contenir que des chiffres [0-9]."
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "Entrez un nombre entier."
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "Seules les lettres de l'alphabet sont autoris�es ici."
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Entrez une date valide au format AAAA-MM-JJ."
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "Entrez une heure valide au format HH:MM."
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Entrez une date et une heure valide au format AAAA-MM-JJ HH:MM."
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "Entrez une adresse de courriel valide."
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Envoyez une image valide. Le fichier que vous avez transfer� n'est pas une "
+"image ou bien est une image corrompue."
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "L'URL %s ne pointe pas vers une image valide."
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Les num�ros de t�l�phone doivent �tre au format XX XX XX XX XX. \"%s\" est "
+"incorrect."
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "L'URL %s ne pointe pas vers une vid�o QuickTime valide."
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "Une URL valide est requise."
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Du HTML valide est requis. Les erreurs sp�cifiques sont:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML mal form�: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL invalide: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "L'URL %s est un lien cass�."
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Entrez une abr�viation d'�tat am�ricain valide."
+
+#: core/validators.py:226
+#, 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] "Attention � votre langage,! Le mot %s n'est pas autoris� ici."
+msgstr[1] "Attention � votre langage,! Les mots %s ne sont pas autoris�s ici."
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Ce champ doit correspondre au champ '%s'."
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "S'il vous pla�t, saisissez au moins une valeur dans un des champs."
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "S'il vous pla�t, renseignez chaque champ ou laissez les deux vides."
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Ce champ doit �tre renseign� si %(field)s vaut %(value)s"
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Ce champ doit �tre renseign� si %(field)s ne vaut pas %(value)s"
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "Des valeurs identiques ne sont pas autoris�es."
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Cette valeur doit �tre une puissance de %s."
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "S'il vous pla�t, saisissez un nombre d�cimal valide."
+
+#: core/validators.py:346
+#, 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] ""
+"S'il vous pla�t, saisissez un nombre d�cimal valide avec au plus %s chiffre."
+msgstr[1] ""
+"S'il vous pla�t, saisissez un nombre d�cimal valide avec au plus %s chiffres."
+
+#: core/validators.py:349
+#, 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] ""
+"S'il vous pla�t, saisissez un nombre d�cimal valide avec au plus %s d�cimale"
+msgstr[1] ""
+"S'il vous pla�t, saisissez un nombre d�cimal valide avec au plus %s d�cimales"
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+"V�rifiez que le fichier transf�r� fait au moins une taille de %s octets."
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+"V�rifiez que le fichier transf�r� fait au plus une taille de %s octets."
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "Le format de ce champ est mauvais."
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "Ce champ est invalide."
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Impossible de r�cup�rer quoi que ce soit depuis %s."
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"L'ent�te Content-Type '%(contenttype)s', renvoy�e par l'url %(url)s n'est "
+"pas valide."
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Veuillez fermer le tag %(tag)s de la ligne %(line)s. (La ligne d�butant par "
+"\"%(start)s\".)"
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Du texte commen�ant � la ligne %(line)s n'est pas autoris� dans ce contexte. "
+"(Ligne d�butant par \"%(start)s\".)"
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"%(attr)s\" ligne %(line)s n'est pas un attribut valide. (Ligne d�butant "
+"par \"%(start)s\".)"
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"<%(tag)s>\" ligne %(line)s n'est pas un tag valide. (Ligne d�butant par \"%"
+"(start)s\".)"
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Un tag, ou un ou plusieurs attributs, de la ligne %(line)s est manquant. "
+"(Ligne d�butant par \"%(start)s\".)"
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"La valeur de l'attribut \"%(attr)s\" de la ligne %(line)s n'est pas valide. "
+"(Ligne d�butant par \"%(start)s\".)"
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr "S�parez les ID par des virgules."
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+"Maintenez \"Control\", or \"Command\" sur un Mac, pour en s�lectionner plus "
+"d'une."
+
+#~ msgid "Messages"
+#~ msgstr "Messages"
diff --git a/django/conf/locale/gl/LC_MESSAGES/django.mo b/django/conf/locale/gl/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..b16c2bad9b
Binary files /dev/null and b/django/conf/locale/gl/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/gl/LC_MESSAGES/django.po b/django/conf/locale/gl/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..504316742c
--- /dev/null
+++ b/django/conf/locale/gl/LC_MESSAGES/django.po
@@ -0,0 +1,955 @@
+# Translation of django.po to Galego
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Afonso Fernández Nogueira <fonzzo.django@gmail.com>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-16 14:29+0100\n"
+"Last-Translator: Afonso Fernández Nogueira <fonzzo.django@gmail.com>\n"
+"Language-Team: Galego\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Galician\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Inicio"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Histórico"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Data/hora"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Usuario"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Acción"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Este obxecto non ten histórico de cambios. Posibelmente non se creou usando "
+"este sitio de administración."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Administración de sitio Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administración de Django"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Erro do servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Erro do servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Erro do servidor <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"Houbo un erro. Xa se informou aos administradores do sitio por correo "
+"electrónico e debería quedar arranxado pronto. Grazas pola súa paciencia."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Páxina non atopada"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Sentímolo, pero non se atopou a páxina solicitada."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Engadir"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Modificar"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Non ten permiso para editar nada."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Accións recentes"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "As miñas accións"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Ningunha dispoñíbel"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Usuario:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Contrasinal:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "<a href=\"/password_reset/\">Esqueceu o contrasinal</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Entrar"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Benvido,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Cambiar contrasinal"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Saír"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Borrar o %(object_name)s '%(object)s' resultaría na eliminación de obxectos "
+"relacionados, pero a súa conta non ten permiso para borrar os seguintes "
+"tipos de obxectos:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"Seguro que quere borrar o %(object_name)s \"%(object)s\"? Eliminaranse os "
+"seguintes obxectos relacionados:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "Si, estou seguro"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Cambiar o contrasinal"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "O seu contrasinal cambiouse correctamente."
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Cambiouse o seu contrasinal."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Recuperar o contrasinal"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+"Esqueceu o contrasinal? Introduza o seu enderezo de correo electrónico "
+"embaixo e enviarémoslle un novo contrasinal."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Enderezo de correo electrónico:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Recuperar o meu contrasinal"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Grazas polo tempo que dedicou ao sitio web."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Entrar de novo"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "O contrasinal foi recuperado correctamente"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"Acabamos de enviarlle un novo contrasinal ao enderezo de correo indicado. "
+"Debería recibilo en breve."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Por razóns de seguridade, introduza o contrasinal actual. Despois introduza "
+"dúas veces o contrasinal para verificarmos que o escribiu correctamente."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Contrasinal actual:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Contrasinal novo:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirmar contrasinal:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Cambiar o contrasinal"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Recibe esta mensaxe porque solicitou recuperar o contrasinal"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "para a súa conta de usuario en %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "O seu novo contrasinal é: %(new_password)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
+msgstr "Pode cambiar este contrasinal visitando esta páxina:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "No caso de que o esquecese, o seu nome de usuario é:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Grazas por usar o noso sitio web!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "O equipo de %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+#, fuzzy
+msgid "action time"
+msgstr "Data/hora"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr ""
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "January"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "February"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr ""
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "August"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "September"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "October"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "November"
+msgstr ""
+
+#: utils/dates.py:16
+msgid "December"
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr ""
+
+#: models/core.py:5
+msgid "domain name"
+msgstr ""
+
+#: models/core.py:6
+msgid "display name"
+msgstr ""
+
+#: models/core.py:8
+msgid "site"
+msgstr ""
+
+#: models/core.py:9
+msgid "sites"
+msgstr ""
+
+#: models/core.py:22
+msgid "label"
+msgstr ""
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+#, fuzzy
+msgid "name"
+msgstr "Usuario:"
+
+#: models/core.py:25
+msgid "package"
+msgstr ""
+
+#: models/core.py:26
+msgid "packages"
+msgstr ""
+
+#: models/core.py:36
+msgid "python module name"
+msgstr ""
+
+#: models/core.py:38
+msgid "content type"
+msgstr ""
+
+#: models/core.py:39
+msgid "content types"
+msgstr ""
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr ""
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr ""
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: models/core.py:67
+msgid "redirect"
+msgstr ""
+
+#: models/core.py:68
+msgid "redirects"
+msgstr ""
+
+#: models/core.py:81
+msgid "URL"
+msgstr ""
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: models/core.py:83
+msgid "title"
+msgstr ""
+
+#: models/core.py:84
+msgid "content"
+msgstr ""
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr ""
+
+#: models/core.py:86
+msgid "template name"
+msgstr ""
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+
+#: models/core.py:88
+msgid "registration required"
+msgstr ""
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: models/core.py:92
+msgid "flat page"
+msgstr ""
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr ""
+
+#: models/core.py:114
+msgid "session key"
+msgstr ""
+
+#: models/core.py:115
+msgid "session data"
+msgstr ""
+
+#: models/core.py:116
+msgid "expire date"
+msgstr ""
+
+#: models/core.py:118
+msgid "session"
+msgstr ""
+
+#: models/core.py:119
+msgid "sessions"
+msgstr ""
+
+#: models/auth.py:8
+msgid "codename"
+msgstr ""
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr ""
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr ""
+
+#: models/auth.py:22
+msgid "Group"
+msgstr ""
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr ""
+
+#: models/auth.py:33
+#, fuzzy
+msgid "username"
+msgstr "Usuario:"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr ""
+
+#: models/auth.py:35
+msgid "last name"
+msgstr ""
+
+#: models/auth.py:36
+#, fuzzy
+msgid "e-mail address"
+msgstr "Enderezo de correo electrónico:"
+
+#: models/auth.py:37
+#, fuzzy
+msgid "password"
+msgstr "Contrasinal:"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr ""
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr ""
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: models/auth.py:39
+msgid "active"
+msgstr ""
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr ""
+
+#: models/auth.py:41
+msgid "last login"
+msgstr ""
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr ""
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: models/auth.py:48
+#, fuzzy
+msgid "Users"
+msgstr "Usuario"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr ""
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr ""
+
+#: models/auth.py:182
+msgid "Message"
+msgstr ""
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr ""
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr ""
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr ""
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr ""
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Este valor soamente pode conter letras, números e guións baixos (_)."
+
+#: core/validators.py:62
+#, fuzzy
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr "Este valor soamente pode conter letras, números e guións baixos (_)."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr ""
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr ""
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr ""
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr ""
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr ""
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr ""
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr ""
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr ""
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+
+#: core/validators.py:137
+#, fuzzy
+msgid "Enter a valid e-mail address."
+msgstr "Enderezo de correo electrónico:"
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr ""
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr ""
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr ""
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr ""
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr ""
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr ""
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr ""
+
+#: core/validators.py:226
+#, 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] ""
+msgstr[1] ""
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr ""
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr ""
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr ""
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr ""
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr ""
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr ""
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr ""
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr ""
+
+#: core/validators.py:346
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:349
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr ""
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr ""
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr ""
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr ""
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+
+#~ msgid "Click to change"
+#~ msgstr "Faga clic para modificar"
diff --git a/django/conf/locale/it/LC_MESSAGES/django.mo b/django/conf/locale/it/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..94a16a3c63
Binary files /dev/null and b/django/conf/locale/it/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/it/LC_MESSAGES/django.po b/django/conf/locale/it/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..889cac0424
--- /dev/null
+++ b/django/conf/locale/it/LC_MESSAGES/django.po
@@ -0,0 +1,981 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Pagina iniziale"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Storia"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Data/ora"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Utente"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Azione"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "Data/ora"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Questo oggetto non ha cambiamenti storicizzati. Probabilmente non � stato "
+"creato con questo sito di amministrazione."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Amministrazione sito Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Amministrazione Django"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Errore del server (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Errore del server (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Errore del Server <em>(500)</em>"
+
+#: 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 ""
+"C'� stato un errore. E' stato riportato agli amministratori del sito via e-"
+"mail e verr� risolto a breve. Grazie per la pazienza."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Pagina non trovata"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Spiacente, ma la pagina richiesta non esiste."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Aggiungi"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Cambia"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Non hai i permessi di modificare nulla."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Azioni Recenti"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Azioni Proprie"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Nessuna disponibile"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Nome utente:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Password:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Hai <a href=\"/password_reset/\">dimenticato la tua password</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Accedi"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Benvenuto,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Cambia la password"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Esci"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"La rimozione di %(object_name)s '%(object)s' causerebbe la cancellazione "
+"degli oggetti relazionati, ma il tuo account non ha i permessi per rimuovere "
+"i seguenti tipi di oggetti:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"Sei sicuro di voler rimuovere %(object_name)s \"%(object)s\"? I seguenti "
+"oggetti relazionati saranno rimossi:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "S�, sono sicuro"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Cambia la password"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "La password � stata cambiata con successo"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "La tua password � stata cambiata."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Resetta la password"
+
+#: 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 ""
+"Hai dimenticato la tua password? Inserisci il tuo indirizzo e-mail qui "
+"sotto, la tua password sar� resettata e te ne verr� spedita una nuova."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Indirizzo e-mail:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Resetta la mia password"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Grazie per aver speso il tuo tempo prezioso con questo sito."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Accedi di nuovo"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Password resettata con successo"
+
+#: 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 ""
+"Ti abbiamo inviato la nuova password all'indirizzo e-mail da te selezionato. "
+"Dovresti riceverla a breve."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Inserisci la tua vecchia password, per ragioni di sicurezza, e poi la tua "
+"nuova password due volte per verificare che tu l'abbia scritta correttamente."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Vecchia password:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nuova password:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Conferma password:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Cambia la mia password"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr ""
+"Hai ricevuto questa e-mail perch� hai richesto di resettare la password"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "per il tuo account utente su %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "La tua nuova password �: %(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 "Puoi cambiare la tua password su questa pagina:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Il tuo nome utente, in caso tu l'abbia dimenticato:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Ti ringraziamo per l'utilizzo del nostro sito!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Il team di %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "data azione"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "id dell'oggetto"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "rappresentazione dell'oggetto"
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "flag azione"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "messaggio"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "voce di log"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "voci di log"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Luned�"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Marted�"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Mercoled�"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Gioved�"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Venerd�"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Sabato"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Domenica"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Gennaio"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Febbraio"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Marzo"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Aprile"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Maggio"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Giugno"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Luglio"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Agosto"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Settembre"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Ottobre"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembre"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Dicembre"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Gen."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Feb."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Ago."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Set."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Ott."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Dic."
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "nome a dominio"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "nome visualizzato"
+
+#: models/core.py:8
+msgid "site"
+msgstr "sito"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "siti"
+
+#: models/core.py:22
+msgid "label"
+msgstr "etichetta"
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr "nome"
+
+#: models/core.py:25
+msgid "package"
+msgstr "pacchetto"
+
+#: models/core.py:26
+msgid "packages"
+msgstr "pacchetti"
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "nome del modulo python"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "tipo di contenuto"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "tipo di contenuti"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "redirigi da"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Un percorso assoluto, senza nome a dominio. Esempio: '/events/search/'.Un "
+"percorso assoluto, senza nome a dominio. Esempio: '/events/search/'."
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "redirigi verso"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Un percorso assoluto (come sopra) o un URL completa che inizi con 'http://'."
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "redirigi"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "redirezioni"
+
+#: models/core.py:81
+msgid "URL"
+msgstr "URL"
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Esempio: '/about/contact/'. Attenzione alla barra ('/') iniziale e finale."
+
+#: models/core.py:83
+msgid "title"
+msgstr "titolo"
+
+#: models/core.py:84
+msgid "content"
+msgstr "contenuto"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "abilita commenti"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "nome modello"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"Esempio: 'flatfiles/contact_page'. Se non specificato, il sistema user� "
+"'flatfiles/default'."
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "registrazione obbligatoria"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Se selezionata, solo gli utenti registrati potranno vedere la pagina."
+
+#: models/core.py:92
+msgid "flat page"
+msgstr "pagina statica"
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr "pagine statiche"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "chiave di sessione"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "dati di sessione"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "data di scadenza"
+
+#: models/core.py:118
+msgid "session"
+msgstr "sessione"
+
+#: models/core.py:119
+msgid "sessions"
+msgstr "sessioni"
+
+#: models/auth.py:8
+msgid "codename"
+msgstr "nome in codice"
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "Permesso"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "Permessi"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "Gruppo"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "Gruppi"
+
+#: models/auth.py:33
+msgid "username"
+msgstr "nome utente"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "nome"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "cognome"
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr "indirizzo e-mail"
+
+#: models/auth.py:37
+msgid "password"
+msgstr "password"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "Usare il codice di controllo MD5 -- non la password."
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr "amministratore"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr "Autorizza l'utente ad accedere a questo sito di amministrazione."
+
+#: models/auth.py:39
+msgid "active"
+msgstr "attivo"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "stato superutente"
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "ultimo accesso"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "iscritto da"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"In aggiunta ai permessi assegnati manualmente, l'utente ricever� anche tutti "
+"i permessi assegnati ad ogni gruppo cui appartiene."
+
+#: models/auth.py:48
+msgid "Users"
+msgstr "Utenti"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "Informazioni personali"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "Date importanti"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "Messaggio"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "Tedesco"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "Inglese"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "Spagnolo"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "Francese"
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr "Galiziano"
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr "Italiano"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "Brasiliano"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "Russo"
+
+#: conf/global_settings.py:46
+#, fuzzy
+msgid "Serbian"
+msgstr "Serbo"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Sono ammesse solo lettere, numeri e sottolineature ('_')."
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr "Sono ammesse solo lettere, numeri, sottolineature ('_') e barre ('/')."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "Non sono ammesse lettere maiuscole."
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "Non sono ammesse lettere minuscole."
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "Inserire solo numeri separati da virgole."
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Inserire indirizzi e-mail validi separati da virgole."
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "Inserire un indirizzo IP valido."
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "E' necessario inserire un valore."
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Sono ammessi soltanto caratteri alfabetici."
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "Il valore non pu� essere composto solo da cifre."
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "Inserire un numero."
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "Sono ammessi solo caratteri alfabetici."
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Inserire un data valida in formato YYYY-MM-DD."
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "Inserire un orario valido in formato HH:MM."
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Inserire una data/ora in formato YYYY-MM-DD HH:MM."
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "Inserire un indirizzo e-mail valido."
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Caricare un'immagine valida. Il file inserito non � un'immagine o � corrotto."
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "L'URL %s non punta ad un'immagine valida."
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"I numeri di telefono devono essere in formato XXX-XXX-XXXX. \"%s\" non � "
+"valido."
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "L'URL %s non punta ad un video QuickTime valido."
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "Inserire un URL valido."
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"E' richiesto HTML valido. Gli errori sono i seguenti:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML malformato: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL non valida: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "L'URL %s � un link rotto."
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Inserire un nome di stato americano abbreviato valido."
+
+#: core/validators.py:226
+#, 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] "Attenzione! La parola %s non � ammessa qui."
+msgstr[1] "Attenzione! Le parole %s non sono ammesse qui."
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Questo campo deve corrispondere al campo '%s'."
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "Inserire almeno un campo."
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "Inserire entrambi i campi o lasciarli entrambi vuoti."
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Il campo � obbligatorio se %(field)s � %(value)s"
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Il campo non pu� essere valorizzato se %(field)s non � %(value)s"
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "Non sono ammessi valori duplicati."
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Il valore deve essere una potenza di %s."
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "Inserire un numero decimale valido."
+
+#: core/validators.py:346
+#, 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] "Inserire un numero decimale con non pi� di %s cifre totali."
+msgstr[1] ""
+
+#: core/validators.py:349
+#, 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] "Inserire un decimale con non pi� di %s cifre decimali."
+msgstr[1] ""
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Verifica che il file inserito sia almeno di %s byte."
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Verifica che il file inserito sia al massimo %d byte."
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "Formato del file non valido."
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "Il campo non � valido."
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Impossibile recuperare alcunch� da %s."
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"L'URL %(url)s restituisce un Content-Type header non valido '%(contenttype)"
+"s'."
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Il tag %(tag)s alla linea %(line)s non � chiuso. (La linea comincia con \"%"
+"(start)s\".)"
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Il testo che comincia a linea %(line)s non e' ammesso in questo contesto. "
+"(La linea comincia con \"%(start)s\".)"
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"%(attr)s\" alla linea %(line)s � un attributo invalido. (La linea comincia "
+"con \"%(start)s\".)"
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"<%(tag)s>\" alla linea %(line)s tag non valido. (La linea comincia con \"%"
+"(start)s\".)"
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Un tag alla linea %(line)s manca di uno o pi� attributi richiesti. (La linea "
+"comincia con \"%(start)s\".)"
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"L'attributo \"%(attr)s\" alla linea %(line)s ha un valore non valido. (La "
+"linea comincia con \"%(start)s\".)"
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr " Separa ID multipli con virgole."
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr " Premi \"Control\", o \"Command\" su Mac, per selezionarne pi� di uno."
+
+#~ msgid "Itialian"
+#~ msgstr "Italiano"
+
+#~ msgid "Server error <em>(500)</em>"
+#~ msgstr "Errore del server <em>(500)</em>"
+
+#~ msgid "Click to change"
+#~ msgstr "Clicca per cambiare"
diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.mo b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..1a614f851e
Binary files /dev/null and b/django/conf/locale/pt_BR/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/pt_BR/LC_MESSAGES/django.po b/django/conf/locale/pt_BR/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..c8a19d92f7
--- /dev/null
+++ b/django/conf/locale/pt_BR/LC_MESSAGES/django.po
@@ -0,0 +1,981 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-11 09:12GMT-3\n"
+"Last-Translator: João Paulo Farias <jpaulofarias@gmail.com>\n"
+"Language-Team: Português do Brasil <pt-br@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Início"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Histórico"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Data/hora"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Usuário"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Ação"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Este objeto não tem um histórico de alterações. Ele provavelmente não foi "
+"adicionado por este site de administração."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Site de administração do Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Administração do Django"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Erro no servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Erro no servidor (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Erro no Servidor <em>(500)</em>"
+
+#: 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 ""
+"Houve um erro. Este foi reportado aos administradores do site através d e-"
+"mail e deve ser consertado em breve. Obrigado pela compreensão."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Página não encontrada"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Desculpe, mas a página requisitada não pode ser encontrada."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Adicionar"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Modificar"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Você não tem permissão para edição."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Ações Recentes"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Minhas Ações"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Nenhuma disponível"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Usuário:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Senha:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Você <a href=\"/password_reset/\"esqueceu a senha</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Acessar"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Bem vindo,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Alterar senha"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Encerrar sessão"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"A remoção de '%(object)s' %(object_name)s pode resultar na remoção de "
+"objetos relacionados, mas sua conta não tem a permissão para remoção dos "
+"seguintes tipos de objetos:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"Você tem certeza que quer remover o \"%(object)s\" %(object_name)s? Todos os "
+"seguintes itens relacionados serão removidos:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "Sim, tenho certeza"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Alterar senha"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Senha alterada com sucesso"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Sua senha foi alterada."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Reinicializar senha"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+"Esqueceu a senha? Digite seu e-mail abaixo e nós iremos enviar uma nova "
+"senha para você."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "Endereço de e-mail:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Reinicializar minha senha"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Obrigado por visitar nosso Web site hoje."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Acessar novamente"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Senha inicializada com sucesso"
+
+#: 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 ""
+"Nós enviamos uma nova senha para o e-mail que você informou. Você deve estar "
+"recebendo uma mensagem em breve."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Por favor, informe sua senha antiga, por segurança, e então informe sua nova "
+"senha duas vezes para que possamos verificar que se ela está correta."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Senha antiga:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nova senha:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Confirme a senha:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Alterar minha senha"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Você está recebendo este e-mail porque você pediu uma nova senha"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "para sua conta em %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Sua nova senha é: %(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 "Sinta-se livre para alterar esta senha visitando esta página:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Seu nome de usuário, caso tenha esquecido:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Obrigado por usar nosso site!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "Time do %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "hora da ação"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "id do objeto"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "repr do objeto"
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "flag de ação"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "alterar mensagem"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "entrada de log"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "entradas de log"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Segunda Feira"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Terça Feira"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Quarta Feira"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Quinta Feira"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Sexta Feira"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Sábado"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Domingo"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Janeiro"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Fevereiro"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Março"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "Abril"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Maio"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Junho"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Julho"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Agosto"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Setembro"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Outubro"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembro"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Dezembro"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Jan."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Fev."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Ago."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Set."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Out."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Dez."
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "nome do domínio"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "nome para exibição"
+
+#: models/core.py:8
+msgid "site"
+msgstr "site"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "sites"
+
+#: models/core.py:22
+msgid "label"
+msgstr "etiqueta"
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+#, fuzzy
+msgid "name"
+msgstr "nome:"
+
+#: models/core.py:25
+msgid "package"
+msgstr "pacote"
+
+#: models/core.py:26
+msgid "packages"
+msgstr "pacotes"
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "nome do módulo python"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "tipo de conteúdo"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "tipos de conteúdo"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "redirecionar de"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Deve conter um caminho absoluto, excluindo o nome de domínio. Exemplo: '/"
+"eventos/busca/'."
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "redirecionar para"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Deve conter um caminho absoluto (como acima) ou uma URL completa, começando "
+"com 'http://'."
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "redirecionar"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "redirecionamentos"
+
+#: models/core.py:81
+msgid "URL"
+msgstr "URL"
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "Exemplo: '/sobre/contato/'. Lembre-se das barras no começo e no final."
+
+#: models/core.py:83
+msgid "title"
+msgstr "título"
+
+#: models/core.py:84
+msgid "content"
+msgstr "conteúdo"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "habilitar comentários"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "nome do modelo"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"Exemplo: 'flatfiles/contact_page'. Se não for informado, será utilizado "
+"'flatfiles/default'."
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "é obrigatório registrar"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "Se estiver marcado, apenas usuários conectados poderão ver a página."
+
+#: models/core.py:92
+msgid "flat page"
+msgstr "página plana"
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr "páginas planas"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "chave da sessão"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "dados da sessão"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "data de expiração"
+
+#: models/core.py:118
+msgid "session"
+msgstr "sessão"
+
+#: models/core.py:119
+msgid "sessions"
+msgstr "sessões"
+
+#: models/auth.py:8
+msgid "codename"
+msgstr "nome código"
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "Permissão"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "Permissões"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "Grupo"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "Grupos"
+
+#: models/auth.py:33
+#, fuzzy
+msgid "username"
+msgstr "usuário"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "primeiro nome"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "último nome"
+
+#: models/auth.py:36
+#, fuzzy
+msgid "e-mail address"
+msgstr "endereço de e-mail:"
+
+#: models/auth.py:37
+#, fuzzy
+msgid "password"
+msgstr "senha"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "Usar um código MD5 -- não o texto da senha."
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr "status da equipe"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr "Informa se o usuário pode acessar este site de administração."
+
+#: models/auth.py:39
+msgid "active"
+msgstr "ativar"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "status de superusuário"
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "último login"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "data de registro"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Em adição às permissões atribuídas manualmente, este usuário também terá "
+"todas as permissões dadas a cada grupo que participar."
+
+#: models/auth.py:48
+#, fuzzy
+msgid "Users"
+msgstr "Usuários"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "Informações pessoais"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "Datas importantes"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "Mensagem"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr "Tcheco"
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "Alemão"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "Inglês"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "Espanhol"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "Francês"
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr "Galiciano"
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr "Italiano"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "Brazileiro"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "Russo"
+
+#: conf/global_settings.py:46
+#, fuzzy
+msgid "Serbian"
+msgstr "Sérvio"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Deve conter apenas letras, números e sublinhados (_)."
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr "Deve conter apenas letras, números, sublinhados (_) e barras (/)."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "Letras em maiúsculo não são permitidas aqui."
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "Letras em minúsculo não são permitidas aqui."
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "Informe apenas dígitos separados por vírgulas."
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Informe endereços de email válidos separados por vírgulas."
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "Informe um endereço IP válido."
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "Valores em branco não são permitidos."
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Caracteres não numéricos não são permitidos."
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "Este valor não pode conter apenas dígitos."
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "Informe um número inteiro."
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "Apenas caracteres do alfabeto são permitidos aqui."
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Informe uma data válida no formato AAAA-MM-DD."
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "Informe uma hora válida no formato HH:MM."
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Informe uma data/hora válida no formato AAAA-MM-DD HH:MM."
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "Informe um endereço de email válido."
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Envie uma imagem válida. O arquivo enviado não é uma imagem ou está "
+"corrompido."
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "A URL %s não aponta para um imagem válida."
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+"Números de telefone deves estar no formato XXX-XXX-XXXX.\"%s\" é inválido."
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "A URL %s não aponta para um vídeo QuickTime válido."
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "Uma URL válida é exigida."
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"HTML válido é exigido. Estes são os erros específicos:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "XML mal formado: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "URL inválida: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "A URL %s é um link quebrado."
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "Informe uma abreviação válida de nome de um estado dos EUA."
+
+#: core/validators.py:226
+#, 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] "Lave sua boca! A palavra %s não é permitida aqui."
+msgstr[1] "Lave sua boca! As palavras %s não são permitidas aqui."
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Este campo deve ser igual ao campo '%s'."
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "Informe algo em pelo menos um campo."
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "Informe ambos os campos ou deixe ambos vazios."
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Este campo deve ser informado se o campo %(field)s for %(value)s."
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Este campo deve ser dado se o campo %(field)s não for %(value)s."
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "Valores duplicados não são permitidos."
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Este valor deve ser uma potência de %s."
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "Informe um número decimal."
+
+#: core/validators.py:346
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:349
+#, 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] "Informe um número decimal com no máximo %s casa decimal."
+msgstr[1] "Informe um número decimal com no máximo %s casas decimais."
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Verifique se o arquivo enviado tem pelo menos %s bytes."
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Verifique se o arquivo enviado tem no máximo %s bytes."
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "O formato deste campo está errado."
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "Este campo é inválido."
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Não foi possível receber dados de %s."
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"A URL %(url)s retornou um cabeçalho '%(contenttype)s' de Content-Type "
+"inválido."
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Por favor, feche a tag %(tag)s na linha %(line)s. (A linha começa com \"%"
+"(start)s\".)"
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Algum texto começando na linha %(line)s não é permitido no contexto. (Linha "
+"começa com \"%(start)s\".)"
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"%(attr)s\" na linha %(line)s não é um atributo válido. (Linha começa com "
+"\"%(start)s\".)"
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"\"<%(tag)s>\" na linha %(line)s é uma tag inválida. (Linha começa com \"%"
+"(start)s\".)"
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Uma tag na linha %(line)s está não apresenta um ou mais atributos exigidos."
+"(Linha começa com \"%(start)s\".)"
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"O atributo \"%(attr)s\" na linha %(line)s tem um valor inválido. (Linha "
+"começa com \"%(start)s\".)"
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr " Separe IDs múltiplos com vírgulas."
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+" Mantenha pressionado \"Control\", ou \"Command\" num Mac para selecionar "
+"mais de uma opção."
+
+#~ msgid "Click to change"
+#~ msgstr "Clique para alterar"
diff --git a/django/conf/locale/ru/LC_MESSAGES/django.mo b/django/conf/locale/ru/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..a0d8e62c44
Binary files /dev/null and b/django/conf/locale/ru/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/ru/LC_MESSAGES/django.po b/django/conf/locale/ru/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..bcecf85709
--- /dev/null
+++ b/django/conf/locale/ru/LC_MESSAGES/django.po
@@ -0,0 +1,956 @@
+# Translation of django.po to russian.
+# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Dmitry Sorokin <ds@dial.com.ru>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: django\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-05 00:00\n"
+"Last-Translator: Dmitry Sorokin <ds@@dial.com.ru>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=koi8-r\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "������"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "�������"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "����/�����"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "������������"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "��������"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"������ ������ �� ����� ������� ���������. �������� �� �� ��� �������� ����� "
+"������ ���������������� ����."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "���������������� ���� Django"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "����������������� Django"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "������ ������� (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "������ ������� (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "������ ������� <em>(500)</em>"
+
+#: 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 ""
+"��������� ������. ����� �� ������ ��������� ��������������� ����� �� e-mail� "
+"��� ������ ���� ������ ����������. ���������� ��� �� �������� � ������."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "�������� �� �������"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "� ���������, ������������� ���� �������� �� �������."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "��������"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "��������"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "������������ ���� ��� ��������������."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "��������� ��������"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "��� ��������"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "����������"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "���:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "������:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "�� <a href=\"/password_reset/\">������ ������</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "����"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "����� ����������,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "��������� ������"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "�����"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"�������� ������� %(object_name)s '%(object)s' �������� � �������� ��������� "
+"��, ��������������� ��� ���� ������������ ��� �������� �������������� "
+"��������:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"�� �������, ��� ������ �������  %(object_name)s \"%(object)s\"? ��� "
+"���������������� ����� ����� �������:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "��, � ������"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "��������� ������"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "La password � stata cambiata con successo"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "��� ������ ��� �������."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "����� ������"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+"������ ������? ������� ��� e-mail ����� ���� � �� ������� ��� ������ ������, "
+"� ������ ��� �� e-mail �����."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-mail �����:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "������� ������"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "���������� �� ����������� ���� ������� ����� �� ���� �����."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "��������� ����"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "�������� ������� ������"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"�� ��������� ����� ������ �� ���������� ���� ������ ����������� �����. �� "
+"������ �������� ��� ����� ������."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"� ����� ������������, ����������, ������� ��� ������ ������, ����� - ����� "
+"������ ������, � ���, ����� �� ����� ��������� � ������������ ���������."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "������ ������:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "����� ������:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "����������� ������:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "��������� ������"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "�� �������� ��� ��������� ������ ��� ���� ��������� ������� ������"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "��� ������ ����������������� �������� �� %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "��� ����� ������: %(new_password)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
+msgstr "�� ������ ������ �������� ���� ������ ������� �� ��������:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "���� ���, �� ������ ���� �� ��� ������:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "������� �� ��������� ������ �����!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "������� ����� di %(site_name)s"
+
+#: contrib/admin/models/admin.py:6
+#, fuzzy
+msgid "action time"
+msgstr "����/�����"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr ""
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr ""
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr ""
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr ""
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr ""
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "January"
+msgstr ""
+
+#: utils/dates.py:14
+msgid "February"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr ""
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr ""
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "August"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "September"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "October"
+msgstr ""
+
+#: utils/dates.py:15
+msgid "November"
+msgstr ""
+
+#: utils/dates.py:16
+msgid "December"
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr ""
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr ""
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr ""
+
+#: models/core.py:5
+msgid "domain name"
+msgstr ""
+
+#: models/core.py:6
+msgid "display name"
+msgstr ""
+
+#: models/core.py:8
+msgid "site"
+msgstr ""
+
+#: models/core.py:9
+msgid "sites"
+msgstr ""
+
+#: models/core.py:22
+msgid "label"
+msgstr ""
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+#, fuzzy
+msgid "name"
+msgstr "���:"
+
+#: models/core.py:25
+msgid "package"
+msgstr ""
+
+#: models/core.py:26
+msgid "packages"
+msgstr ""
+
+#: models/core.py:36
+msgid "python module name"
+msgstr ""
+
+#: models/core.py:38
+msgid "content type"
+msgstr ""
+
+#: models/core.py:39
+msgid "content types"
+msgstr ""
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr ""
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr ""
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+
+#: models/core.py:67
+msgid "redirect"
+msgstr ""
+
+#: models/core.py:68
+msgid "redirects"
+msgstr ""
+
+#: models/core.py:81
+msgid "URL"
+msgstr ""
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+
+#: models/core.py:83
+msgid "title"
+msgstr ""
+
+#: models/core.py:84
+msgid "content"
+msgstr ""
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr ""
+
+#: models/core.py:86
+msgid "template name"
+msgstr ""
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+
+#: models/core.py:88
+msgid "registration required"
+msgstr ""
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+
+#: models/core.py:92
+msgid "flat page"
+msgstr ""
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr ""
+
+#: models/core.py:114
+msgid "session key"
+msgstr ""
+
+#: models/core.py:115
+msgid "session data"
+msgstr ""
+
+#: models/core.py:116
+msgid "expire date"
+msgstr ""
+
+#: models/core.py:118
+msgid "session"
+msgstr ""
+
+#: models/core.py:119
+msgid "sessions"
+msgstr ""
+
+#: models/auth.py:8
+msgid "codename"
+msgstr ""
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr ""
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr ""
+
+#: models/auth.py:22
+msgid "Group"
+msgstr ""
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr ""
+
+#: models/auth.py:33
+#, fuzzy
+msgid "username"
+msgstr "���:"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr ""
+
+#: models/auth.py:35
+msgid "last name"
+msgstr ""
+
+#: models/auth.py:36
+#, fuzzy
+msgid "e-mail address"
+msgstr "E-mail �����:"
+
+#: models/auth.py:37
+#, fuzzy
+msgid "password"
+msgstr "������:"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr ""
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr ""
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr ""
+
+#: models/auth.py:39
+msgid "active"
+msgstr ""
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr ""
+
+#: models/auth.py:41
+msgid "last login"
+msgstr ""
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr ""
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+
+#: models/auth.py:48
+#, fuzzy
+msgid "Users"
+msgstr "������������"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr ""
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr ""
+
+#: models/auth.py:182
+msgid "Message"
+msgstr ""
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr ""
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr ""
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr ""
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr ""
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr ""
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr ""
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr ""
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr ""
+
+#: conf/global_settings.py:46
+msgid "Serbian"
+msgstr ""
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "�������� ����� ��������� ������ �����, ����� � �������������."
+
+#: core/validators.py:62
+#, fuzzy
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr "�������� ����� ��������� ������ �����, ����� � �������������."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr ""
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr ""
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr ""
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr ""
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr ""
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr ""
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr ""
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr ""
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr ""
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr ""
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr ""
+
+#: core/validators.py:137
+#, fuzzy
+msgid "Enter a valid e-mail address."
+msgstr "E-mail �����:"
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr ""
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr ""
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr ""
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr ""
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr ""
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr ""
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr ""
+
+#: core/validators.py:226
+#, 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] ""
+msgstr[1] ""
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr ""
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr ""
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr ""
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr ""
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr ""
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr ""
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr ""
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr ""
+
+#: core/validators.py:346
+#, python-format
+msgid "Please enter a valid decimal number with at most %s total digit."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s total digits."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:349
+#, python-format
+msgid "Please enter a valid decimal number with at most %s decimal place."
+msgid_plural ""
+"Please enter a valid decimal number with at most %s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr ""
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr ""
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr ""
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr ""
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr ""
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr ""
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+
+#~ msgid "Server error <em>(500)</em>"
+#~ msgstr "������ ������� <em>(500)</em>"
+
+#~ msgid "Click to change"
+#~ msgstr "�������� ��� ���������"
diff --git a/django/conf/locale/sr/LC_MESSAGES/django.mo b/django/conf/locale/sr/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..3bbc3ab768
Binary files /dev/null and b/django/conf/locale/sr/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/sr/LC_MESSAGES/django.po b/django/conf/locale/sr/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..d9f1325faa
--- /dev/null
+++ b/django/conf/locale/sr/LC_MESSAGES/django.po
@@ -0,0 +1,981 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Django Serbian (latin) translation v1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-11-03 00:28+0100\n"
+"Last-Translator: Petar Marić <petar.maric@gmail.com>\n"
+"Language-Team: Nesh <nesh@studioquatro.co.yu> & Petar <petar.maric@gmail."
+"com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Poedit-Language: Serbian\n"
+"X-Poedit-Country: YUGOSLAVIA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"X-Poedit-Basepath: ../../../../\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "Početna strana"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "Istorija"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "Datum/vreme"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "Korisnik"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "Akcija"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "j. N Y, H:i"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr ""
+"Ovaj objekat nema istoriju promena. Najverovatnije nije dodat korišćenjem "
+"administracije sajta."
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django administracija sajta"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django administracija"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "Greška na serveru (500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "Greška na serveru (500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "Greška na serveru <em>(500)</em>"
+
+#: 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 ""
+"Dogodila se greška koja je prijavljena administratorima i biće popravljena "
+"uskoro. Hvala Vam na strpljenju."
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "Strana nije pronađena"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "Tražena strana ne postoji."
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "Dodaj"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "Izmena"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "Nemate prava da vršite izmene."
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "Skorije akcije"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "Moje akcije"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "Nema dostupnih"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "Korisničko ime:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "Lozinka:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "Da li ste <a href=\"/password_reset/\">zaboravili Vašu lozinku?</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "Prijavi se"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "Dobrodošli,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "Izmeni lozinku"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "Odjavi se"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"Brisanjem %(object_name)s  '%(object)s' došlo bi do brisanja dodatnih "
+"podataka, ali nemate prava da brišete sledeće tipove podataka:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"Da li ste sigurni da želite da obrišete %(object_name)s \"%(object)s\"? Biće "
+"obrisani i sledeći pridruženi objekti:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "Da, siguran sam"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "Izmena lozinke"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "Lozinka je uspešno izmenjena"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "Vaša lozinka je izmenjena."
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "Resetovanje lozinke"
+
+#: 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 ""
+"Zaboravili ste svoju lozinku? Unesite vašu e-mail adresu i dobićete novu "
+"lozinku na dati e-mail."
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "E-mail adresa:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "Resetuj moju lozinku"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "Hvala Vam na poseti."
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "Prijavi se ponovo"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "Vaša lozinka je uspešno resetovana"
+
+#: 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 ""
+"Nova lozinka poslata vam je na zadatu e-mail adresu. E-mail bi trebao da "
+"stigne u narednih nekoliko minuta."
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"Unesite staru lozinku, nakon toga unesite novu lozinku dva puta, radi "
+"provere ispravnosti unosa."
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "Stara lozinka:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "Nova lozinka:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "Potvrdite novu lozinku:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "Izmeni moju lozinku"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "Primili ste ovaj e-mail jer ste tražili resetovanje lozinke"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "za vaš korisnički nalog na %(site_name)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "Vaša nova lozinka je: %(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 "Lozinku možete izmeniti na sledećoj strani:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "Vaše korisničko ime, u slučaju da ste zaboravili:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "Hvala Vam na poseti!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "%(site_name)s tim"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "Datum/vreme akcije"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "id objekta"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "opis objekta"
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "akcija"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "opis promene"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "unos u dnevnik izmena"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "unosi u dnevnik izmena"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "Ponedeljak"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "Utorak"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "Sreda"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "Četvrtak"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "Petak"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "Subota"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "Nedelja"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "Januar"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "Februar"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "Mart"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "April"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "Maj"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "Jun"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "Jul"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "Avgust"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "Septembar"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "Oktobar"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "Novembar"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "Decembar"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "Jan."
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "Feb."
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "Avg."
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "Sept."
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "Okt."
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "Nov."
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "Dec."
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "ime domena"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "naziv"
+
+#: models/core.py:8
+msgid "site"
+msgstr "sajt"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "sajtovi"
+
+#: models/core.py:22
+msgid "label"
+msgstr ""
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr "ime"
+
+#: models/core.py:25
+msgid "package"
+msgstr ""
+
+#: models/core.py:26
+msgid "packages"
+msgstr ""
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "ime python modula"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "tip sadržaja"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "tipovi sadržaja"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "redirekcija od"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr ""
+"Ovde treba upisati apsolutnu putanju bez imena domena. Primer: '/events/"
+"search/'."
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "redirekcija na"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr ""
+"Ovo može biti apsolutna putanja (kao gore) ili puni URL koji počinje sa "
+"'http://'."
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "redirekcija"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "redirekcije"
+
+# nesh: ovo se valjda ne prevodi
+# petar: ne prevodi se
+#: models/core.py:81
+msgid "URL"
+msgstr ""
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr ""
+"Primer: '/about/contact/'. Proverite da li ste uneli početnu i kranju kosu "
+"crtu."
+
+#: models/core.py:83
+msgid "title"
+msgstr "naslov"
+
+#: models/core.py:84
+msgid "content"
+msgstr "sadržaj"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "omogućite komentare"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "ime templejta"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"Primer: 'flatfiles/contact-page'. Ako nije dato sistem će koristiti "
+"'flatfiles/default'."
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "samo za registrovane korisnike"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr ""
+"Ako izaberete ovu opciju samo prijavljeni korisnici će imati pristup datoj "
+"strani."
+
+#: models/core.py:92
+msgid "flat page"
+msgstr "statična strana"
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr "statične strane"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "ključ sesije"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "podaci sesije"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "datum prestanka važenja sesije"
+
+#: models/core.py:118
+msgid "session"
+msgstr "sesija"
+
+#: models/core.py:119
+msgid "sessions"
+msgstr "sesije"
+
+#: models/auth.py:8
+msgid "codename"
+msgstr ""
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "Pravo"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "Prava"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "Grupa"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "Grupe"
+
+#: models/auth.py:33
+msgid "username"
+msgstr "korisničko ime"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "ime"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "prezime"
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr "e-mail adresa"
+
+#: models/auth.py:37
+msgid "password"
+msgstr "lozinka"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "Unesite MD5 hash šifre -- ne unosite sam tekst šifre."
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr "dozvoli pristup administraciji sajta"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr "Određuje da li će korisnik imati pristup administratorskom delu sajta."
+
+#: models/auth.py:39
+msgid "active"
+msgstr "aktivan"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "da li je korisnik administrator"
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "vreme poslednje posete"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "datum otvaranja naloga"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"Uz ručno dodata prava, korisnik će dobiti sva prava iz grupa kojima pripada."
+
+#: models/auth.py:48
+msgid "Users"
+msgstr "Korisnici"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "Lične informacije"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "Važni datumi"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "Poruka"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr "Češki"
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "Nemački"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "Engleski"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "Španski"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "Francuski"
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr ""
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr "Italijanski"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "Brazilski"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "Ruski"
+
+#: conf/global_settings.py:46
+msgid "Serbian"
+msgstr "Srpski"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+# nesh: Ovo je opis za stari SlugField
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "Ovo polje može sadržati samo slova, brojeve i donju crtu (_)."
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr ""
+"Ovo polje može sadržati samo slova, brojeve, donju crtu (_) i kose crte."
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "Velika slova ovde nisu dozvoljena."
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "Mala slova ovde nisu dozvoljena."
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "Unesite samo brojeve razdvojene zarezima."
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "Unesite ispravne e-mail adrese razdvojene zarezima."
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "Unesite ispravnu IP adresu."
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "Prazne vrednosti ovde nisu dozvoljene."
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "Ovde možete uneti samo brojeve."
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "Podatak se ne može sastojati samo od brojeva."
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "Unesite celi broj."
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "Ovde možete koristiti samo slova."
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "Unesite ispravan datum u YYYY-MM-DD formatu."
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "Unesite ispravno vreme u HH:MM formatu."
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "Unesite ispravan datum i vreme u YYYY-MM-DD HH:MM formatu."
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "Unesite ispravnu e-mail adresu."
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+"Pošaljite ispravnu sliku. Fajl koji ste poslali ili nije slika ili je sam "
+"fajl oštećen."
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "URL %s ne pokazuje na ispravnu sliku"
+
+# nesh: tel. brojevi su u američkom formatu, ovo se ionako neće koristiti u i18n delu
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr ""
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "URL %s ne pokazuje na ispravni QuickTime video fajl."
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "Unesite ispravan URL."
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"Unesite ispravan HTML. Greške su:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "Neispravan XML: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "Neispravan URL: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "URL %s je neispravan link."
+
+# nesh: Ni ovo nije interesantno za i18n
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr ""
+
+#: core/validators.py:226
+#, 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] "Pripazi na jezik! %s reč nije ovde dozvoljena."
+msgstr[1] "Pripazi na jezik! %s reči nisu ovde dozvoljene."
+msgstr[2] "Pripazi na jezik! %s reči nisu ovde dozvoljene."
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "Ovo polje mora biti jednako sa poljem '%s'."
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "Morate popuniti barem jedno polje."
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "Popunite oba polja ili oba ostavite prazna."
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "Ovo polje mora biti uneto ako polje %(field)s ima vrednost %(value)s"
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "Ovo polje mora biti uneto ako polje %(field)s nema vrednost %(value)s"
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "Duple vrednosti nisu dozvoljene."
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "Vrednost mora biti stepena %s."
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "Unesite ispravan decimalni broj."
+
+#: core/validators.py:346
+#, 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] "Unesite ispravan decimalni broj sa %s cifrom."
+msgstr[1] "Unesite ispravan decimalni broj sa %s cifre."
+msgstr[2] "Unesite ispravan decimalni broj sa %s cifara."
+
+#: core/validators.py:349
+#, 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] "Unesite decimalni broj sa najviše %s decimalnim mestom."
+msgstr[1] "Unesite decimalni broj sa najviše %s decimalna mesta."
+msgstr[2] "Unesite decimalni broj sa najviše %s decimalnih mesta."
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "Veličina fajla mora biti najmanje %s bajtova."
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "Veličina fajla mora biti najviše %s bajtova."
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "Pogrešan format polja."
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "Neispravno polje."
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "Ništa nije moglo da se skine sa URL-a %s."
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr ""
+"Sa URL-a %(url)s se vratio pogrešan Content-Type header '%(contenttype)s'."
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"Zatvorite nezatvoren tag \"%(tag)s\" iz reda %(line)s. (Red počinje sa \"%"
+"(start)s\".)"
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Tekst koji počinje u redu %(line)s nije dozvoljen u ovom kontekstu. (Red "
+"počinje sa \"%(start)s\".)"
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"Atribut \"%(attr)s\" u red %(line)s je neispravan. (Red počinje sa \"%(start)"
+"s\".)"
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"Tag \"<%(tag)s>\" u redu %(line)s je neispravan. (Red počinje \"%(start)s\".)"
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Tag-u u redu %(line)s nedostaje jedan ili više atributa. (Red počinje sa \"%"
+"(start)s\".)"
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"Atribut \"%(attr)s\" u redu %(line)s ima neispravnu vrednost. (Red počinje "
+"sa \"%(start)s\".)"
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr " Odvojite višestruke ID-ove zarezima."
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr ""
+" Koristite \"Ctrl\" (PC) ili \"Jabuku\" (Mek) da bi ste selektovali više "
+"stavki."
diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.mo b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo
new file mode 100644
index 0000000000..1c941ad0f5
Binary files /dev/null and b/django/conf/locale/zh_CN/LC_MESSAGES/django.mo differ
diff --git a/django/conf/locale/zh_CN/LC_MESSAGES/django.po b/django/conf/locale/zh_CN/LC_MESSAGES/django.po
new file mode 100644
index 0000000000..575bd0f2fd
--- /dev/null
+++ b/django/conf/locale/zh_CN/LC_MESSAGES/django.po
@@ -0,0 +1,951 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: django v1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-11-03 12:26+0100\n"
+"PO-Revision-Date: 2005-10-30 15:46+0800\n"
+"Last-Translator: limodou <limodou@gmail.com>\n"
+"Language-Team: Simplified Chinese <limodou@gmail.com>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-Country: CHINA\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: contrib/admin/templates/admin/object_history.html:5
+#: contrib/admin/templates/admin/500.html:4
+#: contrib/admin/templates/admin/base.html:29
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/logged_out.html:4
+#: contrib/admin/templates/registration/password_reset_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+msgid "Home"
+msgstr "首页"
+
+#: contrib/admin/templates/admin/object_history.html:5
+msgid "History"
+msgstr "历史"
+
+#: contrib/admin/templates/admin/object_history.html:18
+msgid "Date/time"
+msgstr "日期/时间"
+
+#: contrib/admin/templates/admin/object_history.html:19 models/auth.py:47
+msgid "User"
+msgstr "用户"
+
+#: contrib/admin/templates/admin/object_history.html:20
+msgid "Action"
+msgstr "动作"
+
+#: contrib/admin/templates/admin/object_history.html:26
+msgid "DATE_WITH_TIME_FULL"
+msgstr "N j, Y, P"
+
+#: contrib/admin/templates/admin/object_history.html:36
+msgid ""
+"This object doesn't have a change history. It probably wasn't added via this "
+"admin site."
+msgstr "此对象没有修改历史。可能不能通过这个管理站点来增加。"
+
+#: contrib/admin/templates/admin/base_site.html:4
+msgid "Django site admin"
+msgstr "Django管理站点"
+
+#: contrib/admin/templates/admin/base_site.html:7
+msgid "Django administration"
+msgstr "Django管理员"
+
+#: contrib/admin/templates/admin/500.html:4
+#, fuzzy
+msgid "Server error"
+msgstr "服务器错误(500)"
+
+#: contrib/admin/templates/admin/500.html:6
+msgid "Server error (500)"
+msgstr "服务器错误(500)"
+
+#: contrib/admin/templates/admin/500.html:9
+msgid "Server Error <em>(500)</em>"
+msgstr "服务器错误 <em>(500)</em>"
+
+#: contrib/admin/templates/admin/500.html:10
+msgid ""
+"There's been an error. It's been reported to the site administrators via e-"
+"mail and should be fixed shortly. Thanks for your patience."
+msgstr ""
+"存在一个错误。它已经通过电子邮件被报告给站点管理员了,并且应该很快被改正。谢"
+"谢你的关心。"
+
+#: contrib/admin/templates/admin/404.html:4
+#: contrib/admin/templates/admin/404.html:8
+msgid "Page not found"
+msgstr "页面没有找到"
+
+#: contrib/admin/templates/admin/404.html:10
+msgid "We're sorry, but the requested page could not be found."
+msgstr "很报歉,请求页面无法找到。"
+
+#: contrib/admin/templates/admin/index.html:27
+msgid "Add"
+msgstr "增加"
+
+#: contrib/admin/templates/admin/index.html:33
+msgid "Change"
+msgstr "修改"
+
+#: contrib/admin/templates/admin/index.html:43
+msgid "You don't have permission to edit anything."
+msgstr "你无权修改任何东西。"
+
+#: contrib/admin/templates/admin/index.html:51
+msgid "Recent Actions"
+msgstr "最近动作"
+
+#: contrib/admin/templates/admin/index.html:52
+msgid "My Actions"
+msgstr "我的动作"
+
+#: contrib/admin/templates/admin/index.html:56
+msgid "None available"
+msgstr "无可用的"
+
+#: contrib/admin/templates/admin/login.html:15
+msgid "Username:"
+msgstr "用户名:"
+
+#: contrib/admin/templates/admin/login.html:18
+msgid "Password:"
+msgstr "口令:"
+
+#: contrib/admin/templates/admin/login.html:20
+msgid "Have you <a href=\"/password_reset/\">forgotten your password</a>?"
+msgstr "<a href=\"/password_reset/\">忘记你的密码</a>?"
+
+#: contrib/admin/templates/admin/login.html:24
+msgid "Log in"
+msgstr "登录"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Welcome,"
+msgstr "欢迎,"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Change password"
+msgstr "修改口令"
+
+#: contrib/admin/templates/admin/base.html:23
+msgid "Log out"
+msgstr "注销"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:7
+#, fuzzy, python-format
+msgid ""
+"Deleting the %(object_name)s '%(object)s' would result in deleting related "
+"objects, but your account doesn't have permission to delete the following "
+"types of objects:"
+msgstr ""
+"删除 %(object_name)s  '%(object)s' 会导致删除相关的对象,但你的帐号无权删除下"
+"列类型的对象:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:14
+#, python-format
+msgid ""
+"Are you sure you want to delete the %(object_name)s \"%(object)s\"? All of "
+"the following related items will be deleted:"
+msgstr ""
+"你确信相要删除 %(object_name)s \"%(object)s\"?所有相关的项目都将被删除:"
+
+#: contrib/admin/templates/admin/delete_confirmation.html:18
+msgid "Yes, I'm sure"
+msgstr "是的,我确定"
+
+#: contrib/admin/templates/registration/password_change_done.html:4
+#: contrib/admin/templates/registration/password_change_form.html:4
+#: contrib/admin/templates/registration/password_change_form.html:6
+#: contrib/admin/templates/registration/password_change_form.html:10
+msgid "Password change"
+msgstr "口令修改"
+
+#: contrib/admin/templates/registration/password_change_done.html:6
+#: contrib/admin/templates/registration/password_change_done.html:10
+msgid "Password change successful"
+msgstr "口令修改成功"
+
+#: contrib/admin/templates/registration/password_change_done.html:12
+msgid "Your password was changed."
+msgstr "你的口令已经被修改。"
+
+#: contrib/admin/templates/registration/password_reset_form.html:4
+#: contrib/admin/templates/registration/password_reset_form.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:4
+msgid "Password reset"
+msgstr "口令重设"
+
+#: contrib/admin/templates/registration/password_reset_form.html:12
+msgid ""
+"Forgotten your password? Enter your e-mail address below, and we'll reset "
+"your password and e-mail the new one to you."
+msgstr ""
+"忘记你的口令?在下面输入你的邮箱地址,我们将重设你的口令并且将新的口令通过邮"
+"件发送给你。"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "E-mail address:"
+msgstr "邮箱地址:"
+
+#: contrib/admin/templates/registration/password_reset_form.html:16
+msgid "Reset my password"
+msgstr "重设我的口令"
+
+#: contrib/admin/templates/registration/logged_out.html:8
+msgid "Thanks for spending some quality time with the Web site today."
+msgstr "感谢今天在本网站花费了您的一些宝贵时间。"
+
+#: contrib/admin/templates/registration/logged_out.html:10
+msgid "Log in again"
+msgstr "重新登录"
+
+#: contrib/admin/templates/registration/password_reset_done.html:6
+#: contrib/admin/templates/registration/password_reset_done.html:10
+msgid "Password reset successful"
+msgstr "口令重设成功"
+
+#: contrib/admin/templates/registration/password_reset_done.html:12
+msgid ""
+"We've e-mailed a new password to the e-mail address you submitted. You "
+"should be receiving it shortly."
+msgstr ""
+"我们已经按你所提交的邮箱地址发送了一个新的口令给你。你应该很会收到这封邮件。"
+
+#: contrib/admin/templates/registration/password_change_form.html:12
+msgid ""
+"Please enter your old password, for security's sake, and then enter your new "
+"password twice so we can verify you typed it in correctly."
+msgstr ""
+"请输入你的旧口令,为了安全起见,接着要输入你的新口令两遍,这样我们可以校验你"
+"输入的是否正确。"
+
+#: contrib/admin/templates/registration/password_change_form.html:17
+msgid "Old password:"
+msgstr "旧口令:"
+
+#: contrib/admin/templates/registration/password_change_form.html:19
+msgid "New password:"
+msgstr "新口令:"
+
+#: contrib/admin/templates/registration/password_change_form.html:21
+msgid "Confirm password:"
+msgstr "确认口令:"
+
+#: contrib/admin/templates/registration/password_change_form.html:23
+msgid "Change my password"
+msgstr "修改我的口令"
+
+#: contrib/admin/templates/registration/password_reset_email.html:2
+msgid "You're receiving this e-mail because you requested a password reset"
+msgstr "你所收到的这封邮件是由于你请求了口令重设"
+
+#: contrib/admin/templates/registration/password_reset_email.html:3
+#, python-format
+msgid "for your user account at %(site_name)s"
+msgstr "在 %(site_name)s 你的用户帐号"
+
+#: contrib/admin/templates/registration/password_reset_email.html:5
+#, python-format
+msgid "Your new password is: %(new_password)s"
+msgstr "你的新口令是: %(new_password)s"
+
+#: contrib/admin/templates/registration/password_reset_email.html:7
+msgid "Feel free to change this password by going to this page:"
+msgstr "到这个页面可以自由地修改口令:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:11
+msgid "Your username, in case you've forgotten:"
+msgstr "你的用户名,一旦你忘记了:"
+
+#: contrib/admin/templates/registration/password_reset_email.html:13
+msgid "Thanks for using our site!"
+msgstr "感谢使用我们的站点!"
+
+#: contrib/admin/templates/registration/password_reset_email.html:15
+#, python-format
+msgid "The %(site_name)s team"
+msgstr "%(site_name)s 小组"
+
+#: contrib/admin/models/admin.py:6
+msgid "action time"
+msgstr "动作时间"
+
+#: contrib/admin/models/admin.py:9
+msgid "object id"
+msgstr "对象id"
+
+#: contrib/admin/models/admin.py:10
+msgid "object repr"
+msgstr "对象表示"
+
+#: contrib/admin/models/admin.py:11
+msgid "action flag"
+msgstr "动作标志"
+
+#: contrib/admin/models/admin.py:12
+msgid "change message"
+msgstr "修改消息"
+
+#: contrib/admin/models/admin.py:15
+msgid "log entry"
+msgstr "日志记录"
+
+#: contrib/admin/models/admin.py:16
+msgid "log entries"
+msgstr "日志记录"
+
+#: utils/dates.py:6
+msgid "Monday"
+msgstr "星期一"
+
+#: utils/dates.py:6
+msgid "Tuesday"
+msgstr "星期二"
+
+#: utils/dates.py:6
+msgid "Wednesday"
+msgstr "星期三"
+
+#: utils/dates.py:6
+msgid "Thursday"
+msgstr "星期四"
+
+#: utils/dates.py:6
+msgid "Friday"
+msgstr "星期五"
+
+#: utils/dates.py:7
+msgid "Saturday"
+msgstr "星期六"
+
+#: utils/dates.py:7
+msgid "Sunday"
+msgstr "星期日"
+
+#: utils/dates.py:14
+msgid "January"
+msgstr "一月"
+
+#: utils/dates.py:14
+msgid "February"
+msgstr "二月"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "March"
+msgstr "三月"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "April"
+msgstr "四月"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "May"
+msgstr "五月"
+
+#: utils/dates.py:14 utils/dates.py:27
+msgid "June"
+msgstr "六月"
+
+#: utils/dates.py:15 utils/dates.py:27
+msgid "July"
+msgstr "七月"
+
+#: utils/dates.py:15
+msgid "August"
+msgstr "八月"
+
+#: utils/dates.py:15
+msgid "September"
+msgstr "九月"
+
+#: utils/dates.py:15
+msgid "October"
+msgstr "十月"
+
+#: utils/dates.py:15
+msgid "November"
+msgstr "十一月"
+
+#: utils/dates.py:16
+msgid "December"
+msgstr "十二月"
+
+#: utils/dates.py:27
+msgid "Jan."
+msgstr "一月"
+
+#: utils/dates.py:27
+msgid "Feb."
+msgstr "二月"
+
+#: utils/dates.py:28
+msgid "Aug."
+msgstr "八月"
+
+#: utils/dates.py:28
+msgid "Sept."
+msgstr "九月"
+
+#: utils/dates.py:28
+msgid "Oct."
+msgstr "十月"
+
+#: utils/dates.py:28
+msgid "Nov."
+msgstr "十一月"
+
+#: utils/dates.py:28
+msgid "Dec."
+msgstr "十二月"
+
+#: models/core.py:5
+msgid "domain name"
+msgstr "域名"
+
+#: models/core.py:6
+msgid "display name"
+msgstr "显示名"
+
+#: models/core.py:8
+msgid "site"
+msgstr "站点"
+
+#: models/core.py:9
+msgid "sites"
+msgstr "站点"
+
+#: models/core.py:22
+msgid "label"
+msgstr "标签"
+
+#: models/core.py:23 models/core.py:34 models/auth.py:6 models/auth.py:19
+msgid "name"
+msgstr "名称"
+
+#: models/core.py:25
+msgid "package"
+msgstr "包"
+
+#: models/core.py:26
+msgid "packages"
+msgstr "包"
+
+#: models/core.py:36
+msgid "python module name"
+msgstr "python模块名"
+
+#: models/core.py:38
+msgid "content type"
+msgstr "内容类型"
+
+#: models/core.py:39
+msgid "content types"
+msgstr "内容类型"
+
+#: models/core.py:62
+msgid "redirect from"
+msgstr "重定向自"
+
+#: models/core.py:63
+msgid ""
+"This should be an absolute path, excluding the domain name. Example: '/"
+"events/search/'."
+msgstr "应该是一个绝对路径,不包括域名。例如:'/events/search/'。"
+
+#: models/core.py:64
+msgid "redirect to"
+msgstr "重定向到"
+
+#: models/core.py:65
+msgid ""
+"This can be either an absolute path (as above) or a full URL starting with "
+"'http://'."
+msgstr "可以是绝对路径(同上)或以'http://'开始的全URL。"
+
+#: models/core.py:67
+msgid "redirect"
+msgstr "重定向"
+
+#: models/core.py:68
+msgid "redirects"
+msgstr "重定向"
+
+#: models/core.py:81
+msgid "URL"
+msgstr ""
+
+#: models/core.py:82
+msgid ""
+"Example: '/about/contact/'. Make sure to have leading and trailing slashes."
+msgstr "例如:'/about/contact/'。请确保前导和结尾的除号。"
+
+#: models/core.py:83
+msgid "title"
+msgstr "标题"
+
+#: models/core.py:84
+msgid "content"
+msgstr "内容"
+
+#: models/core.py:85
+msgid "enable comments"
+msgstr "允许评论"
+
+#: models/core.py:86
+msgid "template name"
+msgstr "模板名称"
+
+#: models/core.py:87
+msgid ""
+"Example: 'flatfiles/contact_page'. If this isn't provided, the system will "
+"use 'flatfiles/default'."
+msgstr ""
+"例如:'flatfiles/contact_page'。如果未提供,系统将使用'flatfiles/default'。"
+
+#: models/core.py:88
+msgid "registration required"
+msgstr "请先注册"
+
+#: models/core.py:88
+msgid "If this is checked, only logged-in users will be able to view the page."
+msgstr "如果被选中,仅登录用户才可以查看此页。"
+
+#: models/core.py:92
+msgid "flat page"
+msgstr "简单页面"
+
+#: models/core.py:93
+msgid "flat pages"
+msgstr "简单页面"
+
+#: models/core.py:114
+msgid "session key"
+msgstr "session键字"
+
+#: models/core.py:115
+msgid "session data"
+msgstr "session数据"
+
+#: models/core.py:116
+msgid "expire date"
+msgstr "过期日期"
+
+#: models/core.py:118
+msgid "session"
+msgstr ""
+
+#: models/core.py:119
+msgid "sessions"
+msgstr ""
+
+#: models/auth.py:8
+msgid "codename"
+msgstr "代码名称"
+
+#: models/auth.py:10
+msgid "Permission"
+msgstr "许可"
+
+#: models/auth.py:11 models/auth.py:58
+msgid "Permissions"
+msgstr "许可"
+
+#: models/auth.py:22
+msgid "Group"
+msgstr "组"
+
+#: models/auth.py:23 models/auth.py:60
+msgid "Groups"
+msgstr "组"
+
+#: models/auth.py:33
+msgid "username"
+msgstr "用户名"
+
+#: models/auth.py:34
+msgid "first name"
+msgstr "名字"
+
+#: models/auth.py:35
+msgid "last name"
+msgstr "姓"
+
+#: models/auth.py:36
+msgid "e-mail address"
+msgstr "邮件地址"
+
+#: models/auth.py:37
+msgid "password"
+msgstr "口令"
+
+#: models/auth.py:37
+msgid "Use an MD5 hash -- not the raw password."
+msgstr "使用MD5的哈希值 -- 不是原始的口令。"
+
+#: models/auth.py:38
+msgid "staff status"
+msgstr "人员状态"
+
+#: models/auth.py:38
+msgid "Designates whether the user can log into this admin site."
+msgstr "指定是否用户可以登录到这个管理站点。"
+
+#: models/auth.py:39
+msgid "active"
+msgstr "活动"
+
+#: models/auth.py:40
+msgid "superuser status"
+msgstr "超级用户状态"
+
+#: models/auth.py:41
+msgid "last login"
+msgstr "上次登录"
+
+#: models/auth.py:42
+msgid "date joined"
+msgstr "加入日期"
+
+#: models/auth.py:44
+msgid ""
+"In addition to the permissions manually assigned, this user will also get "
+"all permissions granted to each group he/she is in."
+msgstr ""
+"除了手动设置权限以外,用户也会从他(她)所在的小组获得所赋组小组的所有权限。"
+
+#: models/auth.py:48
+msgid "Users"
+msgstr "用户"
+
+#: models/auth.py:57
+msgid "Personal info"
+msgstr "个人信息"
+
+#: models/auth.py:59
+msgid "Important dates"
+msgstr "重要日期"
+
+#: models/auth.py:182
+msgid "Message"
+msgstr "消息"
+
+#: conf/global_settings.py:37
+msgid "Czech"
+msgstr "捷克语"
+
+#: conf/global_settings.py:38
+msgid "German"
+msgstr "德语"
+
+#: conf/global_settings.py:39
+msgid "English"
+msgstr "英语"
+
+#: conf/global_settings.py:40
+msgid "Spanish"
+msgstr "西斑牙语"
+
+#: conf/global_settings.py:41
+msgid "French"
+msgstr "法语"
+
+#: conf/global_settings.py:42
+msgid "Galician"
+msgstr "加利西亚语"
+
+#: conf/global_settings.py:43
+msgid "Italian"
+msgstr "意大利语"
+
+#: conf/global_settings.py:44
+msgid "Brazilian"
+msgstr "巴西语"
+
+#: conf/global_settings.py:45
+msgid "Russian"
+msgstr "俄语"
+
+#: conf/global_settings.py:46
+#, fuzzy
+msgid "Serbian"
+msgstr "塞尔维亚语"
+
+#: conf/global_settings.py:47
+msgid "Traditional Chinese"
+msgstr ""
+
+#: core/validators.py:58
+msgid "This value must contain only letters, numbers and underscores."
+msgstr "此值只能包含字母、数字和下划线。"
+
+#: core/validators.py:62
+msgid "This value must contain only letters, numbers, underscores and slashes."
+msgstr "此值只能包含字母、数字、下划线和斜线。"
+
+#: core/validators.py:70
+msgid "Uppercase letters are not allowed here."
+msgstr "这里不允许大写字母。"
+
+#: core/validators.py:74
+msgid "Lowercase letters are not allowed here."
+msgstr "这里不允许小写字母。"
+
+#: core/validators.py:81
+msgid "Enter only digits separated by commas."
+msgstr "只能输入用逗号分隔的数字。"
+
+#: core/validators.py:93
+msgid "Enter valid e-mail addresses separated by commas."
+msgstr "输入用逗号分隔的有效邮件地址。"
+
+#: core/validators.py:100
+msgid "Please enter a valid IP address."
+msgstr "请输入一个有效的IP地址。"
+
+#: core/validators.py:104
+msgid "Empty values are not allowed here."
+msgstr "这里不允许输入空值。"
+
+#: core/validators.py:108
+msgid "Non-numeric characters aren't allowed here."
+msgstr "这里不允许非数字字符。"
+
+#: core/validators.py:112
+msgid "This value can't be comprised solely of digits."
+msgstr "此值不能全部由数字组成。"
+
+#: core/validators.py:117
+msgid "Enter a whole number."
+msgstr "输入整数。"
+
+#: core/validators.py:121
+msgid "Only alphabetical characters are allowed here."
+msgstr "这里只允许字母。"
+
+#: core/validators.py:125
+msgid "Enter a valid date in YYYY-MM-DD format."
+msgstr "输入一个 YYYY-MM-DD 格式的有效日期。"
+
+#: core/validators.py:129
+msgid "Enter a valid time in HH:MM format."
+msgstr "输入一个 HH:MM 格式的有效时间。"
+
+#: core/validators.py:133
+msgid "Enter a valid date/time in YYYY-MM-DD HH:MM format."
+msgstr "输入一个 YYYY-MM-DD HH:MM 格式的有效日期/时间。"
+
+#: core/validators.py:137
+msgid "Enter a valid e-mail address."
+msgstr "输入一个有效的邮件地址。"
+
+#: core/validators.py:149
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr "上传一个有效的图片。您所上传的文件或者不是图片或是一个破坏的图片。"
+
+#: core/validators.py:156
+#, python-format
+msgid "The URL %s does not point to a valid image."
+msgstr "URL %s 指向的不是一个有效的图片。"
+
+#: core/validators.py:160
+#, python-format
+msgid "Phone numbers must be in XXX-XXX-XXXX format. \"%s\" is invalid."
+msgstr "电话号码必须为 XXX-XXX-XXXX 格式。\"%s\"是无效的。"
+
+#: core/validators.py:168
+#, python-format
+msgid "The URL %s does not point to a valid QuickTime video."
+msgstr "URL %s 指向的不是一个有效的 QuickTime 视频。"
+
+#: core/validators.py:172
+msgid "A valid URL is required."
+msgstr "需要是一个有效的URL。"
+
+#: core/validators.py:186
+#, python-format
+msgid ""
+"Valid HTML is required. Specific errors are:\n"
+"%s"
+msgstr ""
+"需要有效的HTML。详细的错误是:\n"
+"%s"
+
+#: core/validators.py:193
+#, python-format
+msgid "Badly formed XML: %s"
+msgstr "格式错误的 XML: %s"
+
+#: core/validators.py:203
+#, python-format
+msgid "Invalid URL: %s"
+msgstr "无效 URL: %s"
+
+#: core/validators.py:205
+#, python-format
+msgid "The URL %s is a broken link."
+msgstr "URL %s 是一个断开的链接。"
+
+#: core/validators.py:211
+msgid "Enter a valid U.S. state abbreviation."
+msgstr "输入一个有效的 U.S. 州缩写。"
+
+#: core/validators.py:226
+#, fuzzy, python-format
+msgid "Watch your mouth! The word %s is not allowed here."
+msgid_plural "Watch your mouth! The words %s are not allowed here."
+msgstr[0] "小心你的嘴!%s 不允许在这里出现。"
+msgstr[1] "小心你的嘴!%s 不允许在这里出现。"
+
+#: core/validators.py:233
+#, python-format
+msgid "This field must match the '%s' field."
+msgstr "这个字段必须与 '%s' 字段相匹配。"
+
+#: core/validators.py:252
+msgid "Please enter something for at least one field."
+msgstr "请至少在一个字段上输入些什么。"
+
+#: core/validators.py:261 core/validators.py:272
+msgid "Please enter both fields or leave them both empty."
+msgstr "请要么两个字段都输入或者两个字段都空着。"
+
+#: core/validators.py:279
+#, python-format
+msgid "This field must be given if %(field)s is %(value)s"
+msgstr "如果 %(field)s 是 %(value)s 时这个字段必须给出"
+
+#: core/validators.py:291
+#, python-format
+msgid "This field must be given if %(field)s is not %(value)s"
+msgstr "如果 %(field)s 不是 %(value)s 时这个字段必须给出"
+
+#: core/validators.py:310
+msgid "Duplicate values are not allowed."
+msgstr "重复值不允许。"
+
+#: core/validators.py:333
+#, python-format
+msgid "This value must be a power of %s."
+msgstr "这个值必须是 %s 的乘方。"
+
+#: core/validators.py:344
+msgid "Please enter a valid decimal number."
+msgstr "请输入一个有效的小数。"
+
+#: core/validators.py:346
+#, fuzzy, 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] "请输入一个有效的小数,最多 %s 个数字。"
+msgstr[1] "请输入一个有效的小数,最多 %s 个数字。"
+
+#: core/validators.py:349
+#, fuzzy, 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] "请输入一个有效的小数,最多 %s 个小数位。"
+msgstr[1] "请输入一个有效的小数,最多 %s 个小数位。"
+
+#: core/validators.py:359
+#, python-format
+msgid "Make sure your uploaded file is at least %s bytes big."
+msgstr "请确保你上传的文件至少 %s 字节大。"
+
+#: core/validators.py:360
+#, python-format
+msgid "Make sure your uploaded file is at most %s bytes big."
+msgstr "请确保你上传的文件至多 %s 字节大。"
+
+#: core/validators.py:373
+msgid "The format for this field is wrong."
+msgstr "这个字段的格式不正确。"
+
+#: core/validators.py:388
+msgid "This field is invalid."
+msgstr "这个字段无效。"
+
+#: core/validators.py:423
+#, python-format
+msgid "Could not retrieve anything from %s."
+msgstr "不能从 %s 得到任何东西。"
+
+#: core/validators.py:426
+#, python-format
+msgid ""
+"The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'."
+msgstr "URL %(url)s 返回了无效的 Content-Type 头 '%(contenttype)s'。"
+
+#: core/validators.py:459
+#, python-format
+msgid ""
+"Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "
+"\"%(start)s\".)"
+msgstr ""
+"请关闭未关闭的 %(tag)s 标签从第 %(line)s 行。(行开始于 \"%(start)s\"。)"
+
+#: core/validators.py:463
+#, python-format
+msgid ""
+"Some text starting on line %(line)s is not allowed in that context. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"在 %(line)s 行开始的一些文本不允许在那个上下文中。(行开始于 \"%(start)s\"。)"
+
+#: core/validators.py:468
+#, python-format
+msgid ""
+"\"%(attr)s\" on line %(line)s is an invalid attribute. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"在 %(line)s 行的\"%(attr)s\"不是一个有效的属性。(行开始于 \"%(start)s\"。)"
+
+#: core/validators.py:473
+#, python-format
+msgid ""
+"\"<%(tag)s>\" on line %(line)s is an invalid tag. (Line starts with \"%"
+"(start)s\".)"
+msgstr ""
+"在 %(line)s 行的\"<%(tag)s>\"不是一个有效的标签。(行开始于 \"%(start)s\"。)"
+
+#: core/validators.py:477
+#, python-format
+msgid ""
+"A tag on line %(line)s is missing one or more required attributes. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"在行 %(line)s 的标签少了一个或多个必须的属性。(行开始于 \"%(start)s\"。)"
+
+#: core/validators.py:482
+#, python-format
+msgid ""
+"The \"%(attr)s\" attribute on line %(line)s has an invalid value. (Line "
+"starts with \"%(start)s\".)"
+msgstr ""
+"在行 %(line)s 的\"%(attr)s\"属性有一个无效的值。(行开始于 \"%(start)s\"。)"
+
+#: core/meta/fields.py:95
+msgid " Separate multiple IDs with commas."
+msgstr " 用逗号分隔多个ID。"
+
+#: core/meta/fields.py:98
+msgid ""
+" Hold down \"Control\", or \"Command\" on a Mac, to select more than one."
+msgstr " 按下 \"Control\",或者在Mac上按 \"Command\" 来选择一个或多个值。"
diff --git a/django/conf/settings.py b/django/conf/settings.py
index 29b8f043aa..2001a06ffd 100644
--- a/django/conf/settings.py
+++ b/django/conf/settings.py
@@ -55,3 +55,10 @@ for k in dir(me):
     if not k.startswith('_') and k != 'me' and k != k.upper():
         delattr(me, k)
 del me, k
+
+# as the last step, install the translation machinery and
+# remove the module again to not clutter the namespace.
+from django.utils import translation
+translation.install()
+del translation
+
diff --git a/django/conf/urls/i18n.py b/django/conf/urls/i18n.py
new file mode 100644
index 0000000000..00e2d6017b
--- /dev/null
+++ b/django/conf/urls/i18n.py
@@ -0,0 +1,5 @@
+from django.conf.urls.defaults import *
+
+urlpatterns = patterns('',
+    (r'^setlang/$', 'django.views.i18n.set_language'),
+)
diff --git a/django/contrib/admin/models/admin.py b/django/contrib/admin/models/admin.py
index 473642e24c..b7f9bd03fc 100644
--- a/django/contrib/admin/models/admin.py
+++ b/django/contrib/admin/models/admin.py
@@ -1,17 +1,19 @@
 from django.core import meta
 from django.models import auth, core
+from django.utils.translation import gettext_lazy as _
 
 class LogEntry(meta.Model):
-    action_time = meta.DateTimeField(auto_now=True)
+    action_time = meta.DateTimeField(_('action time'), auto_now=True)
     user = meta.ForeignKey(auth.User)
     content_type = meta.ForeignKey(core.ContentType, blank=True, null=True)
-    object_id = meta.TextField(blank=True, null=True)
-    object_repr = meta.CharField(maxlength=200)
-    action_flag = meta.PositiveSmallIntegerField()
-    change_message = meta.TextField(blank=True)
+    object_id = meta.TextField(_('object id'), blank=True, null=True)
+    object_repr = meta.CharField(_('object repr'), maxlength=200)
+    action_flag = meta.PositiveSmallIntegerField(_('action flag'))
+    change_message = meta.TextField(_('change message'), blank=True)
     class META:
         module_name = 'log'
-        verbose_name_plural = 'log entries'
+        verbose_name = _('log entry')
+        verbose_name_plural = _('log entries')
         db_table = 'django_admin_log'
         ordering = ('-action_time',)
         module_constants = {
diff --git a/django/contrib/admin/templates/admin/404.html b/django/contrib/admin/templates/admin/404.html
index 9d7876ecbf..d791f565ba 100644
--- a/django/contrib/admin/templates/admin/404.html
+++ b/django/contrib/admin/templates/admin/404.html
@@ -1,11 +1,12 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block title %}Page not found{% endblock %}
+{% block title %}{% trans 'Page not found' %}{% endblock %}
 
 {% block content %}
 
-<h2>Page not found</h2>
+<h2>{% trans 'Page not found' %}</h2>
 
-<p>We're sorry, but the requested page could not be found.</p>
+<p>{% trans "We're sorry, but the requested page could not be found." %}</p>
 
 {% endblock %}
diff --git a/django/contrib/admin/templates/admin/500.html b/django/contrib/admin/templates/admin/500.html
index 34a28ff0f5..9d3e3de32c 100644
--- a/django/contrib/admin/templates/admin/500.html
+++ b/django/contrib/admin/templates/admin/500.html
@@ -1,11 +1,12 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="/">Home</a> &rsaquo; Server error</div>{% endblock %}
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans "Home" %}</a> &rsaquo; {% trans "Server error" %}</div>{% endblock %}
 
-{% block title %}Server error (500){% endblock %}
+{% block title %}{% trans 'Server error (500)' %}{% endblock %}
 
 {% block content %}
-<h1>Server Error <em>(500)</em></h1>
-<p>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.</p>
+<h1>{% trans 'Server Error <em>(500)</em>' %}</h1>
+<p>{% trans "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." %}</p>
 
 {% endblock %}
diff --git a/django/contrib/admin/templates/admin/base.html b/django/contrib/admin/templates/admin/base.html
index 64c80b934c..0c0ae4aabd 100644
--- a/django/contrib/admin/templates/admin/base.html
+++ b/django/contrib/admin/templates/admin/base.html
@@ -1,11 +1,12 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="{{ LANGUAGE_CODE }}" xml:lang="{{ LANGUAGE_CODE }}">
 <head>
 <title>{% block title %}{% endblock %}</title>
 <link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% load adminmedia %}{% admin_media_prefix %}css/base.css{% endblock %}" />
 {% block extrastyle %}{% endblock %}
 {% block extrahead %}{% endblock %}
 </head>
+{% load i18n %}
 
 <body class="{% if is_popup %}popup {% endif %}{% block bodyclass %}{% endblock %}">
 
@@ -19,13 +20,13 @@
         {% block branding %}{% endblock %}
         </div>
         {% if not user.is_anonymous %}
-        <div id="user-tools">Welcome, <strong>{% if user.first_name %}{{ user.first_name }}{% else %}{{ user.username }}{% endif %}</strong>. <br />{% block userlinks %}<a href="/admin/password_change/">Change password</a> / <a href="/admin/logout/">Log out</a>{% endblock %}</div>
+        <div id="user-tools">{% trans 'Welcome,' %} <strong>{% if user.first_name %}{{ user.first_name }}{% else %}{{ user.username }}{% endif %}</strong>. <br />{% block userlinks %}<a href="/admin/password_change/">{% trans 'Change password' %}</a> / <a href="/admin/logout/">{% trans 'Log out' %}</a>{% endblock %}</div>
         {% endif %}
         {% block nav-global %}{% endblock %}
         <br class="clear" />
     </div>
     <!-- END Header -->
-    {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">Home</a>{% if title %} &rsaquo; {{ title }}{% endif %}</div>{% endblock %}
+    {% block breadcrumbs %}<div class="breadcrumbs"><a href="/">{% trans 'Home' %}</a>{% if title %} &rsaquo; {{ title }}{% endif %}</div>{% endblock %}
     {% endif %}
 
         {% if messages %}
diff --git a/django/contrib/admin/templates/admin/base_site.html b/django/contrib/admin/templates/admin/base_site.html
index 7113c06d6c..cb2ea43254 100644
--- a/django/contrib/admin/templates/admin/base_site.html
+++ b/django/contrib/admin/templates/admin/base_site.html
@@ -1,9 +1,10 @@
 {% extends "admin/base" %}
+{% load i18n %}
 
-{% block title %}{{ title }} | Django site admin{% endblock %}
+{% block title %}{{ title }} | {% trans 'Django site admin' %}{% endblock %}
 
 {% block branding %}
-<h1 id="site-name">Django administration</h1>
+<h1 id="site-name">{% trans 'Django administration' %}</h1>
 <h2 id="site-url"><a href="http://www.example.com/">example.com</a></h2>
 {% endblock %}
 
diff --git a/django/contrib/admin/templates/admin/delete_confirmation.html b/django/contrib/admin/templates/admin/delete_confirmation.html
index 99b1cdce7a..0bff003980 100644
--- a/django/contrib/admin/templates/admin/delete_confirmation.html
+++ b/django/contrib/admin/templates/admin/delete_confirmation.html
@@ -1,20 +1,21 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
 {% block content %}
 
 {% if perms_lacking %}
-    <p>Deleting the {{ object_name }} "{{ object }}" would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:</p>
+    <p>{% blocktrans %}Deleting the {{ object_name }} '{{ object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}</p>
     <ul>
     {% for obj in perms_lacking %}
         <li>{{ obj }}</li>
     {% endfor %}
     </ul>
 {% else %}
-    <p>Are you sure you want to delete the {{ object_name }} "{{ object }}"? All of the following related items will be deleted:</p>
+    <p>{% blocktrans %}Are you sure you want to delete the {{ object_name }} "{{ object }}"? All of the following related items will be deleted:{% endblocktrans %}</p>
     <ul>{{ deleted_objects|unordered_list }}</ul>
     <form action="" method="post">
     <input type="hidden" name="post" value="yes" />
-    <input type="submit" value="Yes, I'm sure" />
+    <input type="submit" value="{% trans "Yes, I'm sure" %}" />
     </form>
 {% endif %}
 
diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html
index 5f00c84261..9822ed92c2 100644
--- a/django/contrib/admin/templates/admin/index.html
+++ b/django/contrib/admin/templates/admin/index.html
@@ -1,4 +1,5 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
 {% block coltype %}colMS{% endblock %}
 {% block bodyclass %}dashboard{% endblock %}
@@ -23,13 +24,13 @@
             {% endif %}
 
             {% if model.perms.add %}
-                <td class="x50"><a href="{{ model.admin_url }}add/" class="addlink">Add</a></td>
+                <td class="x50"><a href="{{ model.admin_url }}add/" class="addlink">{% trans 'Add' %}</a></td>
             {% else %}
                 <td class="x50">&nbsp;</td>
             {% endif %}
 
             {% if model.perms.change %}
-                <td class="x75"><a href="{{ model.admin_url }}" class="changelink">Change</a></td>
+                <td class="x75"><a href="{{ model.admin_url }}" class="changelink">{% trans 'Change' %}</a></td>
             {% else %}
                 <td class="x75">&nbsp;</td>
             {% endif %}
@@ -39,7 +40,7 @@
         </div>
     {% endfor %}
 {% else %}
-    <p>You don't have permission to edit anything.</p>
+    <p>{% trans "You don't have permission to edit anything." %}</p>
 {% endif %}
 </div>
 {% endblock %}
@@ -47,12 +48,12 @@
 {% block sidebar %}
 <div id="content-related">
     <div class="module" id="recent-actions-module">
-        <h2>Recent Actions</h2>
-        <h3>My Actions</h3>
+        <h2>{% trans 'Recent Actions' %}</h2>
+        <h3>{% trans 'My Actions' %}</h3>
             {% load log %}
             {% get_admin_log 10 as admin_log for_user user %}
             {% if not admin_log %}
-            <p>None available</p>
+            <p>{% trans 'None available' %}</p>
             {% else %}
             <ul class="actionlist">
             {% for entry in admin_log %}
diff --git a/django/contrib/admin/templates/admin/login.html b/django/contrib/admin/templates/admin/login.html
index ef4aa5aae2..ea823e1020 100644
--- a/django/contrib/admin/templates/admin/login.html
+++ b/django/contrib/admin/templates/admin/login.html
@@ -1,4 +1,5 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
 {% block breadcrumbs %}{% endblock %}
 
@@ -11,16 +12,16 @@
 <form action="{{ app_path }}" method="post">
 
 <p class="aligned">
-<label for="id_username">Username:</label> <input type="text" name="username" id="id_username" />
+<label for="id_username">{% trans 'Username:' %}</label> <input type="text" name="username" id="id_username" />
 </p>
 <p class="aligned">
-<label for="id_password">Password:</label> <input type="password" name="password" id="id_password" />
+<label for="id_password">{% trans 'Password:' %}</label> <input type="password" name="password" id="id_password" />
 <input type="hidden" name="this_is_the_login_form" value="1" />
-<input type="hidden" name="post_data" value="{{ post_data }}" />{% comment %} <span class="help">Have you <a href="/password_reset/">forgotten your password</a>?</span>{% endcomment %}
+<input type="hidden" name="post_data" value="{{ post_data }}" />{% comment %} <span class="help">{% trans 'Have you <a href="/password_reset/">forgotten your password</a>?' %}</span>{% endcomment %}
 </p>
 
 <div class="aligned ">
-<label>&nbsp;</label><input type="submit" value="Log in" />
+<label>&nbsp;</label><input type="submit" value="{% trans 'Log in' %}" />
 </div>
 </form>
 
diff --git a/django/contrib/admin/templates/admin/object_history.html b/django/contrib/admin/templates/admin/object_history.html
index d50936665a..847cfdf2af 100644
--- a/django/contrib/admin/templates/admin/object_history.html
+++ b/django/contrib/admin/templates/admin/object_history.html
@@ -1,7 +1,8 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
 {% block breadcrumbs %}
-<div class="breadcrumbs"><a href="../../../../">Home</a> &rsaquo; <a href="../../">{{ module_name }}</a> &rsaquo; <a href="../">{{ object|truncatewords:"18" }}</a> &rsaquo; History</div>
+<div class="breadcrumbs"><a href="../../../../">{% trans 'Home' %}</a> &rsaquo; <a href="../../">{{ module_name }}</a> &rsaquo; <a href="../">{{ object|truncatewords:"18" }}</a> &rsaquo; {% trans 'History' %}</div>
 {% endblock %}
 
 {% block content %}
@@ -14,15 +15,15 @@
     <table id="change-history">
         <thead>
         <tr>
-            <th>Date/time</th>
-            <th>User</th>
-            <th>Action</th>
+            <th>{% trans 'Date/time' %}</th>
+            <th>{% trans 'User' %}</th>
+            <th>{% trans 'Action' %}</th>
         </tr>
         </thead>
         <tbody>
         {% for action in action_list %}
         <tr>
-            <th>{{ action.action_time|date:"N j, Y, P" }}</th>
+            <th>{{ action.action_time|date:_("DATE_WITH_TIME_FULL") }}</th>
             <td>{{ action.get_user.username }}{% if action.get_user.first_name %} ({{ action.get_user.first_name }} {{ action.get_user.last_name }}){% endif %}</td>
             <td>{{ action.change_message}}</td>
         </tr>
@@ -32,7 +33,7 @@
 
 {% else %}
 
-    <p>This object doesn't have a change history. It probably wasn't added via this admin site.</p>
+    <p>{% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %}</p>
 
 {% endif %}
 
diff --git a/django/contrib/admin/templates/registration/logged_out.html b/django/contrib/admin/templates/registration/logged_out.html
index 1f4bd29790..756f82aadc 100644
--- a/django/contrib/admin/templates/registration/logged_out.html
+++ b/django/contrib/admin/templates/registration/logged_out.html
@@ -1,11 +1,12 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a></div>{% endblock %}
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a></div>{% endblock %}
 
 {% block content %}
 
-<p>Thanks for spending some quality time with the Web site today.</p>
+<p>{% trans "Thanks for spending some quality time with the Web site today." %}</p>
 
-<p><a href="../">Log in again</a></p>
+<p><a href="../">{% trans 'Log in again' %}</a></p>
 
 {% endblock %}
diff --git a/django/contrib/admin/templates/registration/password_change_done.html b/django/contrib/admin/templates/registration/password_change_done.html
index 4345b9bcaa..f163e55a68 100644
--- a/django/contrib/admin/templates/registration/password_change_done.html
+++ b/django/contrib/admin/templates/registration/password_change_done.html
@@ -1,13 +1,14 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a> &rsaquo; Password change</div>{% endblock %}
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password change' %}</div>{% endblock %}
 
-{% block title %}Password change successful{% endblock %}
+{% block title %}{% trans 'Password change successful' %}{% endblock %}
 
 {% block content %}
 
-<h1>Password change successful</h1>
+<h1>{% trans 'Password change successful' %}</h1>
 
-<p>Your password was changed.</p>
+<p>{% trans 'Your password was changed.' %}</p>
 
 {% endblock %}
diff --git a/django/contrib/admin/templates/registration/password_change_form.html b/django/contrib/admin/templates/registration/password_change_form.html
index 104249991c..32e5569458 100644
--- a/django/contrib/admin/templates/registration/password_change_form.html
+++ b/django/contrib/admin/templates/registration/password_change_form.html
@@ -1,25 +1,26 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a> &rsaquo; Password change</div>{% endblock %}
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password change' %}</div>{% endblock %}
 
-{% block title %}Password change{% endblock %}
+{% block title %}{% trans 'Password change' %}{% endblock %}
 
 {% block content %}
 
-<h1>Password change</h1>
+<h1>{% trans 'Password change' %}</h1>
 
-<p>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.</p>
+<p>{% trans "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." %}</p>
 
 <form action="" method="post">
 
 {% if form.old_password.errors %}{{ form.old_password.html_error_list }}{% endif %}
-<p class="aligned wide"><label for="id_old_password">Old password:</label>{{ form.old_password }}</p>
+<p class="aligned wide"><label for="id_old_password">{% trans 'Old password:' %}</label>{{ form.old_password }}</p>
 {% if form.new_password1.errors %}{{ form.new_password1.html_error_list }}{% endif %}
-<p class="aligned wide"><label for="id_new_password1">New password:</label>{{ form.new_password1 }}</p>
+<p class="aligned wide"><label for="id_new_password1">{% trans 'New password:' %}</label>{{ form.new_password1 }}</p>
 {% if form.new_password2.errors %}{{ form.new_password2.html_error_list }}{% endif %}
-<p class="aligned wide"><label for="id_new_password2">Confirm password:</label>{{ form.new_password2 }}</p>
+<p class="aligned wide"><label for="id_new_password2">{% trans 'Confirm password:' %}</label>{{ form.new_password2 }}</p>
 
-<p><input type="submit" value="Change my password" /></p>
+<p><input type="submit" value="{% trans 'Change my password' %}" /></p>
 </form>
 
 {% endblock %}
diff --git a/django/contrib/admin/templates/registration/password_reset_done.html b/django/contrib/admin/templates/registration/password_reset_done.html
index a8573e8e0e..dff293c931 100644
--- a/django/contrib/admin/templates/registration/password_reset_done.html
+++ b/django/contrib/admin/templates/registration/password_reset_done.html
@@ -1,13 +1,14 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a> &rsaquo; Password reset</div>{% endblock %}
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset' %}</div>{% endblock %}
 
-{% block title %}Password reset successful{% endblock %}
+{% block title %}{% trans 'Password reset successful' %}{% endblock %}
 
 {% block content %}
 
-<h1>Password reset successful</h1>
+<h1>{% trans 'Password reset successful' %}</h1>
 
-<p>We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly.</p>
+<p>{% trans "We've e-mailed a new password to the e-mail address you submitted. You should be receiving it shortly." %}</p>
 
 {% endblock %}
diff --git a/django/contrib/admin/templates/registration/password_reset_email.html b/django/contrib/admin/templates/registration/password_reset_email.html
index 4a5bb920d6..b9a0257392 100644
--- a/django/contrib/admin/templates/registration/password_reset_email.html
+++ b/django/contrib/admin/templates/registration/password_reset_email.html
@@ -1,14 +1,15 @@
-You're receiving this e-mail because you requested a password reset
-for your user account at {{ site_name }}.
+{% load i18n %}
+{% trans "You're receiving this e-mail because you requested a password reset" %}
+{% trans "for your user account at %(site_name)s" %}.
 
-Your new password is: {{ new_password }}
+{% trans "Your new password is: %(new_password)s" %}
 
-Feel free to change this password by going to this page:
+{% trans "Feel free to change this password by going to this page:" %}
 
 http://{{ domain }}/password_change/
 
-Your username, in case you've forgotten, is {{ user.username }}
+{% trans "Your username, in case you've forgotten:" %} {{ user.username }}
 
-Thanks for using our site!
+{% trans "Thanks for using our site!" %}
 
-The {{ site_name }} team
+{% trans "The %(site_name)s team" %}
diff --git a/django/contrib/admin/templates/registration/password_reset_form.html b/django/contrib/admin/templates/registration/password_reset_form.html
index 4f9bcb5fc5..8db1ede42f 100644
--- a/django/contrib/admin/templates/registration/password_reset_form.html
+++ b/django/contrib/admin/templates/registration/password_reset_form.html
@@ -1,18 +1,19 @@
 {% extends "admin/base_site" %}
+{% load i18n %}
 
-{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">Home</a> &rsaquo; Password reset</div>{% endblock %}
+{% block breadcrumbs %}<div class="breadcrumbs"><a href="../">{% trans 'Home' %}</a> &rsaquo; {% trans 'Password reset' %}</div>{% endblock %}
 
-{% block title %}Password reset{% endblock %}
+{% block title %}{% trans "Password reset" %}{% endblock %}
 
 {% block content %}
 
-<h1>Password reset</h1>
+<h1>{% trans "Password reset") }}</h1>
 
-<p>Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you.</p>
+<p>{% trans "Forgotten your password? Enter your e-mail address below, and we'll reset your password and e-mail the new one to you." %}</p>
 
 <form action="" method="post">
 {% if form.email.errors %}{{ form.email.html_error_list }}{% endif %}
-<p><label for="id_email">E-mail address:</label> {{ form.email }} <input type="submit" value="Reset my password" /></p>
+<p><label for="id_email">{% trans 'E-mail address:' %}</label> {{ form.email }} <input type="submit" value="{% trans 'Reset my password' %}" /></p>
 </form>
 
 {% endblock %}
diff --git a/django/core/extensions.py b/django/core/extensions.py
index a7eaf3b06f..6bd24c4dbf 100644
--- a/django/core/extensions.py
+++ b/django/core/extensions.py
@@ -33,6 +33,12 @@ class DjangoContext(Context):
         self['user'] = request.user
         self['messages'] = request.user.get_and_delete_messages()
         self['perms'] = PermWrapper(request.user)
+        from django.conf import settings
+        self['LANGUAGES'] = settings.LANGUAGES
+        if hasattr(request, 'LANGUAGE_CODE'):
+            self['LANGUAGE_CODE'] = request.LANGUAGE_CODE
+        else:
+            self['LANGUAGE_CODE'] = settings.LANGUAGE_CODE
         if DEBUG and request.META.get('REMOTE_ADDR') in INTERNAL_IPS:
             self['debug'] = True
             from django.core import db
diff --git a/django/core/meta/fields.py b/django/core/meta/fields.py
index 5d82e61dcd..a15432dcd2 100644
--- a/django/core/meta/fields.py
+++ b/django/core/meta/fields.py
@@ -1,8 +1,9 @@
 from django.conf import settings
 from django.core import formfields, validators
 from django.core.exceptions import ObjectDoesNotExist
-from django.utils.functional import curry
+from django.utils.functional import curry, lazy
 from django.utils.text import capfirst
+from django.utils.translation import gettext_lazy
 import datetime, os
 
 # Random entropy string used by "default" param.
@@ -26,6 +27,16 @@ prep_for_like_query = lambda x: str(x).replace("%", "\%").replace("_", "\_")
 # returns the <ul> class for a given radio_admin value
 get_ul_class = lambda x: 'radiolist%s' % ((x == HORIZONTAL) and ' inline' or '')
 
+def string_concat(*strings):
+    """"
+    lazy variant of string concatenation, needed for translations that are
+    constructed from multiple parts. Handles lazy strings and non-strings by
+    first turning all arguments to strings, before joining them.
+    """
+    return ''.join([str(el) for el in strings])
+
+string_concat = lazy(string_concat, str)
+
 def manipulator_valid_rel_key(f, self, field_data, all_data):
     "Validates that the value is a valid foreign key"
     mod = f.rel.to.get_model_module()
@@ -80,9 +91,11 @@ class Field(object):
         self.db_column = db_column
         if rel and isinstance(rel, ManyToMany):
             if rel.raw_id_admin:
-                self.help_text += ' Separate multiple IDs with commas.'
+                self.help_text = string_concat(self.help_text,
+                    gettext_lazy(' Separate multiple IDs with commas.'))
             else:
-                self.help_text += ' Hold down "Control", or "Command" on a Mac, to select more than one.'
+                self.help_text = string_concat(self.help_text,
+                    gettext_lazy(' Hold down "Control", or "Command" on a Mac, to select more than one.'))
 
         # Set db_index to True if the field has a relationship and doesn't explicitly set db_index.
         if db_index is None:
diff --git a/django/core/template/__init__.py b/django/core/template/__init__.py
index 71a8e621c8..2f1caf657f 100644
--- a/django/core/template/__init__.py
+++ b/django/core/template/__init__.py
@@ -234,6 +234,97 @@ class Parser:
     def delete_first_token(self):
         del self.tokens[0]
 
+class TokenParser:
+    """
+    You need to subclass this class and implement the
+    top method to parse your template line. When instantiating
+    the parser, you pass in the line from the django template
+    parser.
+
+    If your tag needs to know what tag name it was called with,
+    you find it in the tagname instance variable of the parser.
+    """
+
+    def __init__(self, subject):
+        self.subject = subject
+        self.pointer = 0
+        self.backout = []
+        self.tagname = self.tag()
+
+    def top(self):
+        """
+        You need to overload this method to do the actual parsing
+        and return the result.
+        """
+        raise NotImplemented
+
+    def more(self):
+        """
+        This returns True if there is more stuff in the tag.
+        """
+        return self.pointer < len(self.subject)
+
+    def back(self):
+        """
+        This method undos the last microparser. This can be
+        used for lookahead and backtracking.
+        """
+        if not len(self.backout):
+            raise TemplateSyntaxError, "back called without some previous parsing"
+        self.pointer = self.backout.pop()
+
+    def tag(self):
+        """
+        This microparser just returns the next tag from the line.
+        """
+        subject = self.subject
+        i = self.pointer
+        if i >= len(subject):
+            raise TemplateSyntaxError, "expected another tag, found end of string: %s" % subject
+        p = i
+        while i < len(subject) and subject[i] not in (' ', '\t'):
+            i += 1
+        s = subject[p:i]
+        while i < len(subject) and subject[i] in (' ', '\t'):
+            i += 1
+        self.backout.append(self.pointer)
+        self.pointer = i
+        return s
+
+    def value(self):
+        """
+        This microparser parses for a value - some string constant or
+        variable name.
+        """
+        subject = self.subject
+        i = self.pointer
+        if i >= len(subject):
+            raise TemplateSyntaxError, "searching for value expected another value, found end of string: %s" % subject
+        if subject[i] in ('"', "'"):
+            p = i
+            i += 1
+            while i < len(subject) and subject[i] != subject[p]:
+                i += 1
+            if i >= len(subject):
+                raise TemplateSyntaxError, "searching for value, unexpected end of string in column %d: %s" % subject
+            i += 1
+            res = subject[p:i]
+            while i < len(subject) and subject[i] in (' ', '\t'):
+                i += 1
+            self.backout.append(self.pointer)
+            self.pointer = i
+            return res
+        else:
+            p = i
+            while i < len(subject) and subject[i] not in (' ', '\t'):
+                i += 1
+            s = subject[p:i]
+            while i < len(subject) and subject[i] in (' ', '\t'):
+                i += 1
+            self.backout.append(self.pointer)
+            self.pointer = i
+            return s
+
 class FilterParser:
     """Parse a variable token and its optional filters (all as a single string),
        and return a list of tuples of the filter name and arguments.
@@ -255,8 +346,12 @@ class FilterParser:
         self.filters = []
         self.current_filter_name = None
         self.current_filter_arg = None
-        # First read the variable part
-        self.var = self.read_alphanumeric_token()
+        # First read the variable part - decide on wether we need
+        # to parse a string or a variable by peeking into the stream
+        if self.peek_char() in ('_', '"', "'"):
+            self.var = self.read_constant_string_token()
+        else:
+            self.var = self.read_alphanumeric_token()
         if not self.var:
             raise TemplateSyntaxError, "Could not read variable name: '%s'" % self.s
         if self.var.find(VARIABLE_ATTRIBUTE_SEPARATOR + '_') > -1 or self.var[0] == '_':
@@ -269,6 +364,12 @@ class FilterParser:
         # We have a filter separator; start reading the filters
         self.read_filters()
 
+    def peek_char(self):
+        try:
+            return self.s[self.i+1]
+        except IndexError:
+            return None
+
     def next_char(self):
         self.i = self.i + 1
         try:
@@ -276,6 +377,37 @@ class FilterParser:
         except IndexError:
             self.current = None
 
+    def read_constant_string_token(self):
+        """Read a constant string that must be delimited by either "
+        or ' characters. The string is returned with it's delimiters."""
+        val = ''
+        qchar = None
+        i18n = False
+        self.next_char()
+        if self.current == '_':
+            i18n = True
+            self.next_char() 
+            if self.current != '(':
+                raise TemplateSyntaxError, "Bad character (expecting '(') '%s'" % self.current
+            self.next_char()
+        if not self.current in ('"', "'"):
+            raise TemplateSyntaxError, "Bad character (expecting '\"' or ''') '%s'" % self.current
+        qchar = self.current
+        val += qchar
+        while 1:
+           self.next_char()
+           if self.current == qchar:
+               break
+           val += self.current
+        val += self.current
+        self.next_char()
+        if i18n:
+            if self.current != ')':
+                raise TemplateSyntaxError, "Bad character (expecting ')') '%s'" % self.current
+            self.next_char()
+            val = qchar+_(val.strip(qchar))+qchar
+        return val
+
     def read_alphanumeric_token(self):
         """Read a variable name or filter name, which are continuous strings of
         alphanumeric characters + the underscore"""
@@ -318,8 +450,15 @@ class FilterParser:
         return (self.current_filter_name, self.current_filter_arg)
 
     def read_arg(self):
-        # First read a "
+        # First read a " or a _("
         self.next_char()
+        translated = False
+        if self.current == '_':
+            self.next_char()
+            if self.current != '(':
+                raise TemplateSyntaxError, "Bad character (expecting '(') '%s'" % self.current
+            translated = True
+            self.next_char()
         if self.current != '"':
             raise TemplateSyntaxError, "Bad character (expecting '\"') '%s'" % self.current
         self.escaped = False
@@ -346,6 +485,11 @@ class FilterParser:
             arg += self.current
         # self.current must now be '"'
         self.next_char()
+        if translated:
+            if self.current != ')':
+                raise TemplateSyntaxError, "Bad character (expecting ')') '%s'" % self.current
+            self.next_char()
+            arg = _(arg)
         return arg
 
 def get_filters_from_token(token):
diff --git a/django/core/template/defaulttags.py b/django/core/template/defaulttags.py
index 535d0b81e1..d7c53fe947 100644
--- a/django/core/template/defaulttags.py
+++ b/django/core/template/defaulttags.py
@@ -2,7 +2,10 @@
 
 from django.core.template import Node, NodeList, Template, Context, resolve_variable, resolve_variable_with_filters, get_filters_from_token, registered_filters
 from django.core.template import TemplateSyntaxError, VariableDoesNotExist, BLOCK_TAG_START, BLOCK_TAG_END, VARIABLE_TAG_START, VARIABLE_TAG_END, register_tag
+from django.utils import translation
+
 import sys
+import re
 
 class CommentNode(Node):
     def render(self, context):
diff --git a/django/core/validators.py b/django/core/validators.py
index 09a733f348..e6a7b069cf 100644
--- a/django/core/validators.py
+++ b/django/core/validators.py
@@ -25,6 +25,7 @@ slug_re = re.compile(r'^[-\w]+$')
 url_re = re.compile(r'^http://\S+$')
 
 from django.conf.settings import JING_PATH
+from django.utils.translation import gettext_lazy, ngettext
 
 class ValidationError(Exception):
     def __init__(self, message):
@@ -54,11 +55,11 @@ class CriticalValidationError(Exception):
 
 def isAlphaNumeric(field_data, all_data):
     if not alnum_re.search(field_data):
-        raise ValidationError, "This value must contain only letters, numbers and underscores."
+        raise ValidationError, _("This value must contain only letters, numbers and underscores.")
 
 def isAlphaNumericURL(field_data, all_data):
     if not alnumurl_re.search(field_data):
-        raise ValidationError, "This value must contain only letters, numbers, underscores or slashes."
+        raise ValidationError, _("This value must contain only letters, numbers, underscores and slashes.")
 
 def isSlug(field_data, all_data):
     if not slug_re.search(field_data):
@@ -66,18 +67,18 @@ def isSlug(field_data, all_data):
 
 def isLowerCase(field_data, all_data):
     if field_data.lower() != field_data:
-        raise ValidationError, "Uppercase letters are not allowed here."
+        raise ValidationError, _("Uppercase letters are not allowed here.")
 
 def isUpperCase(field_data, all_data):
     if field_data.upper() != field_data:
-        raise ValidationError, "Lowercase letters are not allowed here."
+        raise ValidationError, _("Lowercase letters are not allowed here.")
 
 def isCommaSeparatedIntegerList(field_data, all_data):
     for supposed_int in field_data.split(','):
         try:
             int(supposed_int)
         except ValueError:
-            raise ValidationError, "Enter only digits separated by commas."
+            raise ValidationError, _("Enter only digits separated by commas.")
 
 def isCommaSeparatedEmailList(field_data, all_data):
     """
@@ -89,51 +90,51 @@ def isCommaSeparatedEmailList(field_data, all_data):
         try:
             isValidEmail(supposed_email.strip(), '')
         except ValidationError:
-            raise ValidationError, "Enter valid e-mail addresses separated by commas."
+            raise ValidationError, _("Enter valid e-mail addresses separated by commas.")
 
 def isValidIPAddress4(field_data, all_data):
     if ip4_re.search(field_data):
         valid_parts = [el for el in field_data.split('.') if 0 <= int(el) <= 255]
         if len(valid_parts) == 4:
             return
-    raise validators.ValidationError, "Please enter a valid IP address."
+    raise validators.ValidationError, _("Please enter a valid IP address.")
 
 def isNotEmpty(field_data, all_data):
     if field_data.strip() == '':
-        raise ValidationError, "Empty values are not allowed here."
+        raise ValidationError, _("Empty values are not allowed here.")
 
 def isOnlyDigits(field_data, all_data):
     if not field_data.isdigit():
-        raise ValidationError, "Non-numeric characters aren't allowed here."
+        raise ValidationError, _("Non-numeric characters aren't allowed here.")
 
 def isNotOnlyDigits(field_data, all_data):
     if field_data.isdigit():
-        raise ValidationError, "This value can't be comprised solely of digits."
+        raise ValidationError, _("This value can't be comprised solely of digits.")
 
 def isInteger(field_data, all_data):
     # This differs from isOnlyDigits because this accepts the negative sign
     if not integer_re.search(field_data):
-        raise ValidationError, "Enter a whole number."
+        raise ValidationError, _("Enter a whole number.")
 
 def isOnlyLetters(field_data, all_data):
     if not field_data.isalpha():
-        raise ValidationError, "Only alphabetical characters are allowed here."
+        raise ValidationError, _("Only alphabetical characters are allowed here.")
 
 def isValidANSIDate(field_data, all_data):
     if not ansi_date_re.search(field_data):
-        raise ValidationError, 'Enter a valid date in YYYY-MM-DD format.'
+        raise ValidationError, _('Enter a valid date in YYYY-MM-DD format.')
 
 def isValidANSITime(field_data, all_data):
     if not ansi_time_re.search(field_data):
-        raise ValidationError, 'Enter a valid time in HH:MM format.'
+        raise ValidationError, _('Enter a valid time in HH:MM format.')
 
 def isValidANSIDatetime(field_data, all_data):
     if not ansi_datetime_re.search(field_data):
-        raise ValidationError, 'Enter a valid date/time in YYYY-MM-DD HH:MM format.'
+        raise ValidationError, _('Enter a valid date/time in YYYY-MM-DD HH:MM format.')
 
 def isValidEmail(field_data, all_data):
     if not email_re.search(field_data):
-        raise ValidationError, 'Enter a valid e-mail address.'
+        raise ValidationError, _('Enter a valid e-mail address.')
 
 def isValidImage(field_data, all_data):
     """
@@ -145,18 +146,18 @@ def isValidImage(field_data, all_data):
     try:
         Image.open(StringIO(field_data['content']))
     except IOError: # Python Imaging Library doesn't recognize it as an image
-        raise ValidationError, "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
+        raise ValidationError, _("Upload a valid image. The file you uploaded was either not an image or a corrupted image.")
 
 def isValidImageURL(field_data, all_data):
     uc = URLMimeTypeCheck(('image/jpeg', 'image/gif', 'image/png'))
     try:
         uc(field_data, all_data)
     except URLMimeTypeCheck.InvalidContentType:
-        raise ValidationError, "The URL %s does not point to a valid image." % field_data
+        raise ValidationError, _("The URL %s does not point to a valid image.") % field_data
 
 def isValidPhone(field_data, all_data):
     if not phone_re.search(field_data):
-        raise ValidationError, 'Phone numbers must be in XXX-XXX-XXXX format. "%s" is invalid.' % field_data
+        raise ValidationError, _('Phone numbers must be in XXX-XXX-XXXX format. "%s" is invalid.') % field_data
 
 def isValidQuicktimeVideoURL(field_data, all_data):
     "Checks that the given URL is a video that can be played by QuickTime (qt, mpeg)"
@@ -164,11 +165,11 @@ def isValidQuicktimeVideoURL(field_data, all_data):
     try:
         uc(field_data, all_data)
     except URLMimeTypeCheck.InvalidContentType:
-        raise ValidationError, "The URL %s does not point to a valid QuickTime video." % field_data
+        raise ValidationError, _("The URL %s does not point to a valid QuickTime video.") % field_data
 
 def isValidURL(field_data, all_data):
     if not url_re.search(field_data):
-        raise ValidationError, "A valid URL is required."
+        raise ValidationError, _("A valid URL is required.")
 
 def isValidHTML(field_data, all_data):
     import urllib, urllib2
@@ -182,14 +183,14 @@ def isValidHTML(field_data, all_data):
         return
     from xml.dom.minidom import parseString
     error_messages = [e.firstChild.wholeText for e in parseString(u.read()).getElementsByTagName('messages')[0].getElementsByTagName('msg')]
-    raise ValidationError, "Valid HTML is required. Specific errors are:\n%s" % "\n".join(error_messages)
+    raise ValidationError, _("Valid HTML is required. Specific errors are:\n%s") % "\n".join(error_messages)
 
 def isWellFormedXml(field_data, all_data):
     from xml.dom.minidom import parseString
     try:
         parseString(field_data)
     except Exception, e: # Naked except because we're not sure what will be thrown
-        raise ValidationError, "Badly formed XML: %s" % str(e)
+        raise ValidationError, _("Badly formed XML: %s") % str(e)
 
 def isWellFormedXmlFragment(field_data, all_data):
     isWellFormedXml('<root>%s</root>' % field_data, all_data)
@@ -199,15 +200,15 @@ def isExistingURL(field_data, all_data):
     try:
         u = urllib2.urlopen(field_data)
     except ValueError:
-        raise ValidationError, "Invalid URL: %s" % field_data
+        raise ValidationError, _("Invalid URL: %s") % field_data
     except: # urllib2.HTTPError, urllib2.URLError, httplib.InvalidURL, etc.
-        raise ValidationError, "The URL %s is a broken link." % field_data
+        raise ValidationError, _("The URL %s is a broken link.") % field_data
 
 def isValidUSState(field_data, all_data):
     "Checks that the given string is a valid two-letter U.S. state abbreviation"
     states = ['AA', 'AE', 'AK', 'AL', 'AP', 'AR', 'AS', 'AZ', 'CA', 'CO', 'CT', 'DC', 'DE', 'FL', 'FM', 'GA', 'GU', 'HI', 'IA', 'ID', 'IL', 'IN', 'KS', 'KY', 'LA', 'MA', 'MD', 'ME', 'MH', 'MI', 'MN', 'MO', 'MP', 'MS', 'MT', 'NC', 'ND', 'NE', 'NH', 'NJ', 'NM', 'NV', 'NY', 'OH', 'OK', 'OR', 'PA', 'PR', 'PW', 'RI', 'SC', 'SD', 'TN', 'TX', 'UT', 'VA', 'VI', 'VT', 'WA', 'WI', 'WV', 'WY']
     if field_data.upper() not in states:
-        raise ValidationError, "Enter a valid U.S. state abbreviation."
+        raise ValidationError, _("Enter a valid U.S. state abbreviation.")
 
 def hasNoProfanities(field_data, all_data):
     """
@@ -222,15 +223,14 @@ def hasNoProfanities(field_data, all_data):
     if words_seen:
         from django.utils.text import get_text_list
         plural = len(words_seen) > 1
-        raise ValidationError, "Watch your mouth! The word%s %s %s not allowed here." % \
-            (plural and 's' or '',
-            get_text_list(['"%s%s%s"' % (i[0], '-'*(len(i)-2), i[-1]) for i in words_seen], 'and'),
-            plural and 'are' or 'is')
+        raise ValidationError, ngettext("Watch your mouth! The word %s is not allowed here.",
+            "Watch your mouth! The words %s are not allowed here.", plural) % \
+            get_text_list(['"%s%s%s"' % (i[0], '-'*(len(i)-2), i[-1]) for i in words_seen], 'and')
 
 class AlwaysMatchesOtherField:
     def __init__(self, other_field_name, error_message=None):
         self.other = other_field_name
-        self.error_message = error_message or "This field must match the '%s' field." % self.other
+        self.error_message = error_message or gettext_lazy("This field must match the '%s' field.") % self.other
         self.always_test = True
 
     def __call__(self, field_data, all_data):
@@ -249,7 +249,7 @@ class ValidateIfOtherFieldEquals:
                 v(field_data, all_data)
 
 class RequiredIfOtherFieldNotGiven:
-    def __init__(self, other_field_name, error_message="Please enter something for at least one field."):
+    def __init__(self, other_field_name, error_message=gettext_lazy("Please enter something for at least one field.")):
         self.other, self.error_message = other_field_name, error_message
         self.always_test = True
 
@@ -258,7 +258,7 @@ class RequiredIfOtherFieldNotGiven:
             raise ValidationError, self.error_message
 
 class RequiredIfOtherFieldsGiven:
-    def __init__(self, other_field_names, error_message="Please enter both fields or leave them both empty."):
+    def __init__(self, other_field_names, error_message=gettext_lazy("Please enter both fields or leave them both empty.")):
         self.other, self.error_message = other_field_names, error_message
         self.always_test = True
 
@@ -269,14 +269,15 @@ class RequiredIfOtherFieldsGiven:
 
 class RequiredIfOtherFieldGiven(RequiredIfOtherFieldsGiven):
     "Like RequiredIfOtherFieldsGiven, but takes a single field name instead of a list."
-    def __init__(self, other_field_name, error_message="Please enter both fields or leave them both empty."):
+    def __init__(self, other_field_name, error_message=gettext_lazy("Please enter both fields or leave them both empty.")):
         RequiredIfOtherFieldsGiven.__init__(self, [other_field_name], error_message)
 
 class RequiredIfOtherFieldEquals:
     def __init__(self, other_field, other_value, error_message=None):
         self.other_field = other_field
         self.other_value = other_value
-        self.error_message = error_message or "This field must be given if %s is %s" % (other_field, other_value)
+        self.error_message = error_message or gettext_lazy("This field must be given if %(field)s is %(value)s") % {
+            'field': other_field, 'value': other_value}
         self.always_test = True
 
     def __call__(self, field_data, all_data):
@@ -287,7 +288,8 @@ class RequiredIfOtherFieldDoesNotEqual:
     def __init__(self, other_field, other_value, error_message=None):
         self.other_field = other_field
         self.other_value = other_value
-        self.error_message = error_message or "This field must be given if %s is not %s" % (other_field, other_value)
+        self.error_message = error_message or gettext_lazy("This field must be given if %(field)s is not %(value)s") % {
+            'field': other_field, 'value': other_value}
         self.always_test = True
 
     def __call__(self, field_data, all_data):
@@ -305,7 +307,7 @@ class IsLessThanOtherField:
 class UniqueAmongstFieldsWithPrefix:
     def __init__(self, field_name, prefix, error_message):
         self.field_name, self.prefix = field_name, prefix
-        self.error_message = error_message or "Duplicate values are not allowed."
+        self.error_message = error_message or gettext_lazy("Duplicate values are not allowed.")
 
     def __call__(self, field_data, all_data):
         for field_name, value in all_data.items():
@@ -328,7 +330,7 @@ class IsAPowerOf:
         from math import log
         val = log(int(field_data)) / log(self.power_of)
         if val != int(val):
-            raise ValidationError, "This value must be a power of %s." % self.power_of
+            raise ValidationError, _("This value must be a power of %s.") % self.power_of
 
 class IsValidFloat:
     def __init__(self, max_digits, decimal_places):
@@ -339,13 +341,13 @@ class IsValidFloat:
         try:
             float(data)
         except ValueError:
-            raise ValidationError, "Please enter a valid decimal number."
+            raise ValidationError, _("Please enter a valid decimal number.")
         if len(data) > (self.max_digits + 1):
-            raise ValidationError, "Please enter a valid decimal number with at most %s total digit%s." % \
-                (self.max_digits, self.max_digits > 1 and 's' or '')
+            raise ValidationError, ngettext( "Please enter a valid decimal number with at most %s total digit.",
+                "Please enter a valid decimal number with at most %s total digits.", self.max_digits) % self.max_digits
         if '.' in data and len(data.split('.')[1]) > self.decimal_places:
-            raise ValidationError, "Please enter a valid decimal number with at most %s decimal place%s." % \
-                (self.decimal_places, self.decimal_places > 1 and 's' or '')
+            raise ValidationError, ngettext("Please enter a valid decimal number with at most %s decimal place.",
+                "Please enter a valid decimal number with at most %s decimal places.", self.decimal_places) % self.decimal_places
 
 class HasAllowableSize:
     """
@@ -354,8 +356,8 @@ class HasAllowableSize:
     """
     def __init__(self, min_size=None, max_size=None, min_error_message=None, max_error_message=None):
         self.min_size, self.max_size = min_size, max_size
-        self.min_error_message = min_error_message or "Make sure your uploaded file is at least %s bytes big." % min_size
-        self.max_error_message = max_error_message or "Make sure your uploaded file is at most %s bytes big." % min_size
+        self.min_error_message = min_error_message or gettext_lazy("Make sure your uploaded file is at least %s bytes big.") % min_size
+        self.max_error_message = max_error_message or gettext_lazy("Make sure your uploaded file is at most %s bytes big.") % min_size
 
     def __call__(self, field_data, all_data):
         if self.min_size is not None and len(field_data['content']) < self.min_size:
@@ -368,7 +370,7 @@ class MatchesRegularExpression:
     Checks that the field matches the given regular-expression. The regex
     should be in string format, not already compiled.
     """
-    def __init__(self, regexp, error_message="The format for this field is wrong."):
+    def __init__(self, regexp, error_message=gettext_lazy("The format for this field is wrong.")):
         self.regexp = re.compile(regexp)
         self.error_message = error_message
 
@@ -383,7 +385,7 @@ class AnyValidator:
     as a validation error. The message is rather unspecific, so it's best to
     specify one on instantiation.
     """
-    def __init__(self, validator_list=[], error_message="This field is invalid."):
+    def __init__(self, validator_list=[], error_message=gettext_lazy("This field is invalid.")):
         self.validator_list = validator_list
         self.error_message = error_message
         for v in validator_list:
@@ -418,10 +420,11 @@ class URLMimeTypeCheck:
         try:
             info = urllib2.urlopen(field_data).info()
         except (urllib2.HTTPError, urllib2.URLError):
-            raise URLMimeTypeCheck.CouldNotRetrieve, "Could not retrieve anything from %s." % field_data
+            raise URLMimeTypeCheck.CouldNotRetrieve, _("Could not retrieve anything from %s.") % field_data
         content_type = info['content-type']
         if content_type not in self.mime_type_list:
-            raise URLMimeTypeCheck.InvalidContentType, "The URL %s returned the invalid Content-Type header '%s'." % (field_data, content_type)
+            raise URLMimeTypeCheck.InvalidContentType, _("The URL %(url)s returned the invalid Content-Type header '%(contenttype)s'.") % {
+                'url': field_data, 'contenttype': content_type}
 
 class RelaxNGCompact:
     "Validate against a Relax NG compact schema"
@@ -453,31 +456,31 @@ class RelaxNGCompact:
             # Scrape the Jing error messages to reword them more nicely.
             m = re.search(r'Expected "(.*?)" to terminate element starting on line (\d+)', message)
             if m:
-                display_errors.append('Please close the unclosed %s tag from line %s. (Line starts with "%s".)' % \
-                    (m.group(1).replace('/', ''), m.group(2), lines[int(m.group(2)) - 1][:30]))
+                display_errors.append(_('Please close the unclosed %(tag)s tag from line %(line)s. (Line starts with "%(start)s".)') % \
+                    {'tag':m.group(1).replace('/', ''), 'line':m.group(2), 'start':lines[int(m.group(2)) - 1][:30]})
                 continue
             if message.strip() == 'text not allowed here':
-                display_errors.append('Some text starting on line %s is not allowed in that context. (Line starts with "%s".)' % \
-                    (line, lines[int(line) - 1][:30]))
+                display_errors.append(_('Some text starting on line %(line)s is not allowed in that context. (Line starts with "%(start)s".)') % \
+                    {'line':line, 'start':lines[int(line) - 1][:30]})
                 continue
             m = re.search(r'\s*attribute "(.*?)" not allowed at this point; ignored', message)
             if m:
-                display_errors.append('"%s" on line %s is an invalid attribute. (Line starts with "%s".)' % \
-                    (m.group(1), line, lines[int(line) - 1][:30]))
+                display_errors.append(_('"%(attr)s" on line %(line)s is an invalid attribute. (Line starts with "%(start)s".)') % \
+                    {'attr':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]})
                 continue
             m = re.search(r'\s*unknown element "(.*?)"', message)
             if m:
-                display_errors.append('"<%s>" on line %s is an invalid tag. (Line starts with "%s".)' % \
-                    (m.group(1), line, lines[int(line) - 1][:30]))
+                display_errors.append(_('"<%(tag)s>" on line %(line)s is an invalid tag. (Line starts with "%(start)s".)') % \
+                    {'tag':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]})
                 continue
             if message.strip() == 'required attributes missing':
-                display_errors.append('A tag on line %s is missing one or more required attributes. (Line starts with "%s".)' % \
-                    (line, lines[int(line) - 1][:30]))
+                display_errors.append(_('A tag on line %(line)s is missing one or more required attributes. (Line starts with "%(start)s".)') % \
+                    {'line':line, 'start':lines[int(line) - 1][:30]})
                 continue
             m = re.search(r'\s*bad value for attribute "(.*?)"', message)
             if m:
-                display_errors.append('The "%s" attribute on line %s has an invalid value. (Line starts with "%s".)' % \
-                    (m.group(1), line, lines[int(line) - 1][:30]))
+                display_errors.append(_('The "%(attr)s" attribute on line %(line)s has an invalid value. (Line starts with "%(start)s".)') % \
+                    {'attr':m.group(1), 'line':line, 'start':lines[int(line) - 1][:30]})
                 continue
             # Failing all those checks, use the default error message.
             display_error = 'Line %s: %s [%s]' % (line, message, level.strip())
diff --git a/django/middleware/locale.py b/django/middleware/locale.py
new file mode 100644
index 0000000000..83ecbdcc67
--- /dev/null
+++ b/django/middleware/locale.py
@@ -0,0 +1,24 @@
+"this is the locale selecting middleware that will look at accept headers"
+
+from django.utils.cache import patch_vary_headers
+from django.utils import translation
+
+class LocaleMiddleware:
+    """
+    This is a very simple middleware that parses a request
+    and decides what translation object to install in the current
+    thread context. This allows pages to be dynamically
+    translated to the language the user desires (if the language
+    is available, of course).
+    """
+
+    def process_request(self, request):
+        language = translation.get_language_from_request(request)
+        translation.activate(language)
+        request.LANGUAGE_CODE = translation.get_language()
+
+    def process_response(self, request, response):
+        patch_vary_headers(response, ('Accept-Language',))
+        translation.deactivate()
+        return response
+
diff --git a/django/models/auth.py b/django/models/auth.py
index 2a65290085..f06822b145 100644
--- a/django/models/auth.py
+++ b/django/models/auth.py
@@ -1,11 +1,14 @@
 from django.core import meta, validators
 from django.models import core
+from django.utils.translation import gettext_lazy as _
 
 class Permission(meta.Model):
-    name = meta.CharField(maxlength=50)
+    name = meta.CharField(_('name'), maxlength=50)
     package = meta.ForeignKey(core.Package, db_column='package')
-    codename = meta.CharField(maxlength=100)
+    codename = meta.CharField(_('codename'), maxlength=100)
     class META:
+        verbose_name = _('Permission')
+        verbose_name_plural = _('Permissions')
         unique_together = (('package', 'codename'),)
         ordering = ('package', 'codename')
 
@@ -13,9 +16,11 @@ class Permission(meta.Model):
         return "%s | %s" % (self.package, self.name)
 
 class Group(meta.Model):
-    name = meta.CharField(maxlength=80, unique=True)
+    name = meta.CharField(_('name'), maxlength=80, unique=True)
     permissions = meta.ManyToManyField(Permission, blank=True, filter_interface=meta.HORIZONTAL)
     class META:
+        verbose_name = _('Group')
+        verbose_name_plural = _('Groups')
         ordering = ('name',)
         admin = meta.Admin(
             search_fields = ('name',),
@@ -25,20 +30,22 @@ class Group(meta.Model):
         return self.name
 
 class User(meta.Model):
-    username = meta.CharField(maxlength=30, unique=True, validator_list=[validators.isAlphaNumeric])
-    first_name = meta.CharField(maxlength=30, blank=True)
-    last_name = meta.CharField(maxlength=30, blank=True)
-    email = meta.EmailField('e-mail address', blank=True)
-    password_md5 = meta.CharField('password', maxlength=32, help_text="Use an MD5 hash -- not the raw password.")
-    is_staff = meta.BooleanField('staff status', help_text="Designates whether the user can log into this admin site.")
-    is_active = meta.BooleanField('active', default=True)
-    is_superuser = meta.BooleanField('superuser status')
-    last_login = meta.DateTimeField(default=meta.LazyDate())
-    date_joined = meta.DateTimeField(default=meta.LazyDate())
+    username = meta.CharField(_('username'), maxlength=30, unique=True, validator_list=[validators.isAlphaNumeric])
+    first_name = meta.CharField(_('first name'), maxlength=30, blank=True)
+    last_name = meta.CharField(_('last name'), maxlength=30, blank=True)
+    email = meta.EmailField(_('e-mail address'), blank=True)
+    password_md5 = meta.CharField(_('password'), maxlength=32, help_text=_("Use an MD5 hash -- not the raw password."))
+    is_staff = meta.BooleanField(_('staff status'), help_text=_("Designates whether the user can log into this admin site."))
+    is_active = meta.BooleanField(_('active'), default=True)
+    is_superuser = meta.BooleanField(_('superuser status'))
+    last_login = meta.DateTimeField(_('last login'), default=meta.LazyDate())
+    date_joined = meta.DateTimeField(_('date joined'), default=meta.LazyDate())
     groups = meta.ManyToManyField(Group, blank=True,
-        help_text="In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in.")
+        help_text=_("In addition to the permissions manually assigned, this user will also get all permissions granted to each group he/she is in."))
     user_permissions = meta.ManyToManyField(Permission, blank=True, filter_interface=meta.HORIZONTAL)
     class META:
+        verbose_name = _('User')
+        verbose_name_plural = _('Users')
         module_constants = {
             'SESSION_KEY': '_auth_user_id',
         }
@@ -47,10 +54,10 @@ class User(meta.Model):
         admin = meta.Admin(
             fields = (
                 (None, {'fields': ('username', 'password_md5')}),
-                ('Personal info', {'fields': ('first_name', 'last_name', 'email')}),
-                ('Permissions', {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
-                ('Important dates', {'fields': ('last_login', 'date_joined')}),
-                ('Groups', {'fields': ('groups',)}),
+                (_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
+                (_('Permissions'), {'fields': ('is_staff', 'is_active', 'is_superuser', 'user_permissions')}),
+                (_('Important dates'), {'fields': ('last_login', 'date_joined')}),
+                (_('Groups'), {'fields': ('groups',)}),
             ),
             list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff'),
             list_filter = ('is_staff', 'is_superuser'),
@@ -172,7 +179,7 @@ class User(meta.Model):
 
 class Message(meta.Model):
     user = meta.ForeignKey(User)
-    message = meta.TextField()
+    message = meta.TextField(_('Message'))
 
     def __repr__(self):
         return self.message
diff --git a/django/models/core.py b/django/models/core.py
index 939373f7ec..89695c21b2 100644
--- a/django/models/core.py
+++ b/django/models/core.py
@@ -1,9 +1,12 @@
 from django.core import meta, validators
+from django.utils.translation import gettext_lazy as _
 
 class Site(meta.Model):
-    domain = meta.CharField('domain name', maxlength=100)
-    name = meta.CharField('display name', maxlength=50)
+    domain = meta.CharField(_('domain name'), maxlength=100)
+    name = meta.CharField(_('display name'), maxlength=50)
     class META:
+        verbose_name = _('site')
+        verbose_name_plural = _('sites')
         db_table = 'sites'
         ordering = ('domain',)
 
@@ -16,9 +19,11 @@ class Site(meta.Model):
         return get_object(pk=SITE_ID)
 
 class Package(meta.Model):
-    label = meta.CharField(maxlength=20, primary_key=True)
-    name = meta.CharField(maxlength=30, unique=True)
+    label = meta.CharField(_('label'), maxlength=20, primary_key=True)
+    name = meta.CharField(_('name'), maxlength=30, unique=True)
     class META:
+        verbose_name = _('package')
+        verbose_name_plural = _('packages')
         db_table = 'packages'
         ordering = ('name',)
 
@@ -26,10 +31,12 @@ class Package(meta.Model):
         return self.name
 
 class ContentType(meta.Model):
-    name = meta.CharField(maxlength=100)
+    name = meta.CharField(_('name'), maxlength=100)
     package = meta.ForeignKey(Package, db_column='package')
-    python_module_name = meta.CharField(maxlength=50)
+    python_module_name = meta.CharField(_('python module name'), maxlength=50)
     class META:
+        verbose_name = _('content type')
+        verbose_name_plural = _('content types')
         db_table = 'content_types'
         ordering = ('package', 'name')
         unique_together = (('package', 'python_module_name'),)
@@ -52,11 +59,13 @@ class ContentType(meta.Model):
 
 class Redirect(meta.Model):
     site = meta.ForeignKey(Site, radio_admin=meta.VERTICAL)
-    old_path = meta.CharField('redirect from', maxlength=200, db_index=True,
-        help_text="This should be an absolute path, excluding the domain name. Example: '/events/search/'.")
-    new_path = meta.CharField('redirect to', maxlength=200, blank=True,
-        help_text="This can be either an absolute path (as above) or a full URL starting with 'http://'.")
+    old_path = meta.CharField(_('redirect from'), maxlength=200, db_index=True,
+        help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
+    new_path = meta.CharField(_('redirect to'), maxlength=200, blank=True,
+        help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
     class META:
+        verbose_name = _('redirect')
+        verbose_name_plural = _('redirects')
         db_table = 'redirects'
         unique_together=(('site', 'old_path'),)
         ordering = ('old_path',)
@@ -69,18 +78,19 @@ class Redirect(meta.Model):
         return "%s ---> %s" % (self.old_path, self.new_path)
 
 class FlatFile(meta.Model):
-    url = meta.CharField('URL', maxlength=100, validator_list=[validators.isAlphaNumericURL],
-        help_text="Example: '/about/contact/'. Make sure to have leading and trailing slashes.")
-    title = meta.CharField(maxlength=200)
-    content = meta.TextField()
-    enable_comments = meta.BooleanField()
-    template_name = meta.CharField(maxlength=70, blank=True,
-        help_text="Example: 'flatfiles/contact_page'. If this isn't provided, the system will use 'flatfiles/default'.")
-    registration_required = meta.BooleanField(help_text="If this is checked, only logged-in users will be able to view the page.")
+    url = meta.CharField(_('URL'), maxlength=100, validator_list=[validators.isAlphaNumericURL],
+        help_text=_("Example: '/about/contact/'. Make sure to have leading and trailing slashes."))
+    title = meta.CharField(_('title'), maxlength=200)
+    content = meta.TextField(_('content'))
+    enable_comments = meta.BooleanField(_('enable comments'))
+    template_name = meta.CharField(_('template name'), maxlength=70, blank=True,
+        help_text=_("Example: 'flatfiles/contact_page'. If this isn't provided, the system will use 'flatfiles/default'."))
+    registration_required = meta.BooleanField(_('registration required'), help_text=_("If this is checked, only logged-in users will be able to view the page."))
     sites = meta.ManyToManyField(Site)
     class META:
         db_table = 'flatfiles'
-        verbose_name = 'flat page'
+        verbose_name = _('flat page')
+        verbose_name_plural = _('flat pages')
         ordering = ('url',)
         admin = meta.Admin(
             fields = (
@@ -101,10 +111,12 @@ import base64, md5, random, sys
 import cPickle as pickle
 
 class Session(meta.Model):
-    session_key = meta.CharField(maxlength=40, primary_key=True)
-    session_data = meta.TextField()
-    expire_date = meta.DateTimeField()
+    session_key = meta.CharField(_('session key'), maxlength=40, primary_key=True)
+    session_data = meta.TextField(_('session data'))
+    expire_date = meta.DateTimeField(_('expire date'))
     class META:
+        verbose_name = _('session')
+        verbose_name_plural = _('sessions')
         module_constants = {
             'base64': base64,
             'md5': md5,
diff --git a/django/templatetags/i18n.py b/django/templatetags/i18n.py
new file mode 100644
index 0000000000..e9702f2dc3
--- /dev/null
+++ b/django/templatetags/i18n.py
@@ -0,0 +1,217 @@
+"Default tags used by the template system, available to all templates."
+
+from django.core.template import Node, NodeList, Template, Context, resolve_variable, resolve_variable_with_filters, registered_filters
+from django.core.template import TemplateSyntaxError, register_tag, TokenParser
+from django.core.template import TOKEN_BLOCK, TOKEN_TEXT, TOKEN_VAR
+from django.utils import translation
+
+import sys
+import re
+
+class GetAvailableLanguagesNode(Node):
+
+    def __init__(self, variable):
+        self.variable = variable
+
+    def render(self, context):
+        from django.conf.settings import LANGUAGES
+        context[self.variable] = LANGUAGES
+        return ''
+
+class GetCurrentLanguageNode(Node):
+
+    def __init__(self, variable):
+        self.variable = variable
+
+    def render(self, context):
+        context[self.variable] = translation.get_language()
+        return ''
+
+class TranslateNode(Node):
+
+    def __init__(self, value, noop):
+        self.value = value
+        self.noop = noop
+
+    def render(self, context):
+        value = resolve_variable(self.value, context)
+        if self.noop:
+            return value
+        else:
+            return translation.gettext(value)
+
+class BlockTranslateNode(Node):
+
+    def __init__(self, extra_context, singular, plural=None, countervar=None, counter=None):
+        self.extra_context = extra_context
+        self.singular = singular
+        self.plural = plural
+        self.countervar = countervar
+        self.counter = counter
+
+    def render_token_list(self, tokens):
+        result = []
+        for token in tokens:
+            if token.token_type == TOKEN_TEXT:
+                result.append(token.contents)
+            elif token.token_type == TOKEN_VAR:
+                result.append('%%(%s)s' % token.contents)
+        return ''.join(result)
+
+    def render(self, context):
+        context.push()
+        for var,val in self.extra_context.items():
+            context[var] = resolve_variable_with_filters(val, context)
+        singular = self.render_token_list(self.singular) % context
+        if self.plural and self.countervar and self.counter:
+            count = resolve_variable_with_filters(self.counter, context)
+            context[self.countervar] = count
+            plural = self.render_token_list(self.plural) % context
+            result = translation.ngettext(singular, plural, count) % context
+        else:
+            result = translation.gettext(singular) % context
+        context.pop()
+        return result
+
+def do_get_available_languages(parser, token):
+    """
+    This will store a list of available languages
+    in the context.
+
+    Usage is as follows::
+
+        {% get_available_languages as languages %}
+        {% for language in languages %}
+        ...
+        {% endfor %}
+
+    This will just pull the LANGUAGES setting from
+    your setting file (or the default settings) and
+    put it into the named variable.
+    """
+
+    args = token.contents.split()
+    if len(args) != 3 or args[1] != 'as':
+        raise TemplateSyntaxError, "'get_available_languages' requires 'as variable' (got %r)" % args
+    return GetAvailableLanguagesNode(args[2])
+
+def do_get_current_language(parser, token):
+    """
+    This will store the current language in
+    the context.
+
+    Usage is as follows::
+
+        {% get_current_language as language %}
+
+    This will fetch the currently active language and
+    put it's value into the ``language`` context
+    variable.
+    """
+
+    args = token.contents.split()
+    if len(args) != 3 or args[1] != 'as':
+        raise TemplateSyntaxError, "'get_available_languages' requires 'as variable' (got %r)" % args
+    return GetCurrentLanguageNode(args[2])
+
+def do_translate(parser, token):
+    """
+    This will mark a string for translation and will
+    translate the string for the current language.
+
+    Usage is like this::
+
+        {% trans "this is a test" %}
+
+    This will mark the string for translation so it will
+    be pulled out by mark-messages.py into the .po files
+    and will run the string through the translation engine.
+
+    There is a second form::
+
+        {% trans "this is a test" noop %}
+
+    This will only mark for translation, but will return
+    the string unchanged. Use it when you need to store
+    values into forms that should be translated later on.
+
+    You can use variables instead of constant strings
+    to translate stuff you marked somewhere else::
+
+        {% trans variable %}
+
+    This will just try to translate the contents of
+    the variable ``variable``. Make sure that the string
+    in there is something that is in the .po file.
+    """
+
+    class TranslateParser(TokenParser):
+
+        def top(self):
+            value = self.value()
+            if self.more():
+                if self.tag() == 'noop':
+                    noop = True
+                else:
+                    raise TemplateSyntaxError, "only option for 'trans' is 'noop'"
+            else:
+                noop = False
+            return (value, noop)
+
+    (value, noop) = TranslateParser(token.contents).top()
+    return TranslateNode(value, noop)
+
+def do_block_translate(parser, token):
+    """
+    """
+    class BlockTranslateParser(TokenParser):
+
+        def top(self):
+            countervar = None
+            counter = None
+            extra_context = {}
+            while self.more():
+                tag = self.tag()
+                if tag == 'with' or tag == 'and':
+                    value = self.value()
+                    if self.tag() != 'as':
+                        raise TemplateSyntaxError, "variable bindings in 'blocktrans' must be 'with value as variable'"
+                    extra_context[self.tag()] = value
+                elif tag == 'count':
+                    counter = self.value()
+                    if self.tag() != 'as':
+                        raise TemplateSyntaxError, "counter specification in 'blocktrans' must be 'count value as variable'"
+                    countervar = self.tag()
+                else:
+                    raise TemplateSyntaxError, "unknown subtag %s for 'blocktrans' found" % tag
+            return (countervar, counter, extra_context)
+
+    (countervar, counter, extra_context) = BlockTranslateParser(token.contents).top()
+
+    singular = []
+    plural = []
+    while parser.tokens:
+        token = parser.next_token()
+        if token.token_type in (TOKEN_VAR, TOKEN_TEXT):
+            singular.append(token)
+        else:
+            break
+    if countervar and counter:
+        if token.contents.strip() != 'plural':
+            raise TemplateSyntaxError, "'blocktrans' doesn't allow other block tags inside it" % tag
+        while parser.tokens:
+            token = parser.next_token()
+            if token.token_type in (TOKEN_VAR, TOKEN_TEXT):
+                plural.append(token)
+            else:
+                break
+    if token.contents.strip() != 'endblocktrans':
+        raise TemplateSyntaxError, "'blocktrans' doesn't allow other block tags (seen %r) inside it" % token.contents
+
+    return BlockTranslateNode(extra_context, singular, plural, countervar, counter)
+
+register_tag('get_available_languages', do_get_available_languages)
+register_tag('get_current_language', do_get_current_language)
+register_tag('trans', do_translate)
+register_tag('blocktrans', do_block_translate)
+
diff --git a/django/utils/dates.py b/django/utils/dates.py
index 2ae0cc1a6e..12fb7b2b76 100644
--- a/django/utils/dates.py
+++ b/django/utils/dates.py
@@ -1,17 +1,19 @@
 "Commonly-used date structures"
 
+from django.utils.translation import gettext_lazy as _
+
 WEEKDAYS = {
-    0:'Monday', 1:'Tuesday', 2:'Wednesday', 3:'Thursday', 4:'Friday',
-    5:'Saturday', 6:'Sunday'
+    0:_('Monday'), 1:_('Tuesday'), 2:_('Wednesday'), 3:_('Thursday'), 4:_('Friday'),
+    5:_('Saturday'), 6:_('Sunday')
 }
 WEEKDAYS_REV = {
     'monday':0, 'tuesday':1, 'wednesday':2, 'thursday':3, 'friday':4,
     'saturday':5, 'sunday':6
 }
 MONTHS = {
-    1:'January', 2:'February', 3:'March', 4:'April', 5:'May', 6:'June',
-    7:'July', 8:'August', 9:'September', 10:'October', 11:'November',
-    12:'December'
+    1:_('January'), 2:_('February'), 3:_('March'), 4:_('April'), 5:_('May'), 6:_('June'),
+    7:_('July'), 8:_('August'), 9:_('September'), 10:_('October'), 11:_('November'),
+    12:_('December')
 }
 MONTHS_3 = {
     1:'jan', 2:'feb', 3:'mar', 4:'apr', 5:'may', 6:'jun', 7:'jul', 8:'aug',
@@ -22,6 +24,6 @@ MONTHS_3_REV = {
     'sep':9, 'oct':10, 'nov':11, 'dec':12
 }
 MONTHS_AP = { # month names in Associated Press style
-    1:'Jan.', 2:'Feb.', 3:'March', 4:'April', 5:'May', 6:'June', 7:'July',
-    8:'Aug.', 9:'Sept.', 10:'Oct.', 11:'Nov.', 12:'Dec.'
+    1:_('Jan.'), 2:_('Feb.'), 3:_('March'), 4:_('April'), 5:_('May'), 6:_('June'), 7:_('July'),
+    8:_('Aug.'), 9:_('Sept.'), 10:_('Oct.'), 11:_('Nov.'), 12:_('Dec.')
 }
diff --git a/django/utils/functional.py b/django/utils/functional.py
index f3b0598763..2b3ca8293e 100644
--- a/django/utils/functional.py
+++ b/django/utils/functional.py
@@ -2,3 +2,64 @@ def curry(*args, **kwargs):
     def _curried(*moreargs, **morekwargs):
         return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
     return _curried
+
+def lazy(func, *resultclasses):
+
+    """
+    lazy turns any callable passed in into a lazy evaluated callable.
+    you need to give result classes or types - at least one is needed
+    so that the automatic forcing of the lazy evaluation code is
+    triggered. Results are not memoized - the function is evaluated
+    on every access.
+    """
+
+    class __proxy__:
+    
+        """
+        This inner class encapsulates the code that should be evaluated
+        lazyly. On calling of one of the magic methods it will force
+        the evaluation and store the result - afterwards the result
+        is delivered directly. So the result is memoized.
+        """
+
+        def __init__(self, args, kw):
+           self.__func = func
+           self.__args = args
+           self.__kw = kw
+           self.__dispatch = {}
+           for resultclass in resultclasses:
+               self.__dispatch[resultclass] = {}
+               for (k, v) in resultclass.__dict__.items():
+                   setattr(self, k, self.__promise__(resultclass, k, v))
+	
+        def __promise__(self, klass, funcname, func):
+        
+            """
+            This function builds a wrapper around some magic method and
+            registers that magic method for the given type and methodname.
+            """
+    
+            def __wrapper__(*args, **kw):
+                """
+                This wrapper function automatically triggers the evaluation of
+                a lazy value. It then applies the given magic method of the
+                result type.
+                """
+                res = self.__func(*self.__args, **self.__kw)
+                return self.__dispatch[type(res)][funcname](res, *args, **kw)
+  
+            if not self.__dispatch.has_key(klass):
+                self.__dispatch[klass] = {}
+            self.__dispatch[klass][funcname] = func
+            return __wrapper__
+  
+    def __wrapper__(*args, **kw):
+        """
+        This wrapper function just creates the proxy object that is returned
+        instead of the actual value.
+        """
+        return __proxy__(args, kw)
+
+    return __wrapper__
+
+
diff --git a/django/utils/text.py b/django/utils/text.py
index 0d6f20a7d6..6ac8352ac6 100644
--- a/django/utils/text.py
+++ b/django/utils/text.py
@@ -55,7 +55,7 @@ def get_text_list(list_, last_word='or'):
     """
     if len(list_) == 0: return ''
     if len(list_) == 1: return list_[0]
-    return '%s %s %s' % (', '.join([i for i in list_][:-1]), last_word, list_[-1])
+    return '%s %s %s' % (', '.join([str(i) for i in list_][:-1]), last_word, list_[-1])
 
 def normalize_newlines(text):
     return re.sub(r'\r\n|\r|\n', '\n', text)
diff --git a/django/utils/translation.py b/django/utils/translation.py
new file mode 100644
index 0000000000..0d40a636c8
--- /dev/null
+++ b/django/utils/translation.py
@@ -0,0 +1,447 @@
+"translation helper functions"
+
+import os
+import re
+import sys
+import gettext as gettext_module
+from cStringIO import StringIO
+
+from django.utils.functional import lazy
+
+try:
+    import threading
+    hasThreads = True
+except ImportError:
+    hasThreads = False
+
+if hasThreads:
+    currentThread = threading.currentThread
+else:
+    def currentThread():
+        return 'no threading'
+
+# translations are cached in a dictionary for
+# every language+app tuple. The active translations
+# are stored by threadid to make them thread local.
+_translations = {}
+_active = {}
+
+# the default translation is based on the settings file
+_default = None
+
+# this is a cache for accept-header to translation
+# object mappings to prevent the accept parser to
+# run multiple times for one user
+_accepted = {}
+
+def to_locale(language):
+    "turn a language name (en-us) into a locale name (en_US)"
+    p = language.find('-')
+    if p >= 0:
+        return language[:p].lower()+'_'+language[p+1:].upper()
+    else:
+        return language.lower()
+
+def to_language(locale):
+    "turns a locale name (en_US) into a language name (en-us)"
+    p = locale.find('_')
+    if p >= 0:
+        return locale[:p].lower()+'-'+locale[p+1:].lower()
+    else:
+        return locale.lower()
+
+class DjangoTranslation(gettext_module.GNUTranslations):
+    """
+    This class sets up the GNUTranslations context with
+    regard to output charset. Django uses a defined
+    DEFAULT_CHARSET as the output charset on Python 2.4 -
+    with Python 2.3, you need to use DjangoTranslation23.
+    """
+
+    def __init__(self, *args, **kw):
+        from django.conf import settings
+        gettext_module.GNUTranslations.__init__(self, *args, **kw)
+        # starting with Python 2.4, there is a function to define
+        # the output charset. Before 2.4, the output charset is
+        # identical with the translation file charset.
+        try:
+            self.set_output_charset(settings.DEFAULT_CHARSET)
+        except AttributeError:
+            pass
+        self.django_output_charset = settings.DEFAULT_CHARSET
+        self.__language = '??'
+
+    def merge(self, other):
+        self._catalog.update(other._catalog)
+    
+    def set_language(self, language):
+        self.__language = language
+
+    def language(self):
+        return self.__language
+    
+    def __repr__(self):
+        return "<DjangoTranslation lang:%s>" % self.__language
+
+
+class DjangoTranslation23(DjangoTranslation):
+
+    """
+    This is a compatibility class that is only used with Python 2.3.
+    The reason is, Python 2.3 doesn't support set_output_charset on
+    translation objects and so needs this wrapper class to make sure
+    that input charsets from translation files are correctly translated
+    to output charsets.
+
+    With a full switch to Python 2.4, this can be removed from the source.
+    """
+
+    def gettext(self, msgid):
+        res = self.ugettext(msgid)
+        return res.encode(self.django_output_charset)
+
+    def ngettext(self, msgid1, msgid2, n):
+        res = self.ungettext(msgid1, msgid2, n)
+        return res.encode(self.django_output_charset)
+
+def translation(language):
+    """
+    This function returns a translation object.  app must be the fully
+    qualified name of the application.
+
+    This translation object will be constructed out of multiple GNUTranslations
+    objects by merging their catalogs. It will construct a object for the requested
+    language and add a fallback to the default language, if that is different
+    from the requested language.
+    """
+    global _translations
+
+    t = _translations.get(language, None)
+    if t is not None:
+        return t
+    
+    from django.conf import settings
+
+    # set up the right translation class
+    klass = DjangoTranslation
+    if sys.version_info < (2, 4):
+        klass = DjangoTranslation23
+
+    globalpath = os.path.join(os.path.dirname(settings.__file__), 'locale')
+
+    parts = os.environ['DJANGO_SETTINGS_MODULE'].split('.')
+    project = __import__(parts[0], {}, {}, [])
+    projectpath = os.path.join(os.path.dirname(project.__file__), 'locale')
+
+    def _fetch(lang, fallback=None):
+
+        global _translations
+
+        loc = to_locale(lang)
+
+        res = _translations.get(lang, None)
+        if res is not None:
+            return res
+
+        def _translation(path):
+            try:
+                t = gettext_module.translation('django', path, [loc], klass)
+                t.set_language(lang)
+                return t
+            except IOError, e:
+                return None
+    
+        res = _translation(globalpath)
+
+        def _merge(path):
+            t = _translation(path)
+            if t is not None:
+                if res is None:
+                    return t
+                else:
+                    res.merge(t)
+            return res
+
+        if hasattr(settings, 'LOCALE_PATHS'):
+            for localepath in settings.LOCALE_PATHS:
+                if os.path.isdir(localepath):
+                    res = _merge(localepath)
+
+        if os.path.isdir(projectpath):
+            res = _merge(projectpath)
+
+        for appname in settings.INSTALLED_APPS:
+            p = appname.rfind('.')
+            if p >= 0:
+                app = getattr(__import__(appname[:p], {}, {}, [appname[p+1:]]), appname[p+1:])
+            else:
+                app = __import__(appname, {}, {}, [])
+
+            apppath = os.path.join(os.path.dirname(app.__file__), 'locale')
+
+            if os.path.isdir(apppath):
+                res = _merge(apppath)
+  
+        if res is None:
+            if fallback is not None:
+                res = fallback
+            else:
+                return gettext_module.NullTranslations()
+        _translations[lang] = res
+        return res
+
+    default_translation = _fetch(settings.LANGUAGE_CODE)
+    current_translation = _fetch(language, fallback=default_translation)
+
+    return current_translation
+
+def activate(language):
+    """
+    This function fetches the translation object for a given
+    tuple of application name and language and installs it as
+    the current translation object for the current thread.
+    """
+    _active[currentThread()] = translation(language)
+
+def deactivate():
+    """
+    This function deinstalls the currently active translation
+    object so that further _ calls will resolve against the
+    default translation object, again.
+    """
+    global _active
+
+    if _active.has_key(currentThread()):
+        del _active[currentThread()]
+
+def get_language():
+    """
+    This function returns the currently selected language.
+    """
+    t = _active.get(currentThread(), None)
+    if t is not None:
+        try:
+            return to_language(t.language())
+        except AttributeError:
+            pass
+    # if we don't have a real translation object, we assume
+    # it's the default language.
+    from django.conf.settings import LANGUAGE_CODE
+    return LANGUAGE_CODE
+
+def gettext(message):
+    """
+    This function will be patched into the builtins module to
+    provide the _ helper function. It will use the current
+    thread as a discriminator to find the translation object
+    to use. If no current translation is activated, the
+    message will be run through the default translation
+    object.
+    """
+    global _default, _active
+
+    t = _active.get(currentThread(), None)
+    if t is not None:
+        return t.gettext(message)
+    if _default is None:
+        from django.conf import settings
+        _default = translation(settings.LANGUAGE_CODE)
+    return _default.gettext(message)
+
+def gettext_noop(message):
+    """
+    This function is used to just mark strings for translation
+    but to not translate them now. This can be used to store
+    strings in global variables that should stay in the base
+    language (because they might be used externally) and will
+    be translated later on.
+    """
+    return message
+
+def ngettext(singular, plural, number):
+    """
+    This function returns the translation of either the singular
+    or plural, based on the number.
+    """
+    global _default, _active
+
+    t = _active.get(currentThread(), None)
+    if t is not None:
+        return t.ngettext(singular, plural, number)
+    if _default is None:
+        from django.conf import settings
+        _default = translation('*', settings.LANGUAGE_CODE)
+    return _default.ngettext(singular, plural, number)
+
+gettext_lazy = lazy(gettext, str)
+ngettext_lazy = lazy(ngettext, str)
+
+def check_for_language(lang_code):
+    """
+    This function checks wether there is a global language
+    file for the given language code. This is used to decide
+    wether a user-provided language is available.
+    """
+    from django.conf import settings
+    globalpath = os.path.join(os.path.dirname(settings.__file__), 'locale')
+    if gettext_module.find('django', globalpath, [to_locale(lang_code)]) is not None:
+        return True
+    else:
+        return False
+
+def get_language_from_request(request):
+    """
+    analyze the request to find what language the user
+    wants the system to show.
+    """
+    global _accepted
+
+    from django.conf import settings
+    globalpath = os.path.join(os.path.dirname(settings.__file__), 'locale')
+
+    if hasattr(request, 'session'):
+        lang_code = request.session.get('django_language', None)
+        if lang_code is not None and check_for_language(lang_code):
+            return lang_code
+    
+    lang_code = request.COOKIES.get('django_language', None)
+    if lang_code is not None and check_for_language(lang_code):
+        return lang_code
+    
+    accept = request.META.get('HTTP_ACCEPT_LANGUAGE', None)
+    if accept is not None:
+
+        t = _accepted.get(accept, None)
+        if t is not None:
+            return t
+
+        def _parsed(el):
+            p = el.find(';q=')
+            if p >= 0:
+                lang = el[:p].strip()
+                order = int(float(el[p+3:].strip())*100)
+            else:
+                lang = el
+                order = 100
+            if lang.find('-') >= 0:
+                (lang, sublang) = lang.split('-')
+                lang = lang.lower() + '_' + sublang.upper()
+            return (lang, order)
+
+        langs = [_parsed(el) for el in accept.split(',')]
+        langs.sort(lambda a,b: -1*cmp(a[1], b[1]))
+
+        for lang, order in langs:
+            langfile = gettext_module.find('django', globalpath, [to_locale(lang)])
+            if langfile:
+                # reconstruct the actual language from the language
+                # filename, because otherwise we might incorrectly
+                # report de_DE if we only have de available, but
+                # did find de_DE because of language normalization
+                lang = langfile[len(globalpath):].split('/')[1]
+                _accepted[accept] = lang
+                return lang
+    
+    return settings.LANGUAGE_CODE
+
+def install():
+    """
+    This installs the gettext function as the default
+    translation function under the name _.
+    """
+    __builtins__['_'] = gettext
+
+
+dot_re = re.compile(r'\S')
+def blankout(src, char):
+    """
+    This is used in the templateize function and changes every
+    non-whitespace character to the given char.
+    """
+    return dot_re.sub(char, src)
+
+inline_re = re.compile(r"""^\s*trans\s+((?:".*?")|(?:'.*?'))\s*""")
+block_re = re.compile(r"""^\s*blocktrans(?:\s+|$)""")
+endblock_re = re.compile(r"""^\s*endblocktrans$""")
+plural_re = re.compile(r"""^\s*plural$""")
+constant_re = re.compile(r"""_\(((?:".*?")|(?:'.*?'))\)""")
+def templateize(src):
+    from django.core.template import tokenize, TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK
+    """
+    This function turns a django template into something that is
+    understood by xgettext. It does so by translating the django
+    translation tags into standard gettext function invocations.
+    """
+    out = StringIO()
+    intrans = False
+    inplural = False
+    singular = []
+    plural = []
+    for t in tokenize(src):
+        if intrans:
+            if t.token_type == TOKEN_BLOCK:
+                endbmatch = endblock_re.match(t.contents)
+                pluralmatch = plural_re.match(t.contents)
+                if endbmatch:
+                    if inplural:
+                        out.write(' ngettext(%r,%r,count) ' % (''.join(singular), ''.join(plural)))
+                        for part in singular:
+                            out.write(blankout(part, 'S'))
+                        for part in plural:
+                            out.write(blankout(part, 'P'))
+                    else:
+                        out.write(' gettext(%r) ' % ''.join(singular))
+                        for part in singular:
+                            out.write(blankout(part, 'S'))
+                    intrans = False
+                    inplural = False
+                    singular = []
+                    plural = []
+                elif pluralmatch:
+                    inplural = True
+                else:
+                    raise SyntaxError, "translation blocks must not include other block tags: %s" % t.contents
+            elif t.token_type == TOKEN_VAR:
+                if inplural:
+                    plural.append('%%(%s)s' % t.contents)
+                else:
+                    singular.append('%%(%s)s' % t.contents)
+            elif t.token_type == TOKEN_TEXT:
+                if inplural:
+                    plural.append(t.contents)
+                else:
+                    singular.append(t.contents)
+        else:
+            if t.token_type == TOKEN_BLOCK:
+                imatch = inline_re.match(t.contents)
+                bmatch = block_re.match(t.contents)
+                cmatches = constant_re.findall(t.contents)
+                if imatch:
+                    g = imatch.group(1)
+                    if g[0] == '"': g = g.strip('"')
+                    elif g[0] == "'": g = g.strip("'")
+                    out.write(' gettext(%r) ' % g)
+                elif bmatch:
+                    intrans = True
+                    inplural = False
+                    singular = []
+                    plural = []
+                elif cmatches:
+                    for cmatch in cmatches:
+                        out.write(' _(%s) ' % cmatch)
+                else:
+                    out.write(blankout(t.contents, 'B'))
+            elif t.token_type == TOKEN_VAR:
+                parts = t.contents.split('|')
+                cmatch = constant_re.match(parts[0])
+                if cmatch:
+                    out.write(' _(%s) ' % cmatch.group(1))
+                for p in parts[1:]:
+                    if p.find(':_(') >= 0:
+                        out.write(' %s ' % p.split(':',1)[1])
+                    else:
+                        out.write(blankout(p, 'F'))
+            else:
+                out.write(blankout(t.contents, 'X'))
+    return out.getvalue()
+
diff --git a/django/views/i18n.py b/django/views/i18n.py
new file mode 100644
index 0000000000..7bb2f00b2f
--- /dev/null
+++ b/django/views/i18n.py
@@ -0,0 +1,22 @@
+from django.utils import httpwrappers
+from django.utils.translation import check_for_language
+
+def set_language(request):
+    """
+    Redirect to a given url while setting the chosen language in the
+    session or cookie. The url and the language code need to be
+    specified in the GET paramters.
+    """
+    lang_code = request.GET['language']
+    next = request.GET.get('next', None)
+    if not next:
+        next = request.META.get('HTTP_REFERER', None)
+    if not next:
+        next = '/'
+    response = httpwrappers.HttpResponseRedirect(next)
+    if check_for_language(lang_code):
+        if hasattr(request, 'session'):
+            request.session['django_language'] = lang_code
+        else:
+            response.set_cookie('django_language', lang_code)
+    return response
diff --git a/docs/settings.txt b/docs/settings.txt
index acbbca96d4..1d65d44c88 100644
--- a/docs/settings.txt
+++ b/docs/settings.txt
@@ -355,9 +355,12 @@ See http://www.thaiopensource.com/relaxng/jing.html .
 LANGUAGE_CODE
 -------------
 
-Default: ``'en-us'``
+Default: ``'en'``
 
-A string representing the language code for this installation.
+A string representing the language code for this installation. This should
+be in locale format, that's 'en_US' for us-english. If you want to send
+out the language in your HTML code, use the LANGUAGE_CODE attribute of the
+request, instead, as the chosen language will depend on the browsers settings.
 
 MANAGERS
 --------
diff --git a/docs/translation.txt b/docs/translation.txt
new file mode 100644
index 0000000000..637719b879
--- /dev/null
+++ b/docs/translation.txt
@@ -0,0 +1,438 @@
+======================
+How to do translations
+======================
+
+Django has support for internationalization of program strings and template
+content. Translations use the ``gettext`` library to produce strings in several
+languages. Here's an overview of how translation works with Django.
+
+The goal of this document is to explain how to use translations in projects,
+how to add translations to Django patches and how to update and create
+translation files.
+
+Using translations in Python
+============================
+
+The translation machinery in Django uses the standard ``gettext`` module that
+comes with Python. Django uses in its own functions and classes, but it uses
+standard ``gettext`` machinery under the hood.
+
+To translate strings in your code, use one of the ``gettext`` helper functions.
+There are essentially two ways to use them:
+
+    * Use the ``_()`` function, which is available globally. This function
+      translates any string value.
+    * Use ``django.utils.translation`` and import ``gettext`` or
+      ``gettext_noop`` from there. ``gettext`` is identical to ``_()``.
+
+Note one important thing about translations: The system can only translate
+strings it knows about. That means you have to mark strings for translation.
+This is done either by calling ``_()``, ``gettext()`` or ``gettext_noop()`` on
+string constants. You can translate variable values or computed values, but the
+system needs to know those strings beforehand.
+
+The usual method is to build your strings using string interpolation and using
+the ``gettext`` functions to do the actual translation. Example::
+
+    def hello_world(request, name, site):
+        page = _('Hello %(name)s, welcome to %(site)s!') % {
+            'name': name,
+            'site': site,
+        }
+        return HttpResponse(page)
+
+This short snippet shows one important thing: You shouldn't use positional
+string interpolation (e.g., ``%s`` or ``%d``). Use the named string
+interpolation (e.g., ``%(name)s``), instead. Do this because other languages
+might require reordering of text.
+
+The other two helper functions are similar::
+
+    from django.utils.translation import gettext
+    def hello_world(request, name, site):
+        page = gettext('Hello %(name)s, welcome to %(site)s!') % {
+            'name': name,
+            'site': site,
+        }
+        return HttpResponse(page)
+
+The difference here is that ``gettext`` is explicitly imported.
+
+Two important helper functions are available: ``gettext`` and ``gettext_noop``.
+
+    * ``gettext`` is just like ``_()`` -- it translates its argument.
+    * ``gettext_noop`` is different. It marks a string for inclusion into the
+      message file but doesn't do translation. Instead, the string is later
+      translated from a variable. Use this if you have constant strings that
+      should be stored in the source language because they are exchanged over
+      systems or users -- such as strings in a database -- but should be
+      translated at the last possible point in time, such as when the string is
+      presented to the user.
+
+One function, ``django.utils.translation.gettext_lazy()``, isn't available in
+the standard ``gettext`` module. Use it for lazily translated strings, such as
+messages in Django models that are stored internally and translated on access
+-- but not translated on storage, as that would only take the default language
+into account.
+
+For example, to translate a model's ``help_text``, do the following::
+
+    from django.utils.translation import gettext_lazy
+
+    class MyThing(meta.Model):
+        name = meta.CharField(help_text=gettext_lazy('This is the help text'))
+
+In this example, ``gettext_lazy()`` stores a lazy reference to the string --
+not the actual translation. The translation itself will be done when the string
+is used in a string context, such as template rendering on the Django admin site.
+
+If you don't like the verbose name ``gettext_lazy``, you can just alias it as
+``_``, like so::
+
+    from django.utils.translation import gettext_lazy as _
+
+    class MyThing(meta.Model):
+        name = meta.CharField(help_text=_('This is the help text'))
+
+Always use lazy translations in Django models. And it's a good idea to add
+translations for the field names and table names, too. This means writing
+explicit ``verbose_name`` and ``verbose_name_plural`` options in the ``META``
+class, though::
+
+    from django.utils.translation import gettext_lazy as _
+
+    class MyThing(meta.Model):
+        name = meta.CharField(_('name'), help_text=_('This is the help text'))
+        class META:
+            verbose_name = _('my thing')
+            verbose_name_plural = _('mythings')
+
+A standard problem with translations is pluralization of strings. Use
+``ngettext`` to solve this problem. Example::
+
+    def hello_world(request, count):
+        from django.utils.translation import ngettext
+        page = ngettext('there is %(count)d object', 'there are %(count)d objects', count) % {
+            'count': count,
+        }
+        return HttpResponse(page)
+
+Using translations in templates
+===============================
+
+Using translations in Django templates uses two template tags and a slightly
+different syntax than standard gettext. The ``{% trans %}`` template tag
+translates a constant string or a variable content::
+
+    <title>{% trans 'This is the title.' %}</title>
+
+If you only want to mark some value for translation, but translate it
+later from a variable, use the ``noop`` option::
+
+    <input name="field" value="{% trans "value" noop %}"/>
+
+It is not possible to use variables in this constant string. If you
+have variables you need to put in your translations, you have to use the
+``{% blocktrans %}`` tag::
+
+    {% blocktrans %}This will have {{ value }} inside{% endblocktrans %}
+
+If your expressions are more complex (like you need to have filters applied),
+you need to bind them to local variables for the translation block::
+
+    {% blocktrans with value|filter as variable %}
+    This will have {{ value }} inside
+    {% endblocktrans %}
+
+The last variant is the pluralization form: you need to specify both the singular
+and plural sentence with intersparsed variables like this::
+
+    {% blocktrans count list|counted as counter %}
+    There is only one {{ name }} object.
+    {% plural %}
+    There are {{ counter }} {{ name }} objects.
+    {% endblocktrans %}
+
+Internally all block translations and inline translations are translated into
+the actual gettext/ngettext call.
+
+Each ``DjangoContext`` has access to two translation-specific variables:
+
+    * ``LANGUAGES`` is a list of tuples in which the first element is the
+      language code and the second is the language name (in that language).
+    * ``LANGUAGE_CODE`` is the current user's preferred language, as a string.
+      Example: ``en-us``. (See "How language preference is discovered", below.)
+
+If you don't use the ``DjangoContext`` extension, you can get those values with
+two tags::
+
+    {% get_current_language as LANGUAGE_CODE %}
+    {% get_available_languages as LANGUAGES %}
+
+All tags live in the ``i18n`` tag library, so you need to specify
+``{% load i18n %}`` in the head of your template to make use of them.
+
+There are some places where you will encounter constant strings in your template code.
+One is filter arguments, the other are normal string constants for tags. If you need to
+translate those, you can use the ``_("....")`` syntax::
+
+    {% some_special_tag _("Page not found") value|yesno:_("yes,no") %}
+
+In this case both the filter and the tag will see the already translated string, so they
+don't need to be aware of translations. And both strings will be pulled out of the templates
+for translation and stored in the .po files.
+
+The ``setlang`` redirect view
+-----------------------------
+
+Django comes with a view, ``django.views.i18n.set_language`` that sets a user's
+language preference and redirects back to the previous page. For example, put
+this HTML code in your template::
+
+    <form action="/i18n/setlang/" method="POST">
+    <input name="next" type="hidden" value="/next/page/" />
+    <select name="language">
+    {% for lang in LANGUAGES %}
+    <option value="{{ lang.0 }}">{{ lang.1 }}</option>
+    {% endfor %}
+    </select>
+    <input type="submit" value="Go" />
+    </form>
+
+When a user submits the form, his chosen language will be saved in a cookie,
+and he'll be redirected either to the URL specified in the ``next`` field, or,
+if ``next`` is empty, to the URL in the ``Referer`` header. If the ``Referer``
+is blank -- say, if a user's browser suppresses that header -- then the user
+will be redirected to ``/`` (the site root) as a fallback.
+
+Activate the ``setlang`` redirect view by adding the following line to your
+URLconf::
+
+    (r'^i18n/', include('django.conf.urls.i18n'),
+
+Note that this example makes the view available at ``/i18n/setlang/``.
+
+How language preference is discovered
+=====================================
+
+Django has a very flexible model of deciding which language should be used --
+installation-wide, for a particular user, or both.
+
+To set an installation-wide language preference, set ``LANGUAGE_CODE`` in your
+settings file. Django uses this language as the default translation -- the
+final attempt if no other translator finds a translation.
+
+If all you want to do is run Django with your native language, and a language
+file is available for your language, all you need to do is set
+``LANGUAGE_CODE``.
+
+If you want to let each individual user specify which language he or she
+prefers, use ``LocaleMiddleware``. ``LocaleMiddleware`` enables language
+selection based on data from the request. It lets each user have his or her own
+setting.
+
+To use ``LocaleMiddleware``, add ``'django.middleware.locale.LocaleMiddleware'``
+to your ``MIDDLEWARE_CLASSES`` setting. Because middleware order matters, you
+should follow these guidelines:
+
+    * Make sure it's one of the first middlewares installed.
+    * It should come after ``SessionMiddleware``, because ``LocaleMiddleware``
+      makes use of session data.
+
+For example, your ``MIDDLEWARE_CLASSES`` might look like this::
+
+    MIDDLEWARE_CLASSES = (
+       'django.middleware.sessions.SessionMiddleware',
+       'django.middleware.locale.LocaleMiddleware',
+       'django.middleware.common.CommonMiddleware',
+    )
+
+``LocaleMiddleware`` tries to determine the user's language preference by
+following this algorithm:
+
+    * First, it looks for a ``django_language`` key in the the current user's
+      session.
+    * Failing that, it looks for a cookie called ``django_language``.
+    * Failing that, it looks at the ``Accept-Language`` HTTP header. This
+      header is sent by your browser and tells the server which language(s) you
+      prefer, in order by priority. Django tries each language in the header
+      until it finds one with available translations.
+    * Failing that, it uses the global ``LANGUAGE_CODE`` setting.
+
+Notes:
+
+    * In each of these places, the language preference is expected to be in the
+      standard language format, as a string. For example, Brazilian is
+      ``pt-br``.
+    * If a base language is available but the sublanguage specified is not,
+      Django uses the base language. For example, if a user specifies ``de-at``
+      (Austrian German) but Django only has ``de`` available, Django uses
+      ``de``.
+
+Once ``LocaleMiddleware`` determines the user's preference, it makes this
+preference available as ``request.LANGUAGE_CODE`` for each `request object`_.
+Feel free to read this value in your view code. Here's a simple example::
+
+    def hello_world(request, count):
+        if request.LANGUAGE_CODE == 'de-at':
+            return HttpResponse("You prefer to read Austrian German.")
+        else:
+            return HttpResponse("You prefer to read another language.")
+
+Note that, with static (middleware-less) translation, the language is in
+``settings.LANGUAGE_CODE``, while with dynamic (middleware) translation, it's
+in ``request.LANGUAGE_CODE``.
+
+.. _request object: http://www.djangoproject.com/documentation/request_response/#httprequest-objects
+
+Creating language files
+=======================
+
+So, you've tagged all of your strings for later translation. But you need to
+write the translations themselves.
+
+They need to be in a format grokable by ``gettext``. You need to update them.
+You may need to create new ones for new languages. This section shows you how
+to do it.
+
+Creating message files
+----------------------
+
+The first step is to create a message file for a new language. Django comes
+with a tool, ``make-messages.py``, that automates this.
+
+To run it on the Django source tree, navigate to the ``django`` directory
+itself -- not a Subversion check out, but the one linked to via ``$PYTHONPATH``
+or located somewhere on that path.
+
+Then run this command::
+
+    bin/make-messages.py -l de
+
+...where ``de`` is the language code for the message file you want to create.
+
+This script runs over the entire Django source tree and pulls out all strings
+marked for translation, creating or updating the language's message file.
+
+When it's done, it will have created (or updated) a message file under the
+directory ``conf/locale``. In this example, the file will be
+``conf/locale/de/LC_MESSAGES/django.po``.
+
+If you don't have the ``gettext`` utilities installed, ``make-messages.py``
+will create empty files. If that's the case, either install the ``gettext``
+utilities or just copy the English message file
+(``conf/locale/en/LC_MESSAGES/django.po``) and use it as a starting point; it's
+just an empty translation file.
+
+Once you've created the ``.po`` file, edit the file with your favorite text
+editor. First, edit the charset line (search for ``"CHARSET"``) and set it to
+the charset you'll be using to edit the content. Then, proceed to write your
+translations.
+
+The language code for storage is in locale format -- so it's ``pt_BR`` for
+Brazilian and ``de_AT`` for Austrian German.
+
+Every message in the message file is in the same format:
+
+    * One line is the msgid. This is the actual string in the source. Don't
+      change it.
+    * The other line is msgstr. This is the translation. It starts out empty.
+      You change it.
+
+Long messages are a special case. There, the first string directly after the
+msgstr (or msgid) is an empty string. Then the content itself will be written
+over the next few lines as one string per line. Those strings are directly
+concatenated. Don't forget trailing spaces within the strings; otherwise,
+they'll be tacked together without whitespace!
+
+Compiling message files
+-----------------------
+
+After you create your message file, you'll need to transform it into a more
+efficient form to be read by ``gettext``. Do this with the
+``compile-messages.py`` utility. This tool runs over all available ``.po``
+files and creates ``.mo`` files. Run it like this::
+
+   bin/compile-messages.py
+
+That's it. You made your first translation. Now, if you configure your browser
+to request your language, Django apps will use your language preference.
+
+Another thing: Please submit the name of your newly-created language in that
+native language, so we can add it to the global list of available languages
+that is mirrored in ``settings.LANGUAGES`` (and the ``LANGUAGES`` template
+variable).
+
+Using translations in your own projects
+=======================================
+
+Of course, your own projects should make use of translations. Django makes this
+simple, because it looks for message files in several locations.
+
+Django looks for translations by following this algorithm:
+
+    * First, it looks for a ``locale`` directory in the application directory
+      of the view that's being called. If it finds a translation for the
+      selected language, the translation will be installed.
+    * Next, it looks for a ``locale`` directory in the project directory. If it
+      finds a translation, the translation will be installed.
+    * Finally, it checks the base translation in ``django/conf/locale``.
+
+This way, you can write applications that include their own translations, and
+you can override base translations in your project path if you want to do that.
+Or, you can just build a big project out of several apps and put all
+translations into one big project message file. The choice is yours.
+
+All message file repositories are structured the same way. They are:
+
+    * ``$APPPATH/locale/<language>/LC_MESSAGES/django.(po|mo)``
+    * ``$PROJECTPATH/locale/<language>/LC_MESSAGES/django.(po|mo)``
+    * all paths listed in ``LOCALE_PATHS`` in your settings file are
+      searched in that order for ``<language>/LC_MESSAGES/django.(po|mo)``
+    * ``$PYTHONPATH/django/conf/locale/<language>/LC_MESSAGES/django.(po|mo)``
+
+To create message files, you use the same ``make-messages.py`` tool as with the
+Django message files. You only need to be in the right place -- in the directory
+where either the ``conf/locale`` (in case of the source tree) or the ``locale/``
+(in case of app messages or project messages) directory are located. And you
+use the same ``compile-messages.py`` to produce the binary ``django.mo`` files that
+are used by ``gettext``.
+
+Application message files are a bit complicated to discover -- they need the
+``LocaleMiddleware``. If you don't use the middleware, only the Django message
+files and project message files will be processed.
+
+Finally, you should give some thought to the structure of your translation
+files. If your applications need to be delivered to other users and will
+be used in other projects, you might want to use app-specific translations.
+But using app-specific translations and project translations could produce
+weird problems with ``make-messages``: ``make-messages`` will traverse all directories
+below the current path and so might put message IDs into the project
+message file that are already in application message files.
+
+The easiest way out is to store applications that are not part of the project
+(and so carry their own translations) outside the project tree. That way,
+``make-messages`` on the project level will only translate strings that are
+connected to your explicit project and not strings that are distributed
+independently.
+
+Specialities of Django translation
+==================================
+
+If you know ``gettext``, you might note these specialities in the way Django
+does translation:
+
+    * The string domain is always ``django``. The string domain is used to
+      differentiate between different programs that store their data in a
+      common messagefile library (usually ``/usr/share/locale/``). In Django's
+      case, there are Django-specific locale libraries, so the domain itself
+      isn't used. We could store app message files with different names and put
+      them, say, in the project library, but we decided against this. With
+      message files in the application tree, apps can be distributed more
+      easily.
+    * Django only uses ``gettext`` and ``gettext_noop``. That's because Django
+      always uses ``DEFAULT_CHARSET`` strings internally. There isn't much use
+      in using ``ugettext``, because you'll always need to produce utf-8
+      anyway.
+    * Django doesn't use ``xgettext`` alone. It uses Python wrappers around
+      ``xgettext`` and ``msgfmt``. That's mostly for convenience.
diff --git a/tests/othertests/templates.py b/tests/othertests/templates.py
index d451612713..ec6c55fb05 100644
--- a/tests/othertests/templates.py
+++ b/tests/othertests/templates.py
@@ -1,5 +1,6 @@
 from django.core import template
 from django.core.template import loader
+from django.utils.translation import activate, deactivate
 
 # Helper objects for template tests
 class SomeClass:
@@ -215,6 +216,45 @@ TEMPLATE_TESTS = {
 
     # Raise exception for custom tags used in child with {% load %} tag in parent, not in child
     'exception04': ("{% extends 'inheritance17' %}{% block first %}{% echo 400 %}5678{% endblock %}", {}, template.TemplateSyntaxError),
+
+    # simple translation of a string delimited by '
+    'i18n01': ("{% load i18n %}{% trans 'xxxyyyxxx' %}", {}, "xxxyyyxxx"),
+
+    # simple translation of a string delimited by "
+    'i18n02': ('{% load i18n %}{% trans "xxxyyyxxx" %}', {}, "xxxyyyxxx"),
+
+    # simple translation of a variable
+    'i18n03': ('{% load i18n %}{% blocktrans %}{{ anton }}{% endblocktrans %}', {'anton': 'xxxyyyxxx'}, "xxxyyyxxx"),
+
+    # simple translation of a variable and filter
+    'i18n04': ('{% load i18n %}{% blocktrans with anton|lower as berta %}{{ berta }}{% endblocktrans %}', {'anton': 'XXXYYYXXX'}, "xxxyyyxxx"),
+
+    # simple translation of a string with interpolation
+    'i18n05': ('{% load i18n %}{% blocktrans %}xxx{{ anton }}xxx{% endblocktrans %}', {'anton': 'yyy'}, "xxxyyyxxx"),
+
+    # simple translation of a string to german
+    'i18n06': ('{% load i18n %}{% trans "Page not found" %}', {'LANGUAGE_CODE': 'de'}, "Seite nicht gefunden"),
+
+    # translation of singular form
+    'i18n07': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}plural{% endblocktrans %}', {'number': 1}, "singular"),
+
+    # translation of plural form
+    'i18n08': ('{% load i18n %}{% blocktrans count number as counter %}singular{% plural %}plural{% endblocktrans %}', {'number': 2}, "plural"),
+
+    # simple non-translation (only marking) of a string to german
+    'i18n09': ('{% load i18n %}{% trans "Page not found" noop %}', {'LANGUAGE_CODE': 'de'}, "Page not found"),
+
+    # translation of a variable with a translated filter
+    'i18n10': ('{{ bool|yesno:_("ja,nein") }}', {'bool': True}, 'ja'),
+
+    # translation of a variable with a non-translated filter
+    'i18n11': ('{{ bool|yesno:"ja,nein" }}', {'bool': True}, 'ja'),
+
+    # usage of the get_available_languages tag
+    'i18n12': ('{% load i18n %}{% get_available_languages as langs %}{% for lang in langs %}{% ifequal lang.0 "de" %}{{ lang.0 }}{% endifequal %}{% endfor %}', {}, 'de'),
+
+    # translation of a constant string
+    'i18n13': ('{{ _("Page not found") }}', {'LANGUAGE_CODE': 'de'}, 'Seite nicht gefunden'),
 }
 
 def test_template_loader(template_name, template_dirs=None):
@@ -233,6 +273,8 @@ def run_tests(verbosity=0, standalone=False):
     tests = TEMPLATE_TESTS.items()
     tests.sort()
     for name, vals in tests:
+        if 'LANGUAGE_CODE' in vals[1]:
+            activate(vals[1]['LANGUAGE_CODE'])
         try:
             output = loader.get_template(name).render(template.Context(vals[1]))
         except Exception, e:
@@ -244,6 +286,8 @@ def run_tests(verbosity=0, standalone=False):
                     print "Template test: %s -- FAILED. Got %s, exception: %s" % (name, e.__class__, e)
                 failed_tests.append(name)
             continue
+        if 'LANGUAGE_CODE' in vals[1]:
+            deactivate()
         if output == vals[2]:
             if verbosity:
                 print "Template test: %s -- Passed" % name