@@ -157,14 +157,16 @@ _category_names = (gettext('files'),
157157outgoing_proxies = settings['outgoing'].get('proxies') or None
158158
159159
160+def _get_browser_language(request, lang_list):
161+ for lang in request.headers.get("Accept-Language", "en").split(","):
162+ locale = match_language(lang, lang_list, fallback=None)
163+ if locale is not None:
164+ return locale
165+
166+
160167@babel.localeselector
161168def get_locale():
162− locale = "en-US"
163−
164− for lang in request.headers.get("Accept-Language", locale).split(","):
165− locale = match_language(lang, settings['locales'].keys(), fallback=None)
166− if locale is not None:
167− break
169+ locale = _get_browser_language(request, settings['locales'].keys())
168170
169171 logger.debug("default locale from browser info is `%s`", locale)
170172
@@ -372,8 +374,7 @@ def render(template_name, override_theme=None, **kwargs):
372374 kwargs['language_codes'] = languages
373375 if 'current_language' not in kwargs:
374376 kwargs['current_language'] = match_language(request.preferences.get_value('language'),
375− LANGUAGE_CODES,
376− fallback=locale)
377+ LANGUAGE_CODES)
377378
378379 # override url_for function in templates
379380 kwargs['url_for'] = url_for_theme
@@ -444,11 +445,10 @@ def pre_request():
444445 request.errors.append(gettext('Invalid settings'))
445446
446447 # init search language and locale
447− locale = get_locale()
448448 if not preferences.get_value("language"):
449− preferences.parse_dict({"language": locale})
449+ preferences.parse_dict({"language": _get_browser_language(request, LANGUAGE_CODES)})
450450 if not preferences.get_value("locale"):
451− preferences.parse_dict({"locale": locale})
451+ preferences.parse_dict({"locale": get_locale()})
452452
453453 # request.user_plugins
454454 request.user_plugins = []