diff --git a/docs/dev/engines/online/bpb.rst b/docs/dev/engines/online/bpb.rst new file mode 100644 index 000000000..f545dba48 --- /dev/null +++ b/docs/dev/engines/online/bpb.rst @@ -0,0 +1,13 @@ +.. _bpb engine: + +=== +Bpb +=== + +.. contents:: Contents + :depth: 2 + :local: + :backlinks: entry + +.. automodule:: searx.engines.bpb + :members: diff --git a/requirements-dev.txt b/requirements-dev.txt index 749111294..a8e24b368 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -3,7 +3,7 @@ nose2[coverage_plugin]==0.14.0 cov-core==1.15.0 black==22.12.0 pylint==3.0.2 -splinter==0.19.0 +splinter==0.20.1 selenium==4.15.2 twine==4.0.2 Pallets-Sphinx-Themes==2.1.1 diff --git a/requirements.txt b/requirements.txt index c2d211e06..bf8b82b2f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,10 @@ -certifi==2023.7.22 +certifi==2023.11.17 babel==2.13.1 flask-babel==4.0.0 flask==3.0.0 jinja2==3.1.2 lxml==4.9.3 -pygments==2.16.1 +pygments==2.17.2 python-dateutil==2.8.2 pyyaml==6.0.1 httpx[http2]==0.24.1 diff --git a/searx/engines/bpb.py b/searx/engines/bpb.py new file mode 100644 index 000000000..5d6359aae --- /dev/null +++ b/searx/engines/bpb.py @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""BPB refers to ``Bundeszentrale für poltische Bildung``, which is a German +governmental institution aiming to reduce misinformation by providing resources +about politics and history. +""" + +from datetime import datetime +from urllib.parse import urlencode + +about = { + 'website': "https://www.bpb.de", + 'official_api_documentation': None, + 'use_official_api': False, + 'require_api_key': False, + 'results': 'JSON', + 'language': 'de', +} + +paging = True +categories = ['general'] + + +base_url = "https://www.bpb.de" + + +def request(query, params): + args = { + 'query[term]': query, + 'page': params['pageno'] - 1, + 'sort[direction]': 'descending', + 'payload[nid]': 65350, + } + params['url'] = f"{base_url}/bpbapi/filter/search?{urlencode(args)}" + return params + + +def response(resp): + results = [] + + json_resp = resp.json() + + for result in json_resp['teaser']: + img_src = None + if result['teaser']['image']: + img_src = base_url + result['teaser']['image']['sources'][-1]['url'] + + metadata = result['extension']['overline'] + authors = ', '.join(author['name'] for author in result['extension'].get('authors', [])) + if authors: + metadata += f" | {authors}" + + publishedDate = None + if result['extension'].get('publishingDate'): + publishedDate = datetime.utcfromtimestamp(result['extension']['publishingDate']) + + results.append( + { + 'url': base_url + result['teaser']['link']['url'], + 'title': result['teaser']['title'], + 'content': result['teaser']['text'], + 'img_src': img_src, + 'publishedDate': publishedDate, + 'metadata': metadata, + } + ) + + return results diff --git a/searx/engines/destatis.py b/searx/engines/destatis.py new file mode 100644 index 000000000..2d19b340f --- /dev/null +++ b/searx/engines/destatis.py @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""DeStatis +""" + +from urllib.parse import urlencode +from lxml import html +from searx.utils import eval_xpath, eval_xpath_list, extract_text + +about = { + 'website': 'https://www.destatis.de', + 'official_api_documentation': 'https://destatis.api.bund.dev/', + 'use_official_api': False, + 'require_api_key': False, + 'results': 'HTML', + 'language': 'de', +} + +categories = [] +paging = True + +base_url = "https://www.destatis.de" +search_url = f"{base_url}/SiteGlobals/Forms/Suche/Expertensuche_Formular.html" + +# pylint: disable-next=line-too-long +results_xpath = '//div[contains(@class, "l-content-wrapper")]/div[contains(@class, "row")]/div[contains(@class, "column")]/div[contains(@class, "c-result"){extra}]' +results_xpath_filter_recommended = " and not(contains(@class, 'c-result--recommended'))" +url_xpath = './/a/@href' +title_xpath = './/a/text()' +date_xpath = './/a/span[contains(@class, "c-result__date")]' +content_xpath = './/div[contains(@class, "column")]/p/text()' +doctype_xpath = './/div[contains(@class, "c-result__doctype")]/p' + + +def request(query, params): + args = { + 'templateQueryString': query, + 'gtp': f"474_list%3D{params['pageno']}", + } + params['url'] = f"{search_url}?{urlencode(args)}" + return params + + +def response(resp): + results = [] + + dom = html.fromstring(resp.text) + + # filter out suggested results on further page because they're the same on each page + extra_xpath = results_xpath_filter_recommended if resp.search_params['pageno'] > 1 else '' + res_xpath = results_xpath.format(extra=extra_xpath) + + for result in eval_xpath_list(dom, res_xpath): + doctype = extract_text(eval_xpath(result, doctype_xpath)) + date = extract_text(eval_xpath(result, date_xpath)) + + metadata = [meta for meta in (doctype, date) if meta != ""] + + results.append( + { + 'url': base_url + "/" + extract_text(eval_xpath(result, url_xpath)), + 'title': extract_text(eval_xpath(result, title_xpath)), + 'content': extract_text(eval_xpath(result, content_xpath)), + 'metadata': ', '.join(metadata), + } + ) + + return results diff --git a/searx/engines/presearch.py b/searx/engines/presearch.py new file mode 100644 index 000000000..1e20465ed --- /dev/null +++ b/searx/engines/presearch.py @@ -0,0 +1,180 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""Presearch (general, images, videos, news) + +.. hint:: + + The results in the video category are most often links to pages that contain + a video, for instance many links from preasearch's video category link + content from facebook (aka Meta) or Twitter (aka X). Since these are not + real links to video streams SearXNG can't use the video template for this and + if SearXNG can't use this template, then the user doesn't want to see these + hits in the videos category. + + TL;DR; by default presearch's video category is placed into categories:: + + categories: [general, web] + +""" + +from urllib.parse import urlencode +from searx.network import get +from searx.utils import gen_useragent, html_to_text + +about = { + "website": "https://presearch.io", + "wikidiata_id": "Q7240905", + "official_api_documentation": "https://docs.presearch.io/nodes/api", + "use_official_api": False, + "require_api_key": False, + "results": "JSON", +} +paging = True +time_range_support = True +categories = ["general", "web"] # general, images, videos, news + +search_type = "search" +"""must be any of ``search``, ``images``, ``videos``, ``news``""" + +base_url = "https://presearch.com" +safesearch_map = {0: 'false', 1: 'true', 2: 'true'} + + +def init(_): + if search_type not in ['search', 'images', 'videos', 'news']: + raise ValueError(f'presearch search_type: {search_type}') + + +def _get_request_id(query, page, time_range, safesearch): + args = { + "q": query, + "page": page, + } + if time_range: + args["time_range"] = time_range + + url = f"{base_url}/{search_type}?{urlencode(args)}" + headers = { + 'User-Agent': gen_useragent(), + 'Cookie': f"b=1;presearch_session=;use_safe_search={safesearch_map[safesearch]}", + } + resp_text = get(url, headers=headers).text # type: ignore + + for line in resp_text.split("\n"): + if "window.searchId = " in line: + return line.split("= ")[1][:-1].replace('"', "") + + return None + + +def request(query, params): + request_id = _get_request_id(query, params["pageno"], params["time_range"], params["safesearch"]) + + params["headers"]["Accept"] = "application/json" + params["url"] = f"{base_url}/results?id={request_id}" + + return params + + +def _strip_leading_strings(text): + for x in ['wikipedia', 'google']: + if text.lower().endswith(x): + text = text[: -len(x)] + return text.strip() + + +def parse_search_query(json_results): + results = [] + + for item in json_results.get('specialSections', {}).get('topStoriesCompact', {}).get('data', []): + result = { + 'url': item['link'], + 'title': item['title'], + 'img_src': item['image'], + 'content': '', + 'metadata': item.get('source'), + } + results.append(result) + + for item in json_results.get('standardResults', []): + result = { + 'url': item['link'], + 'title': item['title'], + 'content': html_to_text(item['description']), + } + results.append(result) + + info = json_results.get('infoSection', {}).get('data') + if info: + attributes = [] + for item in info.get('about', []): + label, value = html_to_text(item).split(':', 1) + value = _strip_leading_strings(value) + attributes.append({'label': label, 'value': value}) + content = [] + for item in [info['subtitle'], info['description']]: + item = _strip_leading_strings(html_to_text(item)) + if item: + content.append(item) + + results.append( + { + 'infobox': info['title'], + 'id': info['title'], + 'img_src': info.get('image'), + 'content': ' | '.join(content), + 'attributes': attributes, + } + ) + return results + + +def response(resp): + results = [] + json_resp = resp.json() + + if search_type == 'search': + results = parse_search_query(json_resp['results']) + + elif search_type == 'images': + for item in json_resp['images']: + results.append( + { + 'template': 'images.html', + 'title': item['title'], + 'url': item['link'], + 'img_src': item['image'], + 'thumbnail_src': item['thumbnail'], + } + ) + + elif search_type == 'videos': + # The results in the video category are most often links to pages that contain + # a video and not to a video stream --> SearXNG can't use the video template. + + for item in json_resp['videos']: + metadata = [x for x in [item.get('description'), item.get('duration')] if x] + results.append( + { + 'title': item['title'], + 'url': item['link'], + 'content': '', + 'metadata': ' / '.join(metadata), + 'img_src': item.get('image'), + } + ) + + elif search_type == 'news': + for item in json_resp['news']: + metadata = [x for x in [item.get('source'), item.get('time')] if x] + results.append( + { + 'title': item['title'], + 'url': item['link'], + 'content': item['description'], + 'metadata': ' / '.join(metadata), + 'img_src': item.get('image'), + } + ) + + return results diff --git a/searx/engines/yep.py b/searx/engines/yep.py new file mode 100644 index 000000000..c3cb65c7b --- /dev/null +++ b/searx/engines/yep.py @@ -0,0 +1,79 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""Yep (general, images, news) +""" + +from datetime import datetime +from urllib.parse import urlencode +from searx.utils import html_to_text + +about = { + 'website': 'https://yep.com/', + 'official_api_documentation': 'https://docs.developer.yelp.com', + 'use_official_api': False, + 'require_api_key': False, + 'results': 'JSON', +} + +base_url = "https://api.yep.com" +search_type = "web" # 'web', 'images', 'news' + +safesearch = True +safesearch_map = {0: 'off', 1: 'moderate', 2: 'strict'} + + +def request(query, params): + args = { + 'client': 'web', + 'no_correct': 'false', + 'q': query, + 'safeSearch': safesearch_map[params['safesearch']], + 'type': search_type, + } + params['url'] = f"{base_url}/fs/2/search?{urlencode(args)}" + params['headers']['Referer'] = 'https://yep.com/' + return params + + +def _web_result(result): + return { + 'url': result['url'], + 'title': result['title'], + 'content': html_to_text(result['snippet']), + } + + +def _images_result(result): + return { + 'template': 'images.html', + 'url': result['host_page'], + 'title': result.get('title', ''), + 'content': '', + 'img_src': result['image_id'], + 'thumbnail_src': result['src'], + } + + +def _news_result(result): + return { + 'url': result['url'], + 'title': result['title'], + 'content': html_to_text(result['snippet']), + 'publishedDate': datetime.strptime(result['first_seen'][:19], '%Y-%m-%dT%H:%M:%S'), + } + + +def response(resp): + results = [] + + for result in resp.json()[1]['results']: + if search_type == "web": + results.append(_web_result(result)) + elif search_type == "images": + results.append(_images_result(result)) + elif search_type == "news": + results.append(_news_result(result)) + else: + raise ValueError(f"Unsupported yep search type: {search_type}") + + return results diff --git a/searx/results.py b/searx/results.py index caf02213d..471d16981 100644 --- a/searx/results.py +++ b/searx/results.py @@ -232,7 +232,7 @@ class ResultContainer: if engine_name in engines: histogram_observe(standard_result_count, 'engine', engine_name, 'result', 'count') - if not self.paging and standard_result_count > 0 and engine_name in engines and engines[engine_name].paging: + if not self.paging and engine_name in engines and engines[engine_name].paging: self.paging = True def _merge_infobox(self, infobox): diff --git a/searx/settings.yml b/searx/settings.yml index 1b511c2c9..926cddb59 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -419,6 +419,11 @@ engines: require_api_key: false results: HTML + - name: bpb + engine: bpb + shortcut: bpb + disabled: true + - name: btdigg engine: btdigg shortcut: bt @@ -484,23 +489,25 @@ engines: website: https://crowdview.ai/ - name: yep - engine: json_engine + engine: yep shortcut: yep categories: general + search_type: web + disabled: true + + - name: yep images + engine: yep + shortcut: yepi + categories: images + search_type: images + disabled: true + + - name: yep news + engine: yep + shortcut: yepn + categories: news + search_type: news disabled: true - paging: false - content_html_to_text: true - title_html_to_text: true - search_url: https://api.yep.com/fs/1/?type=web&q={query}&no_correct=false&limit=100 - results_query: 1/results - title_query: title - url_query: url - content_query: snippet - about: - website: https://yep.com - use_official_api: false - require_api_key: false - results: JSON - name: curlie engine: xpath @@ -532,6 +539,11 @@ engines: shortcut: dz disabled: true + - name: destatis + engine: destatis + shortcut: destat + disabled: true + - name: deviantart engine: deviantart shortcut: da @@ -1285,6 +1297,37 @@ engines: # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' # shortcut : psql + - name: presearch + engine: presearch + search_type: search + categories: [general, web] + shortcut: ps + disabled: true + + - name: presearch images + engine: presearch + search_type: images + categories: [images, web] + timeout: 4.0 + shortcut: psimg + disabled: true + + - name: presearch videos + engine: presearch + search_type: videos + categories: [general, web] + timeout: 4.0 + shortcut: psvid + disabled: true + + - name: presearch news + engine: presearch + search_type: news + categories: [news, web] + timeout: 4.0 + shortcut: psnews + disabled: true + - name: pub.dev engine: xpath shortcut: pd diff --git a/searx/static/themes/simple/src/generated/pygments.less b/searx/static/themes/simple/src/generated/pygments.less index d01c777fb..6c5c4d193 100644 --- a/searx/static/themes/simple/src/generated/pygments.less +++ b/searx/static/themes/simple/src/generated/pygments.less @@ -1,6 +1,6 @@ /* this file is generated automatically by searxng_extra/update/update_pygments.py - using pygments version 2.16.1 + using pygments version 2.17.2 */ diff --git a/searx/templates/simple/results.html b/searx/templates/simple/results.html index 42ad3fa3d..7d97c9e06 100644 --- a/searx/templates/simple/results.html +++ b/searx/templates/simple/results.html @@ -124,22 +124,24 @@ {% endif %} -
-
- - {% for category in selected_categories %} - - {% endfor %} - - - - - - {% if timeout_limit %}{% endif %} - {{- engine_data_form(engine_data) -}} - -
-
+ {%- if results | count > 0 -%} +
+
+ + {% for category in selected_categories %} + + {% endfor %} + + + + + + {% if timeout_limit %}{% endif %} + {{- engine_data_form(engine_data) -}} + +
+
+ {%- endif -%} {% set pstart = 1 %} {% set pend = 11 %} {% if pageno > 5 %} diff --git a/searx/translations/cy/LC_MESSAGES/messages.mo b/searx/translations/cy/LC_MESSAGES/messages.mo index 63ed9be88..c562ebeda 100644 Binary files a/searx/translations/cy/LC_MESSAGES/messages.mo and b/searx/translations/cy/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/cy/LC_MESSAGES/messages.po b/searx/translations/cy/LC_MESSAGES/messages.po index 24370847f..033c209f5 100644 --- a/searx/translations/cy/LC_MESSAGES/messages.po +++ b/searx/translations/cy/LC_MESSAGES/messages.po @@ -10,25 +10,26 @@ # return42 , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-10-06 07:07+0000\n" +"PO-Revision-Date: 2023-11-23 06:13+0000\n" "Last-Translator: return42 \n" +"Language-Team: Welsh \n" "Language: cy\n" -"Language-Team: Welsh " -"\n" -"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n " -"!= 11) ? 2 : 3;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != " +"11) ? 2 : 3;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] #: searx/searxng.msg msgid "without further subgrouping" -msgstr "" +msgstr "heb is-grwpio pellach" #. CONSTANT_NAMES['DEFAULT_CATEGORY'] #: searx/searxng.msg @@ -273,11 +274,11 @@ msgstr "Sianel" #: searx/engines/radio_browser.py:104 msgid "radio" -msgstr "" +msgstr "radio" #: searx/engines/radio_browser.py:106 msgid "bitrate" -msgstr "" +msgstr "cyfradd didau" #: searx/engines/radio_browser.py:107 msgid "votes" @@ -1620,4 +1621,3 @@ msgstr "cuddio fideo" #~ "ganlyniadau. Defnyddiwch derm(au) chwilio " #~ "gwahanol neu ehangu'r chwilio i ragor" #~ " o gategorïau." - diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo index 1c3584ae3..b19bd3e1b 100644 Binary files a/searx/translations/eo/LC_MESSAGES/messages.mo and b/searx/translations/eo/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/eo/LC_MESSAGES/messages.po b/searx/translations/eo/LC_MESSAGES/messages.po index e813c12d6..e9096c365 100644 --- a/searx/translations/eo/LC_MESSAGES/messages.po +++ b/searx/translations/eo/LC_MESSAGES/messages.po @@ -11,21 +11,23 @@ # Markus Heiser , 2022. # return42 , 2023. # RTRedreovic , 2023. +# Azharjan , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-11-07 15:13+0000\n" -"Last-Translator: RTRedreovic " -"\n" +"PO-Revision-Date: 2023-11-23 06:13+0000\n" +"Last-Translator: RTRedreovic \n" +"Language-Team: Esperanto \n" "Language: eo\n" -"Language-Team: Esperanto " -"\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -760,11 +762,11 @@ msgstr "Serĉi URL" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "Kopiita" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "Kopii" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -945,7 +947,7 @@ msgstr "" #: searx/templates/simple/preferences/cookies.html:35 msgid "URL to restore your preferences in another browser" -msgstr "URL por restarigi viajn preferojn en alia retumilo" +msgstr "URL por restarigi viajn preferojn en alia TTT-legilo" #: searx/templates/simple/preferences/cookies.html:44 msgid "" @@ -1071,7 +1073,9 @@ msgstr "Montru demandon en la titolo de la paĝo" msgid "" "When enabled, the result page's title contains your query. Your browser " "can record this title" -msgstr "Kiam ĝi estas ebligita, la titolo de la rezultpaĝo enhavas vian demandon" +msgstr "" +"Kiam ĝi estas ebligita, la titolo de la rezultpaĝo enhavas vian demandon. " +"Via TTT-legilo povas registri ĉi tiun titolon" #: searx/templates/simple/preferences/results_on_new_tab.html:2 msgid "Results on new tabs" @@ -1079,7 +1083,7 @@ msgstr "Rezultoj en novaj langetoj" #: searx/templates/simple/preferences/results_on_new_tab.html:14 msgid "Open result links on new browser tabs" -msgstr "Malfermi rezultligilojn en novaj retumilaj langetoj" +msgstr "Malfermi rezultligilojn en novaj TTT-legilaj langetoj" #: searx/templates/simple/preferences/safesearch.html:20 msgid "Filter content" @@ -1111,7 +1115,7 @@ msgstr "Temo stilo" #: searx/templates/simple/preferences/theme.html:31 msgid "Choose auto to follow your browser settings" -msgstr "Elektu 'auto' por sekvi la agordojn de via retumilo" +msgstr "Elektu 'auto' por sekvi la agordojn de via TTT-legilo" #: searx/templates/simple/preferences/tokens.html:2 msgid "Engine tokens" @@ -1669,4 +1673,3 @@ msgstr "kaŝi videojn" #~ "ni ne trovis rezultojn. Bonvole uzu " #~ "alian serĉfrazon aŭ serĉu en pliaj " #~ "kategorioj." - diff --git a/searx/translations/fr/LC_MESSAGES/messages.mo b/searx/translations/fr/LC_MESSAGES/messages.mo index 4d302a4cc..5e5bd4ba3 100644 Binary files a/searx/translations/fr/LC_MESSAGES/messages.mo and b/searx/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fr/LC_MESSAGES/messages.po b/searx/translations/fr/LC_MESSAGES/messages.po index 4d6d0c26b..5d53a0021 100644 --- a/searx/translations/fr/LC_MESSAGES/messages.po +++ b/searx/translations/fr/LC_MESSAGES/messages.po @@ -20,18 +20,19 @@ # quenty_occitania , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-10-27 07:07+0000\n" -"Last-Translator: quenty_occitania \n" +"PO-Revision-Date: 2023-11-21 07:13+0000\n" +"Last-Translator: return42 \n" +"Language-Team: French \n" "Language: fr\n" -"Language-Team: French " -"\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -767,11 +768,11 @@ msgstr "URL de recherche" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "Copié" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "Copier" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -1717,4 +1718,3 @@ msgstr "cacher la vidéo" #~ "nous n'avons trouvé aucun résultat. " #~ "Effectuez une autre recherche ou changez" #~ " de catégorie." - diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo index 28fc888d3..ca934812c 100644 Binary files a/searx/translations/it/LC_MESSAGES/messages.mo and b/searx/translations/it/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/it/LC_MESSAGES/messages.po b/searx/translations/it/LC_MESSAGES/messages.po index 8fa4a77a9..b58e8a38d 100644 --- a/searx/translations/it/LC_MESSAGES/messages.po +++ b/searx/translations/it/LC_MESSAGES/messages.po @@ -27,7 +27,7 @@ msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-11-17 07:07+0000\n" +"PO-Revision-Date: 2023-11-21 07:13+0000\n" "Last-Translator: return42 \n" "Language-Team: Italian \n" @@ -175,7 +175,7 @@ msgstr "Sorgente" #: searx/webapp.py:336 msgid "Error loading the next page" -msgstr "Errore caricando la pagina successiva" +msgstr "Errore di caricamento della pagina successiva" #: searx/webapp.py:493 searx/webapp.py:889 msgid "Invalid settings, please edit your preferences" diff --git a/searx/translations/ko/LC_MESSAGES/messages.mo b/searx/translations/ko/LC_MESSAGES/messages.mo index ee5c40bd7..a3e79897a 100644 Binary files a/searx/translations/ko/LC_MESSAGES/messages.mo and b/searx/translations/ko/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ko/LC_MESSAGES/messages.po b/searx/translations/ko/LC_MESSAGES/messages.po index 15553a5f0..a14f8a45e 100644 --- a/searx/translations/ko/LC_MESSAGES/messages.po +++ b/searx/translations/ko/LC_MESSAGES/messages.po @@ -12,15 +12,16 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-11-05 21:47+0000\n" +"PO-Revision-Date: 2023-11-23 06:13+0000\n" "Last-Translator: return42 \n" +"Language-Team: Korean \n" "Language: ko\n" -"Language-Team: Korean " -"\n" -"Plural-Forms: nplurals=1; plural=0;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -743,11 +744,11 @@ msgstr "검색 URL" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "복사됨" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "복사하기" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -1502,4 +1503,3 @@ msgstr "비디오 숨기기" #~ "use another query or search in " #~ "more categories." #~ msgstr "검색결과를 찾을 수 없습니다. 다른 검색어로 검색하거나 검색 범주를 추가해주세요." - diff --git a/searx/translations/lt/LC_MESSAGES/messages.mo b/searx/translations/lt/LC_MESSAGES/messages.mo index e439c73d5..e6d0f46d7 100644 Binary files a/searx/translations/lt/LC_MESSAGES/messages.mo and b/searx/translations/lt/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/lt/LC_MESSAGES/messages.po b/searx/translations/lt/LC_MESSAGES/messages.po index 84009823b..695294d50 100644 --- a/searx/translations/lt/LC_MESSAGES/messages.po +++ b/searx/translations/lt/LC_MESSAGES/messages.po @@ -10,20 +10,21 @@ # Archfiend , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-09-12 14:53+0000\n" +"PO-Revision-Date: 2023-11-23 06:13+0000\n" "Last-Translator: return42 \n" +"Language-Team: Lithuanian \n" "Language: lt\n" -"Language-Team: Lithuanian " -"\n" -"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100" -" < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < " -"11) ? 1 : n % 1 != 0 ? 2: 3);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < " +"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :" +" n % 1 != 0 ? 2: 3);\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -282,11 +283,11 @@ msgstr "" #: searx/engines/radio_browser.py:107 msgid "votes" -msgstr "" +msgstr "balsai" #: searx/engines/radio_browser.py:108 msgid "clicks" -msgstr "" +msgstr "paspaudimai" #: searx/engines/seekr.py:194 searx/engines/zlibrary.py:129 msgid "Language" @@ -521,7 +522,7 @@ msgstr "Aš patvirtinu, kad nera jokių esamų" #: searx/templates/simple/new_issue.html:71 msgid "If this is a public instance, please specify the URL in the bug report" -msgstr "" +msgstr "Jei tai yra vieša, prašome nurodyti URL bugų pranešime" #: searx/templates/simple/new_issue.html:72 msgid "Submit a new issue on Github including the above information" @@ -539,11 +540,11 @@ msgstr "Peržiūrėkite klaidų žurnalus ir pateikite klaidų ataskaitą" #: searx/templates/simple/preferences.html:74 msgid "!bang for this engine" -msgstr "" +msgstr "!bang šiam varikliui" #: searx/templates/simple/preferences.html:80 msgid "!bang for its categories" -msgstr "" +msgstr "!bang šiom kategorijom" #: searx/templates/simple/preferences.html:102 #: searx/templates/simple/stats.html:64 @@ -740,7 +741,7 @@ msgstr "Atsisiųsti rezultatus" #: searx/templates/simple/elements/engines_msg.html:7 msgid "Messages from the search engines" -msgstr "" +msgstr "Pranešimai iš paieškos sistemų" #: searx/templates/simple/elements/engines_msg.html:12 msgid "Error!" @@ -756,11 +757,11 @@ msgstr "Paieškos URL" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "Nukopijuota" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "Kopijuoti" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -779,7 +780,7 @@ msgstr "Numatytoji kalba" #: searx/templates/simple/filters/languages.html:4 #: searx/templates/simple/preferences/language.html:11 msgid "Auto-detect" -msgstr "" +msgstr "Automatiškai aptikti" #: searx/templates/simple/filters/safesearch.html:1 #: searx/templates/simple/filters/safesearch.html:2 @@ -844,11 +845,11 @@ msgstr "Atleiskite!" #: searx/templates/simple/messages/no_results.html:4 msgid "No results were found. You can try to:" -msgstr "" +msgstr "Nieko nebuvo rasta. Galite bandyti:" #: searx/templates/simple/messages/no_results.html:6 msgid "Refresh the page." -msgstr "" +msgstr "Atnaujinti puslapį" #: searx/templates/simple/messages/no_results.html:7 msgid "Search for another query or select another category (above)." @@ -1663,4 +1664,3 @@ msgstr "slėpti vaizdo įrašą" #~ "mes neradome jokių rezultatų. Naudokite " #~ "kitokią užklausą arba ieškokite kitose " #~ "kategorijose." - diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.mo b/searx/translations/pt_BR/LC_MESSAGES/messages.mo index 172d12741..59b3c5d05 100644 Binary files a/searx/translations/pt_BR/LC_MESSAGES/messages.mo and b/searx/translations/pt_BR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.po b/searx/translations/pt_BR/LC_MESSAGES/messages.po index e34aa56c2..b88144d9f 100644 --- a/searx/translations/pt_BR/LC_MESSAGES/messages.po +++ b/searx/translations/pt_BR/LC_MESSAGES/messages.po @@ -23,18 +23,19 @@ # Coccocoas_Helper , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-10-06 07:07+0000\n" +"PO-Revision-Date: 2023-11-21 07:13+0000\n" "Last-Translator: return42 \n" +"Language-Team: Portuguese (Brazil) \n" "Language: pt_BR\n" -"Language-Team: Portuguese (Brazil) " -"\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -772,11 +773,11 @@ msgstr "Buscar URL" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "Copiado" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "Copiar" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -1719,4 +1720,3 @@ msgstr "ocultar vídeo" #~ "Não encontramos nenhum resultado. Utilize " #~ "outra consulta ou pesquisa em mais " #~ "categorias." - diff --git a/searx/translations/ro/LC_MESSAGES/messages.mo b/searx/translations/ro/LC_MESSAGES/messages.mo index 5b68143f1..dbafb823c 100644 Binary files a/searx/translations/ro/LC_MESSAGES/messages.mo and b/searx/translations/ro/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ro/LC_MESSAGES/messages.po b/searx/translations/ro/LC_MESSAGES/messages.po index 55c4565e6..76bf22847 100644 --- a/searx/translations/ro/LC_MESSAGES/messages.po +++ b/searx/translations/ro/LC_MESSAGES/messages.po @@ -15,19 +15,20 @@ # microsoftocsharp , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-11-05 21:47+0000\n" -"Last-Translator: return42 \n" +"PO-Revision-Date: 2023-11-21 07:13+0000\n" +"Last-Translator: alextecplayz \n" +"Language-Team: Romanian \n" "Language: ro\n" -"Language-Team: Romanian " -"\n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 " -"< 20)) ? 1 : 2;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " +"20)) ? 1 : 2;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -123,7 +124,7 @@ msgstr "î&r" #. CATEGORY_GROUPS['REPOS'] #: searx/searxng.msg msgid "repos" -msgstr "arhive digitale" +msgstr "repozitorii" #. CATEGORY_GROUPS['SOFTWARE_WIKIS'] #: searx/searxng.msg @@ -766,11 +767,11 @@ msgstr "URL de căutare" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "Copiat" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "Copiați" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -1703,4 +1704,3 @@ msgstr "ascunde video" #~ "n-am găsit nici un rezultat. Folosiți" #~ " o altă interogare sau căutați în " #~ "mai multe categorii." - diff --git a/searx/translations/ru/LC_MESSAGES/messages.mo b/searx/translations/ru/LC_MESSAGES/messages.mo index 7c1ac3610..06d604229 100644 Binary files a/searx/translations/ru/LC_MESSAGES/messages.mo and b/searx/translations/ru/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ru/LC_MESSAGES/messages.po b/searx/translations/ru/LC_MESSAGES/messages.po index 976a9d323..d76067159 100644 --- a/searx/translations/ru/LC_MESSAGES/messages.po +++ b/searx/translations/ru/LC_MESSAGES/messages.po @@ -16,13 +16,14 @@ # BalkanMadman , 2023. # AHOHNMYC , 2023. # return42 , 2023. +# 0que <0que@users.noreply.translate.codeberg.org>, 2023. msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-11-17 07:07+0000\n" -"Last-Translator: return42 \n" +"PO-Revision-Date: 2023-11-23 06:13+0000\n" +"Last-Translator: 0que <0que@users.noreply.translate.codeberg.org>\n" "Language-Team: Russian \n" "Language: ru\n" @@ -103,7 +104,7 @@ msgstr "Наука" #. CATEGORY_GROUPS['APPS'] #: searx/searxng.msg msgid "apps" -msgstr "Программы" +msgstr "Приложения" #. CATEGORY_GROUPS['DICTIONARIES'] #: searx/searxng.msg @@ -187,7 +188,7 @@ msgstr "ошибка поиска" #: searx/webutils.py:34 msgid "timeout" -msgstr "таймаут" +msgstr "истекло время ожидания" #: searx/webutils.py:35 msgid "parsing error" @@ -199,11 +200,11 @@ msgstr "ошибка протокола HTTP" #: searx/webutils.py:37 msgid "network error" -msgstr "сетевая ошибка" +msgstr "ошибка сети" #: searx/webutils.py:38 msgid "SSL error: certificate validation has failed" -msgstr "ошибка SSL: отсутствует действительность сертификата" +msgstr "ошибка SSL: проверка сертификата провалена" #: searx/webutils.py:40 msgid "unexpected crash" @@ -243,7 +244,7 @@ msgstr "Приостановлено" #: searx/webutils.py:317 msgid "{minutes} minute(s) ago" -msgstr "{minutes} минут(а) назад" +msgstr "{minutes} минут(-у) назад" #: searx/webutils.py:318 msgid "{hours} hour(s), {minutes} minute(s) ago" @@ -392,8 +393,8 @@ msgid "" "Displays your IP if the query is \"ip\" and your user agent if the query " "contains \"user agent\"." msgstr "" -"Показывает IP-адрес по запросу \"ip\" и версию браузера по запросу \"user" -" agent\"." +"Показывать ваш IP-адрес по запросу \"ip\" и информацию о браузере по запросу " +"\"user agent\"." #: searx/plugins/tor_check.py:25 msgid "Tor check plugin" @@ -462,7 +463,7 @@ msgstr "Настройки" #: searx/templates/simple/base.html:67 msgid "Powered by" -msgstr "Основано на" +msgstr "Работает на" #: searx/templates/simple/base.html:67 msgid "a privacy-respecting, open metasearch engine" @@ -747,7 +748,7 @@ msgstr "Комментарии" #: searx/templates/simple/elements/apis.html:3 msgid "Download results" -msgstr "Загрузить результаты" +msgstr "Скачать результаты" #: searx/templates/simple/elements/engines_msg.html:7 msgid "Messages from the search engines" @@ -767,7 +768,7 @@ msgstr "Ссылка поиска" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "Копирование" +msgstr "Скопировано" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" @@ -851,7 +852,7 @@ msgstr "в данный момент cookie-файлы не определены #: searx/templates/simple/messages/no_results.html:3 msgid "Sorry!" -msgstr "Грусть-печаль!" +msgstr "Извините!" #: searx/templates/simple/messages/no_results.html:4 msgid "No results were found. You can try to:" @@ -904,7 +905,7 @@ msgstr "Список плагинов." #: searx/templates/simple/preferences/autocomplete.html:2 msgid "Autocomplete" -msgstr "Подсказки" +msgstr "Автодополнение" #: searx/templates/simple/preferences/autocomplete.html:15 msgid "Find stuff as you type" @@ -988,7 +989,7 @@ msgstr "Поддерживает выбранный язык" #: searx/templates/simple/preferences/engines.html:23 msgid "Weight" -msgstr "Вес/масса" +msgstr "Вес" #: searx/templates/simple/preferences/engines.html:27 msgid "Max time" diff --git a/searx/translations/si/LC_MESSAGES/messages.mo b/searx/translations/si/LC_MESSAGES/messages.mo index 83e3be424..3cfe51638 100644 Binary files a/searx/translations/si/LC_MESSAGES/messages.mo and b/searx/translations/si/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/si/LC_MESSAGES/messages.po b/searx/translations/si/LC_MESSAGES/messages.po index f2e8f34ec..07fdf26cd 100644 --- a/searx/translations/si/LC_MESSAGES/messages.po +++ b/searx/translations/si/LC_MESSAGES/messages.po @@ -10,21 +10,22 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-06-02 07:07+0000\n" +"PO-Revision-Date: 2023-11-23 06:13+0000\n" "Last-Translator: return42 \n" +"Language-Team: Sinhala \n" "Language: si\n" -"Language-Team: Sinhala " -"\n" -"Plural-Forms: nplurals=2; plural=n > 1;\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] #: searx/searxng.msg msgid "without further subgrouping" -msgstr "" +msgstr "තවදුරටත් උප සමූහයකින් තොරව" #. CONSTANT_NAMES['DEFAULT_CATEGORY'] #: searx/searxng.msg @@ -99,7 +100,7 @@ msgstr "ශබ්දකෝෂ" #. CATEGORY_GROUPS['LYRICS'] #: searx/searxng.msg msgid "lyrics" -msgstr "" +msgstr "ගී පද" #. CATEGORY_GROUPS['PACKAGES'] #: searx/searxng.msg @@ -119,7 +120,7 @@ msgstr "ගබඩා" #. CATEGORY_GROUPS['SOFTWARE_WIKIS'] #: searx/searxng.msg msgid "software wikis" -msgstr "" +msgstr "මෘදුකාංග විකි" #. CATEGORY_GROUPS['WEB'] #: searx/searxng.msg @@ -1339,4 +1340,3 @@ msgstr "" #~ "use another query or search in " #~ "more categories." #~ msgstr "" - diff --git a/searx/translations/tr/LC_MESSAGES/messages.mo b/searx/translations/tr/LC_MESSAGES/messages.mo index 25877fed8..12ce7a757 100644 Binary files a/searx/translations/tr/LC_MESSAGES/messages.mo and b/searx/translations/tr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/tr/LC_MESSAGES/messages.po b/searx/translations/tr/LC_MESSAGES/messages.po index eddba0b01..fdfd7b667 100644 --- a/searx/translations/tr/LC_MESSAGES/messages.po +++ b/searx/translations/tr/LC_MESSAGES/messages.po @@ -16,18 +16,19 @@ # plawlost , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-11-11 15:25+0000\n" -"PO-Revision-Date: 2023-10-17 13:53+0000\n" +"PO-Revision-Date: 2023-11-21 07:13+0000\n" "Last-Translator: return42 \n" +"Language-Team: Turkish \n" "Language: tr\n" -"Language-Team: Turkish " -"\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Generator: Weblate 5.1\n" "Generated-By: Babel 2.13.1\n" #. CONSTANT_NAMES['NO_SUBGROUPING'] @@ -766,11 +767,11 @@ msgstr "Arama URL'si" #: searx/templates/simple/elements/search_url.html:4 msgid "Copied" -msgstr "" +msgstr "kopyalandı" #: searx/templates/simple/elements/search_url.html:4 msgid "Copy" -msgstr "" +msgstr "kopyala" #: searx/templates/simple/elements/suggestions.html:3 msgid "Suggestions" @@ -1694,4 +1695,3 @@ msgstr "görüntüyü gizle" #~ "herhangi bir sonuç bulamadık. Lütfen, " #~ "başka bir sorgu kullanın veya daha " #~ "fazla kategoride arama yapın." -