Index: trac/prefs/web_ui.py
===================================================================
--- trac/prefs/web_ui.py	(revision 6891)
+++ trac/prefs/web_ui.py	(working copy)
@@ -100,7 +100,7 @@
         locales = map(Locale.parse, get_available_locales())
         #languages = sorted([locale.display_name for locale in locales],
         #                   key=unicode.lower)
-        languages = sorted([(str(locale), locale.display_name)
+        languages = sorted([(str(locale).replace('_','-'), locale.display_name)
                             for locale in locales])
 
         return 'prefs_%s.html' % (panel or 'general'), {
Index: trac/prefs/templates/prefs_language.html
===================================================================
--- trac/prefs/templates/prefs_language.html	(revision 6891)
+++ trac/prefs/templates/prefs_language.html	(working copy)
@@ -13,7 +13,7 @@
     <div class="field" py:with="session_language = settings.session.get('language')">
       <label>Language:
       <select name="language">
-        <option>Default language</option>
+        <option value="">Default language</option>
         <option py:for="locale, language in languages"
                 selected="${session_language == locale or None}"
                 value="$locale">$language</option>
Index: trac/web/main.py
===================================================================
--- trac/web/main.py	(revision 6891)
+++ trac/web/main.py	(working copy)
@@ -269,8 +269,10 @@
     def _get_locale(self, req):
         available = [locale_id.replace('_', '-') for locale_id in
                      translation.get_available_locales()]
-
-        return Locale.negotiate(req.session.get('language', req.languages),
+        prefered = req.session.get('language', req.languages)
+        if type(prefered) != type(list()):
+        	prefered = [prefered]
+        return Locale.negotiate(prefered,
                                 available, sep='-')
 
     def _get_timezone(self, req):
