Index: django/templatetags/i18n.py
===================================================================
--- django/templatetags/i18n.py	(revision 6341)
+++ django/templatetags/i18n.py	(working copy)
@@ -14,6 +14,15 @@
         context[self.variable] = [(k, translation.ugettext(v)) for k, v in settings.LANGUAGES]
         return ''
 
+class GetAvailableLanguageNamesNode(Node):
+    def __init__(self, variable):
+        self.variable = variable
+
+    def render(self, context):
+        from django.conf.language_names import language_names
+        context[self.variable] = language_names
+        return ''
+
 class GetCurrentLanguageNode(Node):
     def __init__(self, variable):
         self.variable = variable
@@ -95,6 +104,31 @@
         raise TemplateSyntaxError, "'get_available_languages' requires 'as variable' (got %r)" % args
     return GetAvailableLanguagesNode(args[2])
 
+def do_get_available_language_names(parser, token):
+    """
+    This will store in the context a list of available
+    languages and supply each item with the name of the
+    language both in the current language and the
+    language itself.
+
+    Usage::
+
+        {% get_available_language_names as languages %}
+        {% for language in languages %}
+        ...
+        {% endfor %}
+
+    This will convert the LANGUAGES setting from your
+    setting file (or the default settings) to a list of
+    dicts and put it into the named variable.  Each item
+    will have the keys ``language_code``, ``name`` and
+    ``name_local``.
+    """
+    args = token.contents.split()
+    if len(args) != 3 or args[1] != 'as':
+        raise TemplateSyntaxError, "'get_available_language_names' requires 'as variable' (got %r)" % args
+    return GetAvailableLanguageNamesNode(args[2])
+
 def do_get_current_language(parser, token):
     """
     This will store the current language in the context.
@@ -240,6 +274,7 @@
     return BlockTranslateNode(extra_context, singular, plural, countervar, counter)
 
 register.tag('get_available_languages', do_get_available_languages)
+register.tag('get_available_language_names', do_get_available_language_names)
 register.tag('get_current_language', do_get_current_language)
 register.tag('get_current_language_bidi', do_get_current_language_bidi)
 register.tag('trans', do_translate)
Index: django/bin/make-language-names.py
===================================================================
--- django/bin/make-language-names.py	(revision 0)
+++ django/bin/make-language-names.py	(revision 0)
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+
+LANGUAGE_NAMES_PY_FILE = 'django/conf/language_names.py'
+
+# Need to ensure that the i18n framework is enabled
+from django.conf import settings
+settings.configure(USE_I18N = True)
+
+from django.utils import translation
+
+def make_language_names():
+    language_names = []
+    for code, name in settings.LANGUAGES:
+        try:
+            translation.activate(code)
+        except IndexError:
+            print "Warning: Can't activate language %r, using English name %r." % (code, name)
+            translation.activate('en')
+        language_names.append({
+            'language_code': code,
+            'name': name,
+            'name_local': translation.ugettext(name)})
+    from os.path import join, dirname, abspath
+    target = abspath(join(dirname(__file__), '..', '..', LANGUAGE_NAMES_PY_FILE))
+    print 'Writing language names list to\n%s' % target
+    file(target, 'w').write('language_names = %r\n' % language_names)
+    print 'Done.'
+
+
+if __name__ == "__main__":
+    make_language_names()

Property changes on: django/bin/make-language-names.py
___________________________________________________________________
Name: svn:executable
   + *
Name: svn:eol-style
   + native

