diff --git a/trac/prefs/templates/prefs_language.html b/trac/prefs/templates/prefs_language.html
--- a/trac/prefs/templates/prefs_language.html
+++ b/trac/prefs/templates/prefs_language.html
@@ -3,7 +3,8 @@
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:py="http://genshi.edgewall.org/"
-      xmlns:xi="http://www.w3.org/2001/XInclude">
+      xmlns:xi="http://www.w3.org/2001/XInclude"
+      xmlns:i18n="http://genshi.edgewall.org/i18n">
   <xi:include href="prefs.html" />
   <head>
     <title>Language</title>
@@ -12,18 +13,36 @@
 
     <div class="field" py:with="session_language = settings.session.get('language')">
       <label>Language:
-      <select name="language">
-        <option value="">default language</option>
-        <option py:for="locale, language in languages"
-                selected="${session_language == locale or None}"
-                value="$locale">$language</option>
-      </select></label>
+        <select name="language">
+          <option value="">default language</option>
+          <option py:for="locale, language in languages"
+                  selected="${session_language == locale or None}"
+                  value="$locale">$language</option>
+        </select>
+      </label>
       <p class="hint">Configuring your language will result in all text
       displayed on this site to use your language instead of that of the
       server.</p>
 
       <p class="hint">The 'default language' option uses the browser's
         language negotiation feature to select the appropriate language.</p>
+
+      <p py:if="not languages" class="hint">
+        <strong>Note:</strong> Translations are currently unavailable.
+        <py:choose>
+          <py:when test="'TRAC_ADMIN' in req.perm"><i18n:msg>
+            Trac has been localized to more than a dozen of languages but in order
+            to be able to use them, the <a href="http://babel.edgewall.org">Babel</a>
+            package needs to be present when installing Trac. See
+            <a href="${href.wiki('TracInstall')}">TracInstall</a> for details.
+          </i18n:msg></py:when>
+          <py:otherwise><i18n:msg>
+            Please contact your
+            <a py:strip="not project.admin" href="mailto:${project.admin}">Trac administrator</a>
+            to enable existing translations.
+          </i18n:msg></py:otherwise>
+        </py:choose>
+      </p>
     </div>
 
   </body>
diff --git a/trac/util/translation.py b/trac/util/translation.py
--- a/trac/util/translation.py
+++ b/trac/util/translation.py
@@ -141,10 +141,8 @@ try:
         def activate(self, locale, env_path=None):
             try:
                 locale_dir = pkg_resources.resource_filename('trac', 'locale')
-            except pkg_resources.ExtractionError:
-                return # delay extraction
-            except KeyError:
-                return # No locale data in egg
+            except Exception:
+                return
             t = Translations.load(locale_dir, locale or 'en_US')
             if not t or t.__class__ is NullTranslations:
                 t = self._null_translations
@@ -329,9 +327,12 @@ try:
         """Return a list of locale identifiers of the locales for which
         translations are available.
         """
-        return [dirname for dirname
-                in pkg_resources.resource_listdir('trac', 'locale')
-                if '.' not in dirname]
+        try:
+            return [dirname for dirname
+                    in pkg_resources.resource_listdir('trac', 'locale')
+                    if '.' not in dirname]
+        except Exception:
+            return []
 
     def get_negotiated_locale(preferred_locales):
         def normalize(locale_ids):
diff --git a/trac/web/chrome.py b/trac/web/chrome.py
--- a/trac/web/chrome.py
+++ b/trac/web/chrome.py
@@ -47,7 +47,7 @@ from trac.util.text import pretty_size, 
                            javascript_quote, exception_to_unicode
 from trac.util.datefmt import pretty_timedelta, format_datetime, format_date, \
                               format_time, from_utimestamp, http_date, utc
-from trac.util.translation import _
+from trac.util.translation import _, get_available_locales
 from trac.web.api import IRequestHandler, ITemplateStreamFilter, HTTPNotFound
 from trac.web.href import Href
 from trac.wiki import IWikiSyntaxProvider
@@ -379,7 +379,10 @@ class Chrome(Component):
         except ImportError:
             babel = None
         if babel is not None:
-            yield 'Babel', get_pkginfo(babel).get('version')
+            info = get_pkginfo(babel).get('version')
+            if not get_available_locales():
+                info += " (translations unavailable)" # No i18n on purpose
+            yield 'Babel', info
 
     # IEnvironmentSetupParticipant methods
 

