summaryrefslogtreecommitdiff
path: root/searx/webapp.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/webapp.py')
-rwxr-xr-xsearx/webapp.py73
1 files changed, 33 insertions, 40 deletions
diff --git a/searx/webapp.py b/searx/webapp.py
index 95c33f704..4ed6c2eb7 100755
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -89,7 +89,6 @@ from searx.utils import (
html_to_text,
gen_useragent,
dict_subset,
- match_language,
)
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
from searx.query import RawTextQuery
@@ -117,12 +116,13 @@ from searx.locales import (
RTL_LOCALES,
localeselector,
locales_initialize,
+ match_locale,
)
# renaming names from searx imports ...
from searx.autocomplete import search_autocomplete, backends as autocomplete_backends
-from searx.languages import language_codes as languages
from searx.redisdb import initialize as redis_initialize
+from searx.sxng_locales import sxng_locales
from searx.search import SearchWithPlugins, initialize as search_initialize
from searx.network import stream as http_stream, set_context_network_name
from searx.search.checker import get_result as checker_get_result
@@ -227,7 +227,7 @@ def _get_browser_language(req, lang_list):
if '-' in lang:
lang_parts = lang.split('-')
lang = "{}-{}".format(lang_parts[0], lang_parts[-1].upper())
- locale = match_language(lang, lang_list, fallback=None)
+ locale = match_locale(lang, lang_list, fallback=None)
if locale is not None:
return locale
return 'en'
@@ -407,7 +407,7 @@ def get_client_settings():
def render(template_name: str, **kwargs):
-
+ # pylint: disable=too-many-statements
kwargs['client_settings'] = str(
base64.b64encode(
bytes(
@@ -438,17 +438,20 @@ def render(template_name: str, **kwargs):
kwargs['OTHER_CATEGORY'] = OTHER_CATEGORY
# i18n
- kwargs['language_codes'] = [l for l in languages if l[0] in settings['search']['languages']]
+ kwargs['sxng_locales'] = [l for l in sxng_locales if l[0] in settings['search']['languages']]
locale = request.preferences.get_value('locale')
kwargs['locale_rfc5646'] = _get_locale_rfc5646(locale)
if locale in RTL_LOCALES and 'rtl' not in kwargs:
kwargs['rtl'] = True
+
if 'current_language' not in kwargs:
- kwargs['current_language'] = match_language(
- request.preferences.get_value('language'), settings['search']['languages']
- )
+ _locale = request.preferences.get_value('language')
+ if _locale in ('auto', 'all'):
+ kwargs['current_language'] = _locale
+ else:
+ kwargs['current_language'] = match_locale(_locale, settings['search']['languages'])
# values from settings
kwargs['search_formats'] = [x for x in settings['search']['formats'] if x != 'html']
@@ -810,6 +813,13 @@ def search():
)
)
+ if search_query.lang in ('auto', 'all'):
+ current_language = search_query.lang
+ else:
+ current_language = match_locale(
+ search_query.lang, settings['search']['languages'], fallback=request.preferences.get_value("language")
+ )
+
# search_query.lang contains the user choice (all, auto, en, ...)
# when the user choice is "auto", search.search_query.lang contains the detected language
# otherwise it is equals to search_query.lang
@@ -832,12 +842,8 @@ def search():
result_container.unresponsive_engines
),
current_locale = request.preferences.get_value("locale"),
- current_language = match_language(
- search_query.lang,
- settings['search']['languages'],
- fallback=request.preferences.get_value("language")
- ),
- search_language = match_language(
+ current_language = current_language,
+ search_language = match_locale(
search.search_query.lang,
settings['search']['languages'],
fallback=request.preferences.get_value("language")
@@ -907,16 +913,11 @@ def autocompleter():
# and there is a query part
if len(raw_text_query.autocomplete_list) == 0 and len(sug_prefix) > 0:
- # get language from cookie
- language = request.preferences.get_value('language')
- if not language or language == 'all':
- language = 'en'
- else:
- language = language.split('-')[0]
+ # get SearXNG's locale and autocomplete backend from cookie
+ sxng_locale = request.preferences.get_value('language')
+ backend_name = request.preferences.get_value('autocomplete')
- # run autocompletion
- raw_results = search_autocomplete(request.preferences.get_value('autocomplete'), sug_prefix, language)
- for result in raw_results:
+ for result in search_autocomplete(backend_name, sug_prefix, sxng_locale):
# attention: this loop will change raw_text_query object and this is
# the reason why the sug_prefix was stored before (see above)
if result != sug_prefix:
@@ -1001,7 +1002,9 @@ def preferences():
'rate80': rate80,
'rate95': rate95,
'warn_timeout': e.timeout > settings['outgoing']['request_timeout'],
- 'supports_selected_language': _is_selected_language_supported(e, request.preferences),
+ 'supports_selected_language': e.traits.is_locale_supported(
+ str(request.preferences.get_value('language') or 'all')
+ ),
'result_count': result_count,
}
# end of stats
@@ -1052,7 +1055,9 @@ def preferences():
# supports
supports = {}
for _, e in filtered_engines.items():
- supports_selected_language = _is_selected_language_supported(e, request.preferences)
+ supports_selected_language = e.traits.is_locale_supported(
+ str(request.preferences.get_value('language') or 'all')
+ )
safesearch = e.safesearch
time_range_support = e.time_range_support
for checker_test_name in checker_results.get(e.name, {}).get('errors', {}):
@@ -1099,16 +1104,6 @@ def preferences():
)
-def _is_selected_language_supported(engine, preferences: Preferences): # pylint: disable=redefined-outer-name
- language = preferences.get_value('language')
- if language == 'all':
- return True
- x = match_language(
- language, getattr(engine, 'supported_languages', []), getattr(engine, 'language_aliases', {}), None
- )
- return bool(x)
-
-
@app.route('/image_proxy', methods=['GET'])
def image_proxy():
# pylint: disable=too-many-return-statements, too-many-branches
@@ -1327,10 +1322,7 @@ def config():
if not request.preferences.validate_token(engine):
continue
- supported_languages = engine.supported_languages
- if isinstance(engine.supported_languages, dict):
- supported_languages = list(engine.supported_languages.keys())
-
+ _languages = engine.traits.languages.keys()
_engines.append(
{
'name': name,
@@ -1339,7 +1331,8 @@ def config():
'enabled': not engine.disabled,
'paging': engine.paging,
'language_support': engine.language_support,
- 'supported_languages': supported_languages,
+ 'languages': list(_languages),
+ 'regions': list(engine.traits.regions.keys()),
'safesearch': engine.safesearch,
'time_range_support': engine.time_range_support,
'timeout': engine.timeout,