@@ -159,7 +159,7 @@ def _get_translations():
159159flask_babel.get_translations = _get_translations
160160
161161
162−def _get_browser_language(request, lang_list):
162+def _get_browser_or_settings_language(request, lang_list):
163163 for lang in request.headers.get("Accept-Language", "en").split(","):
164164 if ';' in lang:
165165 lang = lang.split(';')[0]
@@ -171,26 +171,31 @@ def _get_browser_language(request, lang_list):
171171
172172@babel.localeselector
173173def get_locale():
174− locale = _get_browser_language(request, settings['locales'].keys())
175−
176− logger.debug("default locale from browser info is `%s`", locale)
177−
178− if request.preferences.get_value('locale') != '':
179− locale = request.preferences.get_value('locale')
180−
181174 if 'locale' in request.form\
182175 and request.form['locale'] in settings['locales']:
176+ # use locale from the form
183177 locale = request.form['locale']
178+ locale_source = 'form'
179+ elif request.preferences.get_value('locale') != '':
180+ # use locale from the preferences
181+ locale = request.preferences.get_value('locale')
182+ locale_source = 'preferences'
183+ else:
184+ # use local from the browser
185+ locale = _get_browser_or_settings_language(request, settings['locales'].keys())
186+ locale_source = 'browser'
184187
188+ #
185189 if locale == 'zh_TW':
186190 locale = 'zh_Hant_TW'
187191
192+ # see _get_translations function
193+ # and https://github.com/searx/searx/pull/1863
188194 if locale == 'oc':
189195 request.form['use-translation'] = 'oc'
190196 locale = 'fr_FR'
191197
192− logger.debug("selected locale is `%s`", locale)
193−
198+ logger.debug("%s uses locale `%s` from %s", request.url, locale, locale_source)
194199 return locale
195200
196201
@@ -472,7 +477,7 @@ def pre_request():
472477
473478 # init search language and locale
474479 if not preferences.get_value("language"):
475− preferences.parse_dict({"language": _get_browser_language(request, LANGUAGE_CODES)})
480+ preferences.parse_dict({"language": _get_browser_or_settings_language(request, LANGUAGE_CODES)})
476481 if not preferences.get_value("locale"):
477482 preferences.parse_dict({"locale": get_locale()})
478483