mirror of https://github.com/searxng/searxng.git
Compare commits
9 Commits
51e8c61ca5
...
41198ffb46
Author | SHA1 | Date |
---|---|---|
Bnyro | 41198ffb46 | |
Markus Heiser | 0f9694c90b | |
Markus Heiser | ccc4f30b20 | |
Markus Heiser | c4b874e9b0 | |
Markus Heiser | 7c4e4ebd40 | |
searxng-bot | b8f1a329d3 | |
dependabot[bot] | 67f7548573 | |
dependabot[bot] | f40fc2dd4f | |
Bnyro | 7edd75ff93 |
|
@ -4,22 +4,27 @@ Welcome to SearXNG
|
|||
|
||||
*Search without being tracked.*
|
||||
|
||||
SearXNG is a free internet metasearch engine which aggregates results from more
|
||||
than 70 search services. Users are neither tracked nor profiled. Additionally,
|
||||
SearXNG can be used over Tor for online anonymity.
|
||||
.. jinja:: searx
|
||||
|
||||
SearXNG is a free internet metasearch engine which aggregates results from up
|
||||
to {{engines | length}} :ref:`search services <configured engines>`. Users
|
||||
are neither tracked nor profiled. Additionally, SearXNG can be used over Tor
|
||||
for online anonymity.
|
||||
|
||||
Get started with SearXNG by using one of the instances listed at searx.space_.
|
||||
If you don't trust anyone, you can set up your own, see :ref:`installation`.
|
||||
|
||||
.. sidebar:: features
|
||||
.. jinja:: searx
|
||||
|
||||
.. sidebar:: features
|
||||
|
||||
- :ref:`self hosted <installation>`
|
||||
- :ref:`no user tracking / no profiling <SearXNG protect privacy>`
|
||||
- script & cookies are optional
|
||||
- secure, encrypted connections
|
||||
- :ref:`about 200 search engines <configured engines>`
|
||||
- `about 60 translations <https://translate.codeberg.org/projects/searxng/searxng/>`_
|
||||
- about 100 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
||||
- :ref:`{{engines | length}} search engines <configured engines>`
|
||||
- `58 translations <https://translate.codeberg.org/projects/searxng/searxng/>`_
|
||||
- about 70 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
||||
- :ref:`easy integration of search engines <demo online engine>`
|
||||
- professional development: `CI <https://github.com/searxng/searxng/actions>`_,
|
||||
`quality assurance <https://dev.searxng.org/>`_ &
|
||||
|
|
|
@ -11,11 +11,11 @@ httpx[http2]==0.24.1
|
|||
Brotli==1.1.0
|
||||
uvloop==0.21.0
|
||||
httpx-socks[asyncio]==0.7.7
|
||||
setproctitle==1.3.3
|
||||
setproctitle==1.3.4
|
||||
redis==5.0.8
|
||||
markdown-it-py==3.0.0
|
||||
fasttext-predict==0.9.2.2
|
||||
tomli==2.0.2; python_version < '3.11'
|
||||
msgspec==0.18.6
|
||||
eval_type_backport; python_version < '3.9'
|
||||
typer-slim==0.13.0
|
||||
typer-slim==0.13.1
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""Deepl translation engine"""
|
||||
|
||||
from json import loads
|
||||
|
||||
about = {
|
||||
"website": 'https://deepl.com',
|
||||
"wikidata_id": 'Q43968444',
|
||||
|
@ -41,16 +39,14 @@ def request(_query, params):
|
|||
|
||||
def response(resp):
|
||||
results = []
|
||||
result = loads(resp.text)
|
||||
translations = result['translations']
|
||||
|
||||
infobox = "<dl>"
|
||||
result = resp.json()
|
||||
|
||||
for translation in translations:
|
||||
infobox += f"<dd>{translation['text']}</dd>"
|
||||
if not result.get('translations'):
|
||||
return results
|
||||
|
||||
infobox += "</dl>"
|
||||
translations = [{'text': translation['text']} for translation in result['translations']]
|
||||
|
||||
results.append({'answer': infobox})
|
||||
results.append({'answer': translations[0]['text'], 'answer_type': 'translations', 'translations': translations})
|
||||
|
||||
return results
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
Dictzone
|
||||
"""
|
||||
|
||||
from urllib.parse import urljoin
|
||||
from lxml import html
|
||||
from searx.utils import eval_xpath
|
||||
|
||||
|
@ -33,11 +32,10 @@ def request(query, params): # pylint: disable=unused-argument
|
|||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
dom = html.fromstring(resp.text)
|
||||
|
||||
for k, result in enumerate(eval_xpath(dom, results_xpath)[1:]):
|
||||
translations = []
|
||||
for result in eval_xpath(dom, results_xpath)[1:]:
|
||||
try:
|
||||
from_result, to_results_raw = eval_xpath(result, './td')
|
||||
except: # pylint: disable=bare-except
|
||||
|
@ -49,12 +47,17 @@ def response(resp):
|
|||
if t.strip():
|
||||
to_results.append(to_result.text_content())
|
||||
|
||||
results.append(
|
||||
translations.append(
|
||||
{
|
||||
'url': urljoin(str(resp.url), '?%d' % k),
|
||||
'title': from_result.text_content(),
|
||||
'content': '; '.join(to_results),
|
||||
'text': f"{from_result.text_content()} - {'; '.join(to_results)}",
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
||||
if translations:
|
||||
result = {
|
||||
'answer': translations[0]['text'],
|
||||
'translations': translations,
|
||||
'answer_type': 'translations',
|
||||
}
|
||||
|
||||
return [result]
|
||||
|
|
|
@ -1,71 +0,0 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""Internet Archive scholar(science)
|
||||
"""
|
||||
|
||||
from datetime import datetime
|
||||
from urllib.parse import urlencode
|
||||
from searx.utils import html_to_text
|
||||
|
||||
about = {
|
||||
"website": "https://scholar.archive.org/",
|
||||
"wikidata_id": "Q115667709",
|
||||
"official_api_documentation": "https://scholar.archive.org/api/redoc",
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": "JSON",
|
||||
}
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
|
||||
base_url = "https://scholar.archive.org"
|
||||
results_per_page = 15
|
||||
|
||||
|
||||
def request(query, params):
|
||||
args = {
|
||||
"q": query,
|
||||
"limit": results_per_page,
|
||||
"offset": (params["pageno"] - 1) * results_per_page,
|
||||
}
|
||||
params["url"] = f"{base_url}/search?{urlencode(args)}"
|
||||
params["headers"]["Accept"] = "application/json"
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
json = resp.json()
|
||||
|
||||
for result in json["results"]:
|
||||
publishedDate, content, doi = None, '', None
|
||||
|
||||
if result['biblio'].get('release_date'):
|
||||
publishedDate = datetime.strptime(result['biblio']['release_date'], "%Y-%m-%d")
|
||||
|
||||
if len(result['abstracts']) > 0:
|
||||
content = result['abstracts'][0].get('body')
|
||||
elif len(result['_highlights']) > 0:
|
||||
content = result['_highlights'][0]
|
||||
|
||||
if len(result['releases']) > 0:
|
||||
doi = result['releases'][0].get('doi')
|
||||
|
||||
results.append(
|
||||
{
|
||||
'template': 'paper.html',
|
||||
'url': result['fulltext']['access_url'],
|
||||
'title': result['biblio'].get('title') or result['biblio'].get('container_name'),
|
||||
'content': html_to_text(content),
|
||||
'publisher': result['biblio'].get('publisher'),
|
||||
'doi': doi,
|
||||
'journal': result['biblio'].get('container_name'),
|
||||
'authors': result['biblio'].get('contrib_names'),
|
||||
'tags': result['tags'],
|
||||
'publishedDate': publishedDate,
|
||||
'issns': result['biblio'].get('issns'),
|
||||
'pdf_url': result['fulltext'].get('access_url'),
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -24,7 +24,7 @@ def request(_query, params):
|
|||
request_url = random.choice(base_url) if isinstance(base_url, list) else base_url
|
||||
params['url'] = f"{request_url}/translate"
|
||||
|
||||
args = {'source': params['from_lang'][1], 'target': params['to_lang'][1], 'q': params['query']}
|
||||
args = {'source': params['from_lang'][1], 'target': params['to_lang'][1], 'q': params['query'], 'alternatives': 3}
|
||||
if api_key:
|
||||
args['api_key'] = api_key
|
||||
params['data'] = dumps(args)
|
||||
|
@ -42,12 +42,11 @@ def response(resp):
|
|||
json_resp = resp.json()
|
||||
text = json_resp.get('translatedText')
|
||||
|
||||
from_lang = resp.search_params["from_lang"][1]
|
||||
to_lang = resp.search_params["to_lang"][1]
|
||||
query = resp.search_params["query"]
|
||||
req_url = resp.search_params["req_url"]
|
||||
if not text:
|
||||
return results
|
||||
|
||||
if text:
|
||||
results.append({"answer": text, "url": f"{req_url}/?source={from_lang}&target={to_lang}&q={query}"})
|
||||
translations = [{'text': text}] + [{'text': alternative} for alternative in json_resp.get('alternatives', [])]
|
||||
|
||||
results.append({'answer': text, 'answer_type': 'translations', 'translations': translations})
|
||||
|
||||
return results
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""Lingva (alternative Google Translate frontend)"""
|
||||
|
||||
from json import loads
|
||||
|
||||
about = {
|
||||
"website": 'https://lingva.ml',
|
||||
"wikidata_id": None,
|
||||
|
@ -29,7 +27,7 @@ def request(_query, params):
|
|||
def response(resp):
|
||||
results = []
|
||||
|
||||
result = loads(resp.text)
|
||||
result = resp.json()
|
||||
info = result["info"]
|
||||
from_to_prefix = "%s-%s " % (resp.search_params['from_lang'][1], resp.search_params['to_lang'][1])
|
||||
|
||||
|
@ -38,27 +36,40 @@ def response(resp):
|
|||
|
||||
if 'definitions' in info: # pylint: disable=too-many-nested-blocks
|
||||
for definition in info['definitions']:
|
||||
if 'list' in definition:
|
||||
for item in definition['list']:
|
||||
if 'synonyms' in item:
|
||||
for synonym in item['synonyms']:
|
||||
for item in definition.get('list', []):
|
||||
for synonym in item.get('synonyms', []):
|
||||
results.append({"suggestion": from_to_prefix + synonym})
|
||||
|
||||
infobox = ""
|
||||
data = []
|
||||
|
||||
for definition in info['definitions']:
|
||||
for translation in definition['list']:
|
||||
data.append(
|
||||
{
|
||||
'text': result['translation'],
|
||||
'definitions': [translation['definition']] if translation['definition'] else [],
|
||||
'examples': [translation['example']] if translation['example'] else [],
|
||||
'synonyms': translation['synonyms'],
|
||||
}
|
||||
)
|
||||
|
||||
for translation in info["extraTranslations"]:
|
||||
for word in translation["list"]:
|
||||
infobox += f"<dl><dt>{word['word']}</dt>"
|
||||
data.append(
|
||||
{
|
||||
'text': word['word'],
|
||||
'definitions': word['meanings'],
|
||||
}
|
||||
)
|
||||
|
||||
for meaning in word["meanings"]:
|
||||
infobox += f"<dd>{meaning}</dd>"
|
||||
|
||||
infobox += "</dl>"
|
||||
if not data and result['translation']:
|
||||
data.append({'text': result['translation']})
|
||||
|
||||
results.append(
|
||||
{
|
||||
'infobox': result["translation"],
|
||||
'content': infobox,
|
||||
'answer': data[0]['text'],
|
||||
'answer_type': 'translations',
|
||||
'translations': data,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ categories = ['images']
|
|||
paging = True
|
||||
|
||||
endpoint = 'photos'
|
||||
base_url = 'https://loc.gov'
|
||||
base_url = 'https://www.loc.gov'
|
||||
search_string = "/{endpoint}/?sp={page}&{query}&fo=json"
|
||||
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
import random
|
||||
import re
|
||||
from urllib.parse import urlencode
|
||||
from flask_babel import gettext
|
||||
|
||||
about = {
|
||||
"website": 'https://codeberg.org/aryak/mozhi',
|
||||
|
@ -35,30 +34,27 @@ def request(_query, params):
|
|||
def response(resp):
|
||||
translation = resp.json()
|
||||
|
||||
infobox = ""
|
||||
data = {'text': translation['translated-text'], 'definitions': [], 'examples': []}
|
||||
|
||||
if translation['target_transliteration'] and not re.match(
|
||||
re_transliteration_unsupported, translation['target_transliteration']
|
||||
):
|
||||
infobox = f"<b>{translation['target_transliteration']}</b>"
|
||||
data['transliteration'] = translation['target_transliteration']
|
||||
|
||||
if translation['word_choices']:
|
||||
for word in translation['word_choices']:
|
||||
infobox += f"<dl><dt>{word['word']}: {word['definition']}</dt>"
|
||||
if word.get('definition'):
|
||||
data['definitions'].append(word['definition'])
|
||||
|
||||
if word['examples_target']:
|
||||
for example in word['examples_target']:
|
||||
infobox += f"<dd>{re.sub(r'<|>', '', example)}</dd>"
|
||||
infobox += f"<dd>{re.sub(r'<|>', '', example)}</dd>"
|
||||
for example in word.get('examples_target', []):
|
||||
data['examples'].append(re.sub(r"<|>", "", example).lstrip('- '))
|
||||
|
||||
infobox += "</dl>"
|
||||
|
||||
if translation['source_synonyms']:
|
||||
infobox += f"<dl><dt>{gettext('Synonyms')}: {', '.join(translation['source_synonyms'])}</dt></dl>"
|
||||
data['synonyms'] = translation.get('source_synonyms', [])
|
||||
|
||||
result = {
|
||||
'infobox': translation['translated-text'],
|
||||
'content': infobox,
|
||||
'answer': translation['translated-text'],
|
||||
'answer_type': 'translations',
|
||||
'translations': [data],
|
||||
}
|
||||
|
||||
return [result]
|
||||
|
|
|
@ -35,18 +35,16 @@ def request(query, params): # pylint: disable=unused-argument
|
|||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
results.append(
|
||||
{
|
||||
'url': web_url.format(
|
||||
from_lang=resp.search_params['from_lang'][2],
|
||||
to_lang=resp.search_params['to_lang'][2],
|
||||
query=resp.search_params['query'],
|
||||
),
|
||||
'title': '[{0}-{1}] {2}'.format(
|
||||
resp.search_params['from_lang'][1], resp.search_params['to_lang'][1], resp.search_params['query']
|
||||
),
|
||||
'content': resp.json()['responseData']['translatedText'],
|
||||
json_resp = resp.json()
|
||||
text = json_resp['responseData']['translatedText']
|
||||
|
||||
alternatives = [match['translation'] for match in json_resp['matches'] if match['translation'] != text]
|
||||
translations = [{'text': translation} for translation in [text] + alternatives]
|
||||
|
||||
result = {
|
||||
'answer': translations[0]['text'],
|
||||
'answer_type': 'translations',
|
||||
'translations': translations,
|
||||
}
|
||||
)
|
||||
return results
|
||||
|
||||
return [result]
|
||||
|
|
|
@ -233,8 +233,7 @@ class Network:
|
|||
del kwargs['raise_for_httperror']
|
||||
return do_raise_for_httperror
|
||||
|
||||
@staticmethod
|
||||
def patch_response(response, do_raise_for_httperror):
|
||||
def patch_response(self, response, do_raise_for_httperror):
|
||||
if isinstance(response, httpx.Response):
|
||||
# requests compatibility (response is not streamed)
|
||||
# see also https://www.python-httpx.org/compatibility/#checking-for-4xx5xx-responses
|
||||
|
@ -242,8 +241,11 @@ class Network:
|
|||
|
||||
# raise an exception
|
||||
if do_raise_for_httperror:
|
||||
try:
|
||||
raise_for_httperror(response)
|
||||
|
||||
except:
|
||||
self._logger.warning(f"HTTP Request failed: {response.request.method} {response.request.url}")
|
||||
raise
|
||||
return response
|
||||
|
||||
def is_valid_response(self, response):
|
||||
|
@ -269,7 +271,7 @@ class Network:
|
|||
else:
|
||||
response = await client.request(method, url, **kwargs)
|
||||
if self.is_valid_response(response) or retries <= 0:
|
||||
return Network.patch_response(response, do_raise_for_httperror)
|
||||
return self.patch_response(response, do_raise_for_httperror)
|
||||
except httpx.RemoteProtocolError as e:
|
||||
if not was_disconnected:
|
||||
# the server has closed the connection:
|
||||
|
|
|
@ -137,9 +137,6 @@ class OnlineProcessor(EngineProcessor):
|
|||
self.engine.request(query, params)
|
||||
|
||||
# ignoring empty urls
|
||||
if params['url'] is None:
|
||||
return None
|
||||
|
||||
if not params['url']:
|
||||
return None
|
||||
|
||||
|
|
|
@ -1622,11 +1622,6 @@ engines:
|
|||
api_site: 'askubuntu'
|
||||
categories: [it, q&a]
|
||||
|
||||
- name: internetarchivescholar
|
||||
engine: internet_archive_scholar
|
||||
shortcut: ias
|
||||
timeout: 15.0
|
||||
|
||||
- name: superuser
|
||||
engine: stackexchange
|
||||
shortcut: su
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
<div class="answer-translations">
|
||||
{% for translation in translations %}
|
||||
{% if loop.index > 1 %}
|
||||
<hr />
|
||||
{% endif %}
|
||||
<h3>{{ translation.text }}</h3>
|
||||
{% if translation.transliteration %}
|
||||
<b>translation.transliteration</b>
|
||||
{% endif %} {% if translation.definitions %}
|
||||
<dl>
|
||||
<dt>{{ _('Definitions') }}</dt>
|
||||
<ul>
|
||||
{% for definition in translation.definitions %}
|
||||
<li>{{ definition }}</li>
|
||||
{% endfor %}
|
||||
<ul>
|
||||
</dl>
|
||||
{% endif %} {% if translation.examples %}
|
||||
<dl>
|
||||
<dt>{{ _('Examples') }}</dt>
|
||||
<ul>
|
||||
{% for example in translation.examples %}
|
||||
<li>{{ example }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</dl>
|
||||
{% endif %} {% if translation.synonyms %}
|
||||
<dl>
|
||||
<dt>{{ _('Synonyms') }}</dt>
|
||||
<ul>
|
||||
{% for synonym in translation.synonyms %}
|
||||
<li>{{ synonym }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</dl>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
|
@ -23,6 +23,11 @@
|
|||
<div id="answers" role="complementary" aria-labelledby="answers-title"><h4 class="title" id="answers-title">{{ _('Answers') }} : </h4>
|
||||
{%- for answer in answers.values() -%}
|
||||
<div class="answer">
|
||||
{%- if answer.answer_type == 'translations' -%}
|
||||
{% with translations=answer.translations %}
|
||||
{% include 'simple/answerers/translate.html' %}
|
||||
{% endwith %}
|
||||
{%- else -%}
|
||||
<span>{{ answer.answer }}</span>
|
||||
{%- if answer.url -%}
|
||||
<a href="{{ answer.url }}" class="answer-url"
|
||||
|
@ -31,6 +36,7 @@
|
|||
{%- endif -%}
|
||||
>{{ urlparse(answer.url).hostname }}</a>
|
||||
{% endif -%}
|
||||
{%- endif -%}
|
||||
</div>
|
||||
{%- endfor -%}
|
||||
</div>
|
||||
|
|
Binary file not shown.
|
@ -18,22 +18,23 @@
|
|||
# Yahya-Lando <Yahya-Lando@users.noreply.translate.codeberg.org>, 2024.
|
||||
# nebras <nebras@users.noreply.translate.codeberg.org>, 2024.
|
||||
# geekom13 <geekom13@users.noreply.translate.codeberg.org>, 2024.
|
||||
# cherrad <cherrad@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-10-04 07:09+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-11-17 23:56+0000\n"
|
||||
"Last-Translator: cherrad <cherrad@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Arabic <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/ar/>\n"
|
||||
"Language: ar\n"
|
||||
"Language-Team: Arabic "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/ar/>\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : "
|
||||
"n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 5.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -461,7 +462,7 @@ msgstr "حوسبة معطيات ال{functions}"
|
|||
|
||||
#: searx/engines/mozhi.py:57
|
||||
msgid "Synonyms"
|
||||
msgstr ""
|
||||
msgstr "مرادفات"
|
||||
|
||||
#: searx/engines/openstreetmap.py:159
|
||||
msgid "Get directions"
|
||||
|
@ -1224,11 +1225,11 @@ msgstr "أقصى مدّة"
|
|||
|
||||
#: searx/templates/simple/preferences/favicon.html:2
|
||||
msgid "Favicon Resolver"
|
||||
msgstr ""
|
||||
msgstr "محلل أيقونة المفضلة"
|
||||
|
||||
#: searx/templates/simple/preferences/favicon.html:15
|
||||
msgid "Display favicons near search results"
|
||||
msgstr ""
|
||||
msgstr "عرض المفضلات قرب نتائج البحث"
|
||||
|
||||
#: searx/templates/simple/preferences/footer.html:2
|
||||
msgid ""
|
||||
|
@ -1973,4 +1974,3 @@ msgstr "إخفاء الفيديو"
|
|||
|
||||
#~ msgid "Engines cannot retrieve results"
|
||||
#~ msgstr "لم تتمكن محركات البحث من العثور على أية نتيجة"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -18,9 +18,8 @@ msgstr ""
|
|||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-10-13 03:30+0000\n"
|
||||
"Last-Translator: stoychevww <stoychevww@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-11-21 08:13+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Bulgarian <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/bg/>\n"
|
||||
"Language: bg\n"
|
||||
|
@ -28,7 +27,7 @@ msgstr ""
|
|||
"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.7.2\n"
|
||||
"X-Generator: Weblate 5.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -59,7 +58,7 @@ msgstr "музика"
|
|||
#. CATEGORY_NAMES['SOCIAL_MEDIA']
|
||||
#: searx/searxng.msg
|
||||
msgid "social media"
|
||||
msgstr "социална мрежа"
|
||||
msgstr "социална медия"
|
||||
|
||||
#. CATEGORY_NAMES['IMAGES']
|
||||
#: searx/searxng.msg
|
||||
|
@ -159,12 +158,12 @@ msgstr "автоматичен"
|
|||
#. STYLE_NAMES['LIGHT']
|
||||
#: searx/searxng.msg
|
||||
msgid "light"
|
||||
msgstr "светъл"
|
||||
msgstr "светло"
|
||||
|
||||
#. STYLE_NAMES['DARK']
|
||||
#: searx/searxng.msg
|
||||
msgid "dark"
|
||||
msgstr "тъмен"
|
||||
msgstr "тъмно"
|
||||
|
||||
#. STYLE_NAMES['BLACK']
|
||||
#: searx/searxng.msg
|
||||
|
@ -364,7 +363,7 @@ msgstr "Грешка при зареждането на следващата с
|
|||
|
||||
#: searx/webapp.py:495 searx/webapp.py:898
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Неправилни настройки, моля проверете предпочитанията си"
|
||||
msgstr "Неправилни настройки, моля редактирайте предпочитанията си"
|
||||
|
||||
#: searx/webapp.py:511
|
||||
msgid "Invalid settings"
|
||||
|
@ -412,11 +411,11 @@ msgstr "прокси грешка"
|
|||
|
||||
#: searx/webutils.py:57
|
||||
msgid "CAPTCHA"
|
||||
msgstr "Кепча"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webutils.py:58
|
||||
msgid "too many requests"
|
||||
msgstr "твърде много искания"
|
||||
msgstr "твърде много повиквания"
|
||||
|
||||
#: searx/webutils.py:59
|
||||
msgid "access denied"
|
||||
|
@ -520,7 +519,7 @@ msgstr ""
|
|||
|
||||
#: searx/engines/tineye.py:57
|
||||
msgid "The image could not be downloaded."
|
||||
msgstr "Снимката не може да бъде смъкната."
|
||||
msgstr "Снимката не може да бъде свалена."
|
||||
|
||||
#: searx/engines/zlibrary.py:138
|
||||
msgid "Book rating"
|
||||
|
|
Binary file not shown.
|
@ -13,21 +13,23 @@
|
|||
# RTRedreovic <RTRedreovic@users.noreply.translate.codeberg.org>, 2023.
|
||||
# Azharjan <alexander.um.edu@gmail.com>, 2023.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# KinoCineaste <KinoCineaste@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-09-05 06:18+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-11-16 08:04+0000\n"
|
||||
"Last-Translator: KinoCineaste <KinoCineaste@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.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -78,7 +80,7 @@ msgstr "radio"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "televido"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -168,7 +170,7 @@ msgstr "malhela"
|
|||
#. STYLE_NAMES['BLACK']
|
||||
#: searx/searxng.msg
|
||||
msgid "black"
|
||||
msgstr ""
|
||||
msgstr "nigra"
|
||||
|
||||
#. BRAND_CUSTOM_LINKS['UPTIME']
|
||||
#: searx/searxng.msg
|
||||
|
@ -1961,4 +1963,3 @@ msgstr "kaŝi videojn"
|
|||
|
||||
#~ msgid "Engines cannot retrieve results"
|
||||
#~ msgstr "Serĉiloj ne povas retrovi rezultojn"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -26,16 +26,16 @@ msgstr ""
|
|||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-09-23 01:18+0000\n"
|
||||
"Last-Translator: tentsbet <tentsbet@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-11-21 05:07+0000\n"
|
||||
"Last-Translator: tentsbet <tentsbet@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Japanese <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/ja/>\n"
|
||||
"Language: ja\n"
|
||||
"Language-Team: Japanese "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/ja/>\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.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -176,7 +176,7 @@ msgstr "ダーク"
|
|||
#. STYLE_NAMES['BLACK']
|
||||
#: searx/searxng.msg
|
||||
msgid "black"
|
||||
msgstr ""
|
||||
msgstr "ブラック"
|
||||
|
||||
#. BRAND_CUSTOM_LINKS['UPTIME']
|
||||
#: searx/searxng.msg
|
||||
|
@ -463,7 +463,7 @@ msgstr "変数の {functions} を計算する"
|
|||
|
||||
#: searx/engines/mozhi.py:57
|
||||
msgid "Synonyms"
|
||||
msgstr ""
|
||||
msgstr "類義語"
|
||||
|
||||
#: searx/engines/openstreetmap.py:159
|
||||
msgid "Get directions"
|
||||
|
@ -1202,11 +1202,11 @@ msgstr "最大時間"
|
|||
|
||||
#: searx/templates/simple/preferences/favicon.html:2
|
||||
msgid "Favicon Resolver"
|
||||
msgstr ""
|
||||
msgstr "Favicon Resolver"
|
||||
|
||||
#: searx/templates/simple/preferences/favicon.html:15
|
||||
msgid "Display favicons near search results"
|
||||
msgstr ""
|
||||
msgstr "検索結果でfaviconに合いそうなものを表示する"
|
||||
|
||||
#: searx/templates/simple/preferences/footer.html:2
|
||||
msgid ""
|
||||
|
@ -1917,4 +1917,3 @@ msgstr "動画を隠す"
|
|||
|
||||
#~ msgid "Engines cannot retrieve results"
|
||||
#~ msgstr "エンジンは結果を取得できません"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -16,16 +16,16 @@ msgstr ""
|
|||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-07-19 07:09+0000\n"
|
||||
"Last-Translator: wazhanudin "
|
||||
"<wazhanudin@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-11-21 08:13+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Malay <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/ms/>\n"
|
||||
"Language: ms\n"
|
||||
"Language-Team: Malay "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/ms/>\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.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -166,7 +166,7 @@ msgstr "gelap"
|
|||
#. STYLE_NAMES['BLACK']
|
||||
#: searx/searxng.msg
|
||||
msgid "black"
|
||||
msgstr ""
|
||||
msgstr "Hitam"
|
||||
|
||||
#. BRAND_CUSTOM_LINKS['UPTIME']
|
||||
#: searx/searxng.msg
|
||||
|
@ -1690,4 +1690,3 @@ msgstr "sembunyikkan video"
|
|||
|
||||
#~ msgid "Engines cannot retrieve results"
|
||||
#~ msgstr "Enjin tidak dapat mendapatkan keputusan"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -21,17 +21,17 @@ msgstr ""
|
|||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-09-28 15:23+0000\n"
|
||||
"Last-Translator: UnD37970UnD "
|
||||
"<UnD37970UnD@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-11-21 08:13+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>\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.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -172,7 +172,7 @@ msgstr "întunecat"
|
|||
#. STYLE_NAMES['BLACK']
|
||||
#: searx/searxng.msg
|
||||
msgid "black"
|
||||
msgstr ""
|
||||
msgstr "negru"
|
||||
|
||||
#. BRAND_CUSTOM_LINKS['UPTIME']
|
||||
#: searx/searxng.msg
|
||||
|
@ -1998,4 +1998,3 @@ msgstr "ascunde video"
|
|||
|
||||
#~ msgid "Engines cannot retrieve results"
|
||||
#~ msgstr "Motoarele nu pot obține rezultate"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -16,17 +16,17 @@ msgstr ""
|
|||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-09-05 06:18+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"PO-Revision-Date: 2024-11-21 08:13+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Serbian <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/sr/>\n"
|
||||
"Language: sr\n"
|
||||
"Language-Team: Serbian "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/sr/>\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || 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%10==1 && n%100!=11 ? 0 : n%10>=2 && "
|
||||
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.8.1\n"
|
||||
"Generated-By: Babel 2.16.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -252,7 +252,7 @@ msgstr "Подне"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/engines/open_meteo.py:95 searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Притисак"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/engines/duckduckgo_weather.py:81 searx/engines/wttr.py:36
|
||||
|
@ -1972,4 +1972,3 @@ msgstr "сакриј видео"
|
|||
|
||||
#~ msgid "Engines cannot retrieve results"
|
||||
#~ msgstr "Не може повратити резултате"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -11,13 +11,15 @@
|
|||
# vducong <vducong@users.noreply.translate.codeberg.org>, 2024.
|
||||
# tvminh19 <tvminh19@users.noreply.translate.codeberg.org>, 2024.
|
||||
# KhietVo <KhietVo@users.noreply.translate.codeberg.org>, 2024.
|
||||
# DiamondBrain113 <DiamondBrain113@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-10-05 06:24+0000\n"
|
||||
"PO-Revision-Date: 2024-11-14 14:07+0000\n"
|
||||
"Last-Translator: KhietVo <KhietVo@users.noreply.translate.codeberg.org>\n"
|
||||
"PO-Revision-Date: 2024-11-16 20:44+0000\n"
|
||||
"Last-Translator: DiamondBrain113 <DiamondBrain113@users.noreply.translate."
|
||||
"codeberg.org>\n"
|
||||
"Language-Team: Vietnamese <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/vi/>\n"
|
||||
"Language: vi\n"
|
||||
|
@ -299,13 +301,13 @@ msgstr "những bài đăng"
|
|||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/engines/lemmy.py:87 searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "Người dùng hoạt động"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/engines/discourse.py:157 searx/engines/hackernews.py:78
|
||||
#: searx/engines/lemmy.py:130 searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "Bình luận"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/engines/lemmy.py:129 searx/engines/lemmy.py:164 searx/searxng.msg
|
||||
|
@ -454,7 +456,7 @@ msgstr "Tính toán {functions} của các đối số"
|
|||
|
||||
#: searx/engines/mozhi.py:57
|
||||
msgid "Synonyms"
|
||||
msgstr ""
|
||||
msgstr "Đồng nghĩa"
|
||||
|
||||
#: searx/engines/openstreetmap.py:159
|
||||
msgid "Get directions"
|
||||
|
@ -541,9 +543,8 @@ msgid "hash digest"
|
|||
msgstr "hash băm"
|
||||
|
||||
#: searx/plugins/hostnames.py:103
|
||||
#, fuzzy
|
||||
msgid "Hostnames plugin"
|
||||
msgstr "Mấy chủ bổ trợ"
|
||||
msgstr "Bổ trợ tên máy chủ"
|
||||
|
||||
#: searx/plugins/hostnames.py:104
|
||||
msgid "Rewrite hostnames, remove results or prioritize them based on the hostname"
|
||||
|
@ -578,7 +579,7 @@ msgstr "Địa chỉ IP của bạn: "
|
|||
|
||||
#: searx/plugins/self_info.py:31
|
||||
msgid "Your user-agent is: "
|
||||
msgstr ""
|
||||
msgstr "Tác nhân người dùng của bạn là: "
|
||||
|
||||
#: searx/plugins/tor_check.py:24
|
||||
msgid "Tor check plugin"
|
||||
|
@ -623,7 +624,7 @@ msgstr "Loại bỏ các đối số theo dõi từ URL trả về"
|
|||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
msgstr "Chuyển đổi giữa các đại lượng"
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
|
@ -690,7 +691,7 @@ msgstr "Độ dài"
|
|||
|
||||
#: searx/templates/simple/macros.html:41
|
||||
msgid "Views"
|
||||
msgstr ""
|
||||
msgstr "Lượt xem"
|
||||
|
||||
#: searx/templates/simple/macros.html:42
|
||||
#: searx/templates/simple/result_templates/files.html:34
|
||||
|
@ -933,9 +934,8 @@ msgid "Checker"
|
|||
msgstr "Người kiểm duyệt"
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#, fuzzy
|
||||
msgid "Failed test"
|
||||
msgstr "Bản kiểm thử không đạt"
|
||||
msgstr "Bài kiểm tra không đạt"
|
||||
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
|
@ -951,7 +951,7 @@ msgstr "Tin nhắn từ công cụ tìm kiếm"
|
|||
|
||||
#: searx/templates/simple/elements/engines_msg.html:7
|
||||
msgid "seconds"
|
||||
msgstr ""
|
||||
msgstr "giây"
|
||||
|
||||
#: searx/templates/simple/elements/search_url.html:3
|
||||
msgid "Search URL"
|
||||
|
@ -1208,11 +1208,11 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences/engines.html:15
|
||||
msgid "Enable all"
|
||||
msgstr ""
|
||||
msgstr "Bật tất cả"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:16
|
||||
msgid "Disable all"
|
||||
msgstr ""
|
||||
msgstr "Tắt tất cả"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
msgid "!bang"
|
||||
|
@ -1232,11 +1232,11 @@ msgstr "Thời gian tối đa"
|
|||
|
||||
#: searx/templates/simple/preferences/favicon.html:2
|
||||
msgid "Favicon Resolver"
|
||||
msgstr ""
|
||||
msgstr "Bộ phân giải biểu tượng web"
|
||||
|
||||
#: searx/templates/simple/preferences/favicon.html:15
|
||||
msgid "Display favicons near search results"
|
||||
msgstr ""
|
||||
msgstr "Hiển thị biểu tượng web gần kết quả tìm kiếm"
|
||||
|
||||
#: searx/templates/simple/preferences/footer.html:2
|
||||
msgid ""
|
||||
|
|
Loading…
Reference in New Issue