diff -r fe615a234837 django/trunk/django/core/context_processors.py
--- a/django/trunk/django/core/context_processors.py	Fri Dec 04 00:55:38 2009 +0000
+++ b/django/trunk/django/core/context_processors.py	Fri Feb 12 02:35:42 2010 +0200
@@ -70,12 +70,23 @@
 
 def i18n(request):
     from django.utils import translation
+    global _languages_cache
 
     context_extras = {}
-    context_extras['LANGUAGES'] = settings.LANGUAGES
     context_extras['LANGUAGE_CODE'] = translation.get_language()
     context_extras['LANGUAGE_BIDI'] = translation.get_language_bidi()
+    # translate all the language names so natives can read them
+    try:
+        languages = _available_languages_cache
+    except NameError:
+        languages = []
+        for lang, english_name in settings.LANGUAGES:
+            translation.activate(lang)
+            languages.append((lang, translation.ugettext(english_name)))
+            translation.deactivate()
+        _languages_cache = languages
 
+    context_extras['LANGUAGES'] = languages
     return context_extras
 
 def media(request):
diff -r fe615a234837 django/trunk/examples/hello/urls.py
--- a/django/trunk/examples/hello/urls.py	Fri Dec 04 00:55:38 2009 +0000
+++ b/django/trunk/examples/hello/urls.py	Fri Feb 12 02:35:42 2010 +0200
@@ -8,3 +8,6 @@
     (r'^getdata/$', 'get_data'),
     (r'^postdata/$', 'post_data'),
 )
+urlpatterns += patterns('examples.hello.i18n_views',
+    url(r'^i18n/$', 'hello_i18n', name='hello_i18n'),
+)
diff -r fe615a234837 django/trunk/examples/locale/es/LC_MESSAGES/django.po
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/django/trunk/examples/locale/es/LC_MESSAGES/django.po	Fri Feb 12 02:35:42 2010 +0200
@@ -0,0 +1,33 @@
+# 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: 2010-02-11 17:51-0600\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"
+
+#: settings.py:10
+msgid "English"
+msgstr ""
+
+#: settings.py:11
+msgid "French"
+msgstr ""
+
+#: settings.py:12
+msgid "Spanish"
+msgstr "Español"
+
+#: settings.py:13
+msgid "Russian"
+msgstr ""
diff -r fe615a234837 django/trunk/examples/locale/fr/LC_MESSAGES/django.po
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/django/trunk/examples/locale/fr/LC_MESSAGES/django.po	Fri Feb 12 02:35:42 2010 +0200
@@ -0,0 +1,33 @@
+# 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: 2010-02-11 17:51-0600\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"
+
+#: settings.py:10
+msgid "English"
+msgstr ""
+
+#: settings.py:11
+msgid "French"
+msgstr "français"
+
+#: settings.py:12
+msgid "Spanish"
+msgstr ""
+
+#: settings.py:13
+msgid "Russian"
+msgstr ""
diff -r fe615a234837 django/trunk/examples/locale/ru/LC_MESSAGES/django.po
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/django/trunk/examples/locale/ru/LC_MESSAGES/django.po	Fri Feb 12 02:35:42 2010 +0200
@@ -0,0 +1,33 @@
+# 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: 2010-02-11 17:51-0600\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"
+
+#: settings.py:10
+msgid "English"
+msgstr ""
+
+#: settings.py:11
+msgid "French"
+msgstr ""
+
+#: settings.py:12
+msgid "Spanish"
+msgstr ""
+
+#: settings.py:13
+msgid "Russian"
+msgstr "Русский"
diff -r fe615a234837 django/trunk/examples/settings.py
--- a/django/trunk/examples/settings.py	Fri Dec 04 00:55:38 2009 +0000
+++ b/django/trunk/examples/settings.py	Fri Feb 12 02:35:42 2010 +0200
@@ -3,3 +3,12 @@
 DEBUG = True
 TEMPLATE_DEBUG = DEBUG
 ROOT_URLCONF = 'examples.urls'
+USE_I18N = True
+gettext = lambda s: s
+
+LANGUAGES = (
+    ('en', gettext('English')),
+    ('fr', gettext('French')),
+    ('es', gettext('Spanish')),
+    ('ru', gettext('Russian')),
+)
diff -r fe615a234837 django/trunk/examples/urls.py
--- a/django/trunk/examples/urls.py	Fri Dec 04 00:55:38 2009 +0000
+++ b/django/trunk/examples/urls.py	Fri Feb 12 02:35:42 2010 +0200
@@ -3,4 +3,5 @@
 urlpatterns = patterns('',
     (r'^$', 'examples.views.index'),
     (r'^hello/', include('examples.hello.urls')),
+    (r'^i18n/', include('django.conf.urls.i18n')),
 )
diff -r fe615a234837 django/trunk/examples/views.py
--- a/django/trunk/examples/views.py	Fri Dec 04 00:55:38 2009 +0000
+++ b/django/trunk/examples/views.py	Fri Feb 12 02:35:42 2010 +0200
@@ -1,4 +1,5 @@
 from django import http
+from django.core.urlresolvers import reverse
 
 def index(request):
     r = http.HttpResponse('<h1>Django examples</h1><ul>')
@@ -8,5 +9,6 @@
     r.write('<li><a href="hello/metadata/">Displaying request metadata</a></li>')
     r.write('<li><a href="hello/getdata/">Displaying GET data</a></li>')
     r.write('<li><a href="hello/postdata/">Displaying POST data</a></li>')
+    r.write('<li><a href="hello/i18n/">Internationalized Hello world</a></li>')
     r.write('</ul>')
     return r
