@@ -142,6 +142,7 @@ babel = Babel(app)
143rtl_locales = ['ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'fa_IR', 'glk', 'he',
143rtl_locales = ['ar', 'arc', 'bcc', 'bqi', 'ckb', 'dv', 'fa', 'fa_IR', 'glk', 'he',
144 'ku', 'mzn', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']
144 'ku', 'mzn', 'pnb', 'ps', 'sd', 'ug', 'ur', 'yi']
145+ui_locale_codes = [l.replace('_', '-') for l in settings['locales'].keys()]
146# used when translating category names
147# used when translating category names
147_category_names = (gettext('files'),
148_category_names = (gettext('files'),
@@ -175,6 +176,9 @@ def _get_browser_or_settings_language(request, lang_list):
175 for lang in request.headers.get("Accept-Language", "en").split(","):
176 for lang in request.headers.get("Accept-Language", "en").split(","):
176 if ';' in lang:
177 if ';' in lang:
177 lang = lang.split(';')[0]
178 lang = lang.split(';')[0]
180+ lang_parts = lang.split('-')
181+ lang = "{}-{}".format(lang_parts[0], lang_parts[-1].upper())
178 locale = match_language(lang, lang_list, fallback=None)
182 locale = match_language(lang, lang_list, fallback=None)
179 if locale is not None:
183 if locale is not None:
180 return locale
184 return locale
@@ -194,13 +198,10 @@ def get_locale():
194 locale_source = 'preferences'
198 locale_source = 'preferences'
196 # use local from the browser
200 # use local from the browser
197− locale = _get_browser_or_settings_language(request, settings['locales'].keys())
201+ locale = _get_browser_or_settings_language(request, ui_locale_codes)
202+ locale = locale.replace('-', '_')
198 locale_source = 'browser'
203 locale_source = 'browser'
201− if locale == 'zh_TW':
202− locale = 'zh_Hant_TW'
204 # see _get_translations function
205 # see _get_translations function
205 # and https://github.com/searx/searx/pull/1863
206 # and https://github.com/searx/searx/pull/1863
206 if locale == 'oc':
207 if locale == 'oc':