Merge branch 'searxng:master' into master

This commit is contained in:
coppcam 2023-11-29 02:18:47 +00:00 committed by GitHub
commit c65d57205f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 603 additions and 146 deletions

View file

@ -0,0 +1,13 @@
.. _bpb engine:
===
Bpb
===
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.bpb
:members:

View file

@ -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

View file

@ -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

68
searx/engines/bpb.py Normal file
View file

@ -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

68
searx/engines/destatis.py Normal file
View file

@ -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

180
searx/engines/presearch.py Normal file
View file

@ -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

79
searx/engines/yep.py Normal file
View file

@ -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

View file

@ -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):

View file

@ -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

View file

@ -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
*/

View file

@ -124,22 +124,24 @@
</div>
</form>
{% endif %}
<form method="{{ method or 'POST' }}" action="{{ url_for('search') }}" class="next_page">
<div class="{% if rtl %}left{% else %}right{% endif %}">
<input type="hidden" name="q" value="{{ q|e }}" >
{% for category in selected_categories %}
<input type="hidden" name="category_{{ category }}" value="1" >
{% endfor %}
<input type="hidden" name="pageno" value="{{ pageno+1 }}" >
<input type="hidden" name="language" value="{{ current_language }}" >
<input type="hidden" name="time_range" value="{{ time_range }}" >
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
<input type="hidden" name="theme" value="{{ theme }}" >
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
{{- engine_data_form(engine_data) -}}
<button role="link" type="submit">{{ _('Next page') }} {{ icon_small('chevron-right') }}</button>
</div>
</form>
{%- if results | count > 0 -%}
<form method="{{ method or 'POST' }}" action="{{ url_for('search') }}" class="next_page">
<div class="{% if rtl %}left{% else %}right{% endif %}">
<input type="hidden" name="q" value="{{ q|e }}" >
{% for category in selected_categories %}
<input type="hidden" name="category_{{ category }}" value="1" >
{% endfor %}
<input type="hidden" name="pageno" value="{{ pageno+1 }}" >
<input type="hidden" name="language" value="{{ current_language }}" >
<input type="hidden" name="time_range" value="{{ time_range }}" >
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
<input type="hidden" name="theme" value="{{ theme }}" >
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
{{- engine_data_form(engine_data) -}}
<button role="link" type="submit">{{ _('Next page') }} {{ icon_small('chevron-right') }}</button>
</div>
</form>
{%- endif -%}
{% set pstart = 1 %}
{% set pend = 11 %}
{% if pageno > 5 %}

View file

@ -10,25 +10,26 @@
# return42 <markus.heiser@darmarit.de>, 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 <markus.heiser@darmarit.de>\n"
"Language-Team: Welsh <https://translate.codeberg.org/projects/searxng/"
"searxng/cy/>\n"
"Language: cy\n"
"Language-Team: Welsh "
"<https://translate.codeberg.org/projects/searxng/searxng/cy/>\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."

View file

@ -11,21 +11,23 @@
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# return42 <markus.heiser@darmarit.de>, 2023.
# RTRedreovic <RTRedreovic@users.noreply.translate.codeberg.org>, 2023.
# Azharjan <alexander.um.edu@gmail.com>, 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 "
"<RTRedreovic@users.noreply.translate.codeberg.org>\n"
"PO-Revision-Date: 2023-11-23 06:13+0000\n"
"Last-Translator: RTRedreovic <RTRedreovic@users.noreply.translate.codeberg."
"org>\n"
"Language-Team: Esperanto <https://translate.codeberg.org/projects/searxng/"
"searxng/eo/>\n"
"Language: eo\n"
"Language-Team: Esperanto "
"<https://translate.codeberg.org/projects/searxng/searxng/eo/>\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."

View file

@ -20,18 +20,19 @@
# quenty_occitania <quentinantonin@free.fr>, 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 <quentinantonin@free.fr>\n"
"PO-Revision-Date: 2023-11-21 07:13+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: French <https://translate.codeberg.org/projects/searxng/"
"searxng/fr/>\n"
"Language: fr\n"
"Language-Team: French "
"<https://translate.codeberg.org/projects/searxng/searxng/fr/>\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."

View file

@ -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 <markus.heiser@darmarit.de>\n"
"Language-Team: Italian <https://translate.codeberg.org/projects/searxng/"
"searxng/it/>\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"

View file

@ -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 <markus.heiser@darmarit.de>\n"
"Language-Team: Korean <https://translate.codeberg.org/projects/searxng/"
"searxng/ko/>\n"
"Language: ko\n"
"Language-Team: Korean "
"<https://translate.codeberg.org/projects/searxng/searxng/ko/>\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 "검색결과를 찾을 수 없습니다. 다른 검색어로 검색하거나 검색 범주를 추가해주세요."

View file

@ -10,20 +10,21 @@
# Archfiend <romkutisarch3@gmail.com>, 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 <markus.heiser@darmarit.de>\n"
"Language-Team: Lithuanian <https://translate.codeberg.org/projects/searxng/"
"searxng/lt/>\n"
"Language: lt\n"
"Language-Team: Lithuanian "
"<https://translate.codeberg.org/projects/searxng/searxng/lt/>\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."

View file

@ -23,18 +23,19 @@
# Coccocoas_Helper <coccocoahelper@gmail.com>, 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 <markus.heiser@darmarit.de>\n"
"Language-Team: Portuguese (Brazil) <https://translate.codeberg.org/projects/"
"searxng/searxng/pt_BR/>\n"
"Language: pt_BR\n"
"Language-Team: Portuguese (Brazil) "
"<https://translate.codeberg.org/projects/searxng/searxng/pt_BR/>\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."

View file

@ -15,19 +15,20 @@
# microsoftocsharp <kottiberyu@gmail.com>, 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 <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2023-11-21 07:13+0000\n"
"Last-Translator: alextecplayz <alextec70@outlook.com>\n"
"Language-Team: Romanian <https://translate.codeberg.org/projects/searxng/"
"searxng/ro/>\n"
"Language: ro\n"
"Language-Team: Romanian "
"<https://translate.codeberg.org/projects/searxng/searxng/ro/>\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."

View file

@ -16,13 +16,14 @@
# BalkanMadman <zurabid2016@gmail.com>, 2023.
# AHOHNMYC <lqwh2h2cwa@protonmail.com>, 2023.
# return42 <markus.heiser@darmarit.de>, 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 <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2023-11-23 06:13+0000\n"
"Last-Translator: 0que <0que@users.noreply.translate.codeberg.org>\n"
"Language-Team: Russian <https://translate.codeberg.org/projects/searxng/"
"searxng/ru/>\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"

View file

@ -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 <markus.heiser@darmarit.de>\n"
"Language-Team: Sinhala <https://translate.codeberg.org/projects/searxng/"
"searxng/si/>\n"
"Language: si\n"
"Language-Team: Sinhala "
"<https://translate.codeberg.org/projects/searxng/searxng/si/>\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 ""

View file

@ -16,18 +16,19 @@
# plawlost <ceo@plawlabs.org>, 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 <markus.heiser@darmarit.de>\n"
"Language-Team: Turkish <https://translate.codeberg.org/projects/searxng/"
"searxng/tr/>\n"
"Language: tr\n"
"Language-Team: Turkish "
"<https://translate.codeberg.org/projects/searxng/searxng/tr/>\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."