Obtained-From: http://trac.edgewall.org/changeset?format=diff&new=10052&old=10051&new_path=%2Fbranches%2F0.12-stable&old_path=%2Fbranches%2F0.12-stable Index: trac/util/translation.py =================================================================== --- trac/util/translation.py (revision 9705) +++ trac/util/translation.py (revision 10052) @@ -102,6 +102,8 @@ return self.ungettext(singular, plural, num) +has_babel = False try: + from babel import Locale from babel.support import LazyProxy, Translations @@ -330,4 +332,12 @@ if '.' not in dirname] + def get_negotiated_locale(preferred_locales): + def normalize(locale_ids): + return [id.replace('_', '-') for id in locale_ids if id] + return Locale.negotiate(normalize(preferred_locales), + normalize(get_available_locales()), sep='-') + + has_babel = True + except ImportError: # fall back on 0.11 behavior, i18n functions are no-ops gettext = _ = gettext_noop @@ -359,2 +369,5 @@ def get_available_locales(): return [] + + def get_negotiated_locale(preferred=None, default=None): + return None Index: trac/web/main.py =================================================================== --- trac/web/main.py (revision 9708) +++ trac/web/main.py (revision 10052) @@ -27,8 +27,4 @@ import sys -try: - from babel import Locale -except ImportError: - Locale = None from genshi.core import Markup from genshi.builder import Fragment, tag @@ -49,5 +45,6 @@ from trac.util.datefmt import format_datetime, http_date, localtz, timezone from trac.util.text import exception_to_unicode, shorten_line, to_unicode -from trac.util.translation import safefmt, tag_, _ +from trac.util.translation import _, get_negotiated_locale, has_babel, \ + safefmt, tag_ from trac.web.api import * from trac.web.chrome import Chrome @@ -150,4 +147,9 @@ default_timezone = Option('trac', 'default_timezone', '', """The default timezone to use""") + + default_language = Option('trac', 'default_language', '', + """The preferred language to use if no user preference has been set. + (''since 0.12.1'') + """) # Public API @@ -303,14 +305,10 @@ def _get_locale(self, req): - if Locale: - available = [locale_id.replace('_', '-') for locale_id in - translation.get_available_locales()] - - preferred = req.session.get('language', req.languages) - if not isinstance(preferred, list): - preferred = [preferred] - negotiated = Locale.negotiate(preferred, available, sep='-') - self.log.debug("Negotiated locale: %s -> %s", - preferred, negotiated) + if has_babel: + preferred = req.session.get('language') + default = self.env.config.get('trac', 'default_language', '') + negotiated = get_negotiated_locale([preferred, default] + + req.languages) + self.log.debug("Negotiated locale: %s -> %s", preferred, negotiated) return negotiated