Compare commits

..

1 Commits

Author SHA1 Message Date
dependabot[bot] 86d93c49af
Bump pylint from 2.15.9 to 2.15.10
Bumps [pylint](https://github.com/PyCQA/pylint) from 2.15.9 to 2.15.10.
- [Release notes](https://github.com/PyCQA/pylint/releases)
- [Commits](https://github.com/PyCQA/pylint/compare/v2.15.9...v2.15.10)

---
updated-dependencies:
- dependency-name: pylint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
1 year ago

2
.gitignore vendored

@ -21,5 +21,3 @@ gh-pages/
/node_modules/
.idea/
searx/version_frozen.py

@ -1,3 +1,3 @@
[weblate]
url = https://translate.codeberg.org/api/
url = https://weblate.bubu1.eu/api/
translation = searxng/searxng

@ -166,5 +166,4 @@ features or generally made searx better:
- Sam A. `<https://samsapti.dev>`_
- @XavierHorwood
- Ahmad Alkadri `<https://github.com/ahmad-alkadri>`_
- Milad Laly @Milad-Laly
- @llmII
- Milad Laly @Milad-Laly

@ -65,7 +65,6 @@ RUN su searxng -c "/usr/bin/python3 -m compileall -q searx" \
ARG LABEL_DATE=
ARG GIT_URL=unknown
ARG SEARXNG_GIT_VERSION=unknown
ARG SEARXNG_DOCKER_TAG=unknown
ARG LABEL_VCS_REF=
ARG LABEL_VCS_URL=
LABEL maintainer="searxng <${GIT_URL}>" \
@ -80,7 +79,7 @@ LABEL maintainer="searxng <${GIT_URL}>" \
org.label-schema.build-date="${LABEL_DATE}" \
org.label-schema.usage="https://github.com/searxng/searxng-docker" \
org.opencontainers.image.title="searxng" \
org.opencontainers.image.version="${SEARXNG_DOCKER_TAG}" \
org.opencontainers.image.version="${SEARXNG_GIT_VERSION}" \
org.opencontainers.image.url="${LABEL_VCS_URL}" \
org.opencontainers.image.revision=${LABEL_VCS_REF} \
org.opencontainers.image.source=${LABEL_VCS_URL} \

@ -59,8 +59,8 @@ our homepage_.
.. |commits| image:: https://img.shields.io/github/commit-activity/y/searxng/searxng?color=yellow&label=commits
:target: https://github.com/searxng/searxng/commits/master
.. |weblate| image:: https://translate.codeberg.org/widgets/searxng/-/searxng/svg-badge.svg
:target: https://translate.codeberg.org/projects/searxng/
.. |weblate| image:: https://weblate.bubu1.eu/widgets/searxng/-/searxng/svg-badge.svg
:target: https://weblate.bubu1.eu/projects/searxng/
Contact
@ -134,7 +134,7 @@ Contributing is easier
.. _Morty: https://github.com/asciimoo/morty
.. _Filtron: https://github.com/searxng/filtron
.. _limiter: https://docs.searxng.org/src/searx.plugins.limiter.html
.. _Weblate: https://translate.codeberg.org/projects/searxng/searxng/
.. _Weblate: https://weblate.bubu1.eu/projects/searxng/searxng/
.. _Development Quickstart: https://docs.searxng.org/dev/quickstart.html
@ -142,10 +142,10 @@ Translations
============
We need translators, suggestions are welcome at
https://translate.codeberg.org/projects/searxng/searxng/
https://weblate.bubu1.eu/projects/searxng/searxng/
.. figure:: https://translate.codeberg.org/widgets/searxng/-/multi-auto.svg
:target: https://translate.codeberg.org/projects/searxng/
.. figure:: https://weblate.bubu1.eu/widgets/searxng/-/multi-auto.svg
:target: https://weblate.bubu1.eu/projects/searxng/
Make a donation

@ -61,12 +61,6 @@ echo "SearXNG version ${SEARXNG_VERSION}"
# helpers to update the configuration files
patch_uwsgi_settings() {
CONF="$1"
# update uwsg.ini
sed -i \
-e "s|workers = .*|workers = ${UWSGI_WORKERS:-%k}|g" \
-e "s|threads = .*|threads = ${UWSGI_THREADS:-4}|g" \
"${CONF}"
}
patch_searxng_settings() {

@ -4,15 +4,15 @@
Translation
===========
.. _translate.codeberg.org: https://translate.codeberg.org/projects/searxng/
.. _weblate.bubu1.eu: https://weblate.bubu1.eu/projects/searxng/
.. _Weblate: https://docs.weblate.org
.. _translations branch: https://github.com/searxng/searxng/tree/translations
.. _orphan branch: https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt---orphanltnewbranchgt
.. _Weblate repository: https://translate.codeberg.org/projects/searxng/searxng/#repository
.. _Weblate repository: https://weblate.bubu1.eu/projects/searxng/searxng/#repository
.. _wlc: https://docs.weblate.org/en/latest/wlc.html
.. |translated| image:: https://translate.codeberg.org/widgets/searxng/-/searxng/svg-badge.svg
:target: https://translate.codeberg.org/projects/searxng/
.. |translated| image:: https://weblate.bubu1.eu/widgets/searxng/-/searxng/svg-badge.svg
:target: https://weblate.bubu1.eu/projects/searxng/
.. sidebar:: |translated|
@ -24,11 +24,11 @@ Translation
- Babel Command-Line: `pybabel <http://babel.pocoo.org/en/latest/cmdline.html>`_
- `weblate workflow <https://docs.weblate.org/en/latest/workflows.html>`_
Translation takes place on translate.codeberg.org_.
Translation takes place on weblate.bubu1.eu_.
Translations which has been added by translators on the translate.codeberg.org_ UI are
Translations which has been added by translators on the weblate.bubu1.eu_ UI are
committed to Weblate's counterpart of the SearXNG *origin* repository which is
located at ``https://translate.codeberg.org/git/searxng/searxng``.
located at ``https://weblate.bubu1.eu/git/searxng/searxng``.
There is no need to clone this repository, :ref:`SearXNG Weblate workflow` take
care of the synchronization with the *origin*. To avoid merging commits from
@ -68,7 +68,7 @@ wlc
===
.. _wlc configuration: https://docs.weblate.org/en/latest/wlc.html#wlc-config
.. _API key: https://translate.codeberg.org/accounts/profile/#api
.. _API key: https://weblate.bubu1.eu/accounts/profile/#api
All weblate integration is done by GitHub workflows, but if you want to use wlc_,
copy this content into `wlc configuration`_ in your HOME ``~/.config/weblate``
@ -76,6 +76,6 @@ copy this content into `wlc configuration`_ in your HOME ``~/.config/weblate``
.. code-block:: ini
[keys]
https://translate.codeberg.org/api/ = APIKEY
https://weblate.bubu1.eu/api/ = APIKEY
Replace ``APIKEY`` by your `API key`_.

@ -190,11 +190,11 @@ weblate.translations.worktree() {
# 'translations' from Weblate's counterpart (weblate) of the SearXNG
# (origin).
#
# remote weblate https://translate.codeberg.org/git/searxng/searxng/
# remote weblate https://weblate.bubu1.eu/git/searxng/searxng/
( set -e
if ! git remote get-url weblate 2> /dev/null; then
git remote add weblate https://translate.codeberg.org/git/searxng/searxng/
git remote add weblate https://weblate.bubu1.eu/git/searxng/searxng/
fi
if [ -d "${TRANSLATIONS_WORKTREE}" ]; then
pushd .
@ -478,7 +478,7 @@ docker.build() {
eval "$(python -m searx.version)"
# Get the last git commit id
VERSION_GITCOMMIT=$(echo "$VERSION_TAG" | cut -d+ -f2)
VERSION_GITCOMMIT=$(echo "$VERSION_STRING" | cut -d- -f3)
build_msg DOCKER "Last commit : $VERSION_GITCOMMIT"
# define the docker image name
@ -500,7 +500,6 @@ docker.build() {
docker $BUILD \
--build-arg BASE_IMAGE="${DEPENDENCIES_IMAGE_NAME}" \
--build-arg GIT_URL="${GIT_URL}" \
--build-arg SEARXNG_DOCKER_TAG="${DOCKER_TAG}" \
--build-arg SEARXNG_GIT_VERSION="${VERSION_STRING}" \
--build-arg VERSION_GITCOMMIT="${VERSION_GITCOMMIT}" \
--build-arg LABEL_DATE="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" \
@ -508,11 +507,11 @@ docker.build() {
--build-arg LABEL_VCS_URL="${GIT_URL}" \
--build-arg TIMESTAMP_SETTINGS="$(git log -1 --format="%cd" --date=unix -- searx/settings.yml)" \
--build-arg TIMESTAMP_UWSGI="$(git log -1 --format="%cd" --date=unix -- dockerfiles/uwsgi.ini)" \
-t "${SEARXNG_IMAGE_NAME}:latest" -t "${SEARXNG_IMAGE_NAME}:${DOCKER_TAG}" .
-t "${SEARXNG_IMAGE_NAME}:latest" -t "${SEARXNG_IMAGE_NAME}:${VERSION_STRING}" .
if [ "$1" = "push" ]; then
docker push "${SEARXNG_IMAGE_NAME}:latest"
docker push "${SEARXNG_IMAGE_NAME}:${DOCKER_TAG}"
docker push "${SEARXNG_IMAGE_NAME}:${SEARXNG_GIT_VERSION}"
fi
)
dump_return $?

@ -2,7 +2,7 @@ mock==5.0.0
nose2[coverage_plugin]==0.12.0
cov-core==1.15.0
black==22.12.0
pylint==2.15.9
pylint==2.15.10
splinter==0.18.1
selenium==4.7.2
twine==4.0.2

@ -12,7 +12,7 @@ Brotli==1.0.9
uvloop==0.17.0
httpx-socks[asyncio]==0.7.2
setproctitle==1.3.2
redis==4.4.2
redis==4.4.0
markdown-it-py==2.1.0
typing_extensions==4.4.0
fasttext-predict==0.9.2.1

@ -69,19 +69,11 @@ class SearxEngineAPIException(SearxEngineResponseException):
class SearxEngineAccessDeniedException(SearxEngineResponseException):
"""The website is blocking the access"""
SUSPEND_TIME_SETTING = "search.suspended_times.SearxEngineAccessDenied"
def __init__(self, suspended_time=None, message='Access denied'):
suspended_time = suspended_time or self._get_default_suspended_time()
def __init__(self, suspended_time=24 * 3600, message='Access denied'):
super().__init__(message + ', suspended_time=' + str(suspended_time))
self.suspended_time = suspended_time
self.message = message
def _get_default_suspended_time(self):
from searx import get_setting
return get_setting(self.SUSPEND_TIME_SETTING)
class SearxEngineCaptchaException(SearxEngineAccessDeniedException):
"""The website has returned a CAPTCHA
@ -89,9 +81,7 @@ class SearxEngineCaptchaException(SearxEngineAccessDeniedException):
By default, searx stops sending requests to this engine for 1 day.
"""
SUSPEND_TIME_SETTING = "search.suspended_times.SearxEngineCaptcha"
def __init__(self, suspended_time=None, message='CAPTCHA'):
def __init__(self, suspended_time=24 * 3600, message='CAPTCHA'):
super().__init__(message=message, suspended_time=suspended_time)
@ -101,9 +91,7 @@ class SearxEngineTooManyRequestsException(SearxEngineAccessDeniedException):
By default, searx stops sending requests to this engine for 1 hour.
"""
SUSPEND_TIME_SETTING = "search.suspended_times.SearxEngineTooManyRequests"
def __init__(self, suspended_time=None, message='Too many request'):
def __init__(self, suspended_time=3600, message='Too many request'):
super().__init__(message=message, suspended_time=suspended_time)

@ -79,7 +79,7 @@ machen. Je dezentraler das Internet ist, desto mehr Freiheit haben wir!
[SearXNG Dokumentation]: {{get_setting('brand.docs_url')}}
[searx]: https://github.com/searx/searx
[Metasuchmaschine]: https://de.wikipedia.org/wiki/Metasuchmaschine
[Weblate]: https://translate.codeberg.org/projects/searxng/
[Weblate]: https://weblate.bubu1.eu/projects/searxng/
[Seeks-Projekt]: https://beniz.github.io/seeks/
[OpenSearch]: https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md
[Firefox]: https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox

@ -71,7 +71,7 @@ internet is, the more freedom we have!
[SearXNG docs]: {{get_setting('brand.docs_url')}}
[searx]: https://github.com/searx/searx
[metasearch engine]: https://en.wikipedia.org/wiki/Metasearch_engine
[Weblate]: https://translate.codeberg.org/projects/searxng/
[Weblate]: https://weblate.bubu1.eu/projects/searxng/
[Seeks project]: https://beniz.github.io/seeks/
[OpenSearch]: https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md
[Firefox]: https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox

@ -74,7 +74,7 @@ terdesentralisasinya internet, lebih banyak kebebasan yang kita punya!
[dokumentasi SearXNG]: {{get_setting('brand.docs_url')}}
[searx]: https://github.com/searx/searx
[mesin pencari meta]: https://id.wikipedia.org/wiki/Mesin_pencari_web#Mesin_Pencari_dan_Mesin_Pencari-meta
[Weblate]: https://translate.codeberg.org/projects/searxng/
[Weblate]: https://weblate.bubu1.eu/projects/searxng/
[proyek Seeks]: https://beniz.github.io/seeks/
[OpenSearch]: https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md
[Firefox]: https://support.mozilla.org/id/kb/add-or-remove-search-engine-firefox

@ -9,7 +9,6 @@ from searx.exceptions import (
SearxEngineTooManyRequestsException,
SearxEngineAccessDeniedException,
)
from searx import get_setting
def is_cloudflare_challenge(resp):
@ -34,22 +33,15 @@ def raise_for_cloudflare_captcha(resp):
if is_cloudflare_challenge(resp):
# https://support.cloudflare.com/hc/en-us/articles/200170136-Understanding-Cloudflare-Challenge-Passage-Captcha-
# suspend for 2 weeks
raise SearxEngineCaptchaException(
message='Cloudflare CAPTCHA', suspended_time=get_setting('search.suspended_times.cf_SearxEngineCaptcha')
)
raise SearxEngineCaptchaException(message='Cloudflare CAPTCHA', suspended_time=3600 * 24 * 15)
if is_cloudflare_firewall(resp):
raise SearxEngineAccessDeniedException(
message='Cloudflare Firewall',
suspended_time=get_setting('search.suspended_times.cf_SearxEngineAccessDenied'),
)
raise SearxEngineAccessDeniedException(message='Cloudflare Firewall', suspended_time=3600 * 24)
def raise_for_recaptcha(resp):
if resp.status_code == 503 and '"https://www.google.com/recaptcha/' in resp.text:
raise SearxEngineCaptchaException(
message='ReCAPTCHA', suspended_time=get_setting('search.suspended_times.recaptcha_SearxEngineCaptcha')
)
raise SearxEngineCaptchaException(message='ReCAPTCHA', suspended_time=3600 * 24 * 7)
def raise_for_captcha(resp):

@ -45,20 +45,6 @@ search:
ban_time_on_fail: 5
# max ban time in seconds after engine errors
max_ban_time_on_fail: 120
suspend_times:
# Engine suspension time after error (in seconds; set to 0 to disable)
# For error "Access denied" and "HTTP error [402, 403]"
SearxEngineAccessDenied: 86400
# For error "CAPTCHA"
SearxEngineCaptcha: 86400
# For error "Too many request" and "HTTP error 429"
SearxEngineTooManyRequests: 3600
# Cloudflare CAPTCHA
cf_SearxEngineCaptcha: 1296000
cf_SearxEngineAccessDenied: 86400
# ReCAPTCHA
recaptcha_SearxEngineCaptcha: 604800
# remove format to deny access, use lower case.
# formats: [html, csv, json, rss]
formats:
@ -1981,26 +1967,6 @@ engines:
require_api_key: false
results: HTML
- name: goo
shortcut: goo
engine: xpath
paging: true
search_url: https://search.goo.ne.jp/web.jsp?MT={query}&FR={pageno}0
url_xpath: //div[@class="result"]/p[@class='title fsL1']/a/@href
title_xpath: //div[@class="result"]/p[@class='title fsL1']/a
content_xpath: //p[contains(@class,'url fsM')]/following-sibling::p
first_page_num: 0
categories: [general, web]
disabled: true
timeout: 4.0
about:
website: https://search.goo.ne.jp
wikidata_id: Q249044
use_official_api: false
require_api_key: false
results: HTML
language: ja
# Doku engine lets you access to any Doku wiki instance:
# A public one or a privete/corporate one.
# - name: ubuntuwiki

@ -160,14 +160,6 @@ SCHEMA = {
'languages': SettingSublistValue(LANGUAGE_CODES, LANGUAGE_CODES),
'ban_time_on_fail': SettingsValue(numbers.Real, 5),
'max_ban_time_on_fail': SettingsValue(numbers.Real, 120),
'suspended_times': {
'SearxEngineAccessDenied': SettingsValue(numbers.Real, 86400),
'SearxEngineCaptcha': SettingsValue(numbers.Real, 86400),
'SearxEngineTooManyRequests': SettingsValue(numbers.Real, 3600),
'cf_SearxEngineCaptcha': SettingsValue(numbers.Real, 1296000),
'cf_SearxEngineAccessDenied': SettingsValue(numbers.Real, 86400),
'recaptcha_SearxEngineCaptcha': SettingsValue(numbers.Real, 604800),
},
'formats': SettingsValue(list, OUTPUT_FORMATS),
},
'server': {

@ -423,8 +423,11 @@ svg.leaflet-image-layer.leaflet-interactive path {
.leaflet-control-attribution a:focus {
text-decoration: underline;
}
.leaflet-control-attribution svg {
.leaflet-attribution-flag {
display: inline !important;
vertical-align: baseline !important;
width: 1em;
height: 0.6669em;
}
.leaflet-left .leaflet-control-scale {
margin-left: 5px;
@ -438,12 +441,10 @@ svg.leaflet-image-layer.leaflet-interactive path {
line-height: 1.1;
padding: 2px 5px 1px;
white-space: nowrap;
overflow: hidden;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #fff;
background: rgba(255, 255, 255, 0.5);
background: rgba(255, 255, 255, 0.8);
text-shadow: 1px 1px #fff;
}
.leaflet-control-scale-line:not(:first-child) {
border-top: 2px solid #777;
@ -537,8 +538,6 @@ svg.leaflet-image-layer.leaflet-interactive path {
}
.leaflet-popup-scrolled {
overflow: auto;
border-bottom: 1px solid #ddd;
border-top: 1px solid #ddd;
}
.leaflet-oldie .leaflet-popup-content-wrapper {
@ -652,6 +651,6 @@ svg.leaflet-image-layer.leaflet-interactive path {
/* Prevent printers from removing background-images of controls. */
.leaflet-control {
-webkit-print-color-adjust: exact;
color-adjust: exact;
print-color-adjust: exact;
}
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -1 +1 @@
{"version":3,"file":"searxng.head.min.js","sources":["../src/js/head/00_init.js"],"sourcesContent":["/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d) {\n 'use strict';\n\n // add data- properties\n var script = d.currentScript || (function () {\n var scripts = d.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n })();\n\n w.searxng = {\n settings: JSON.parse(atob(script.getAttribute('client_settings')))\n };\n\n // update the css\n var hmtlElement = d.getElementsByTagName(\"html\")[0];\n hmtlElement.classList.remove('no-js');\n hmtlElement.classList.add('js');\n\n})(window, document);\n"],"names":["w","d","script","currentScript","scripts","getElementsByTagName","length","searxng","settings","JSON","parse","atob","getAttribute","hmtlElement","classList","remove","add","window","document"],"mappings":"CACA,SAAWA,EAAGC,gBAIZ,IAAIC,EAASD,EAAEE,eAAkB,WAC/B,IAAIC,EAAUH,EAAEI,qBAAqB,UACrC,OAAOD,EAAQA,EAAQE,OAAS,GAFD,GAKjCN,EAAEO,QAAU,CACVC,SAAUC,KAAKC,MAAMC,KAAKT,EAAOU,aAAa,sBAIhD,IAAIC,EAAcZ,EAAEI,qBAAqB,QAAQ,GACjDQ,EAAYC,UAAUC,OAAO,SAC7BF,EAAYC,UAAUE,IAAI,OAhB5B,CAkBGC,OAAQC"}
{"version":3,"file":"searxng.head.min.js","sources":["../src/js/head/00_init.js"],"sourcesContent":["/* SPDX-License-Identifier: AGPL-3.0-or-later */\n(function (w, d) {\n 'use strict';\n\n // add data- properties\n var script = d.currentScript || (function () {\n var scripts = d.getElementsByTagName('script');\n return scripts[scripts.length - 1];\n })();\n\n w.searxng = {\n settings: JSON.parse(atob(script.getAttribute('client_settings')))\n };\n\n // update the css\n var hmtlElement = d.getElementsByTagName(\"html\")[0];\n hmtlElement.classList.remove('no-js');\n hmtlElement.classList.add('js');\n\n})(window, document);\n"],"names":["w","d","script","currentScript","scripts","getElementsByTagName","length","searxng","settings","JSON","parse","atob","getAttribute","hmtlElement","classList","remove","add","window","document"],"mappings":"CACA,SAAWA,EAAGC,GACZ,aAGA,IAAIC,EAASD,EAAEE,eAAkB,WAC/B,IAAIC,EAAUH,EAAEI,qBAAqB,QAAQ,EAC7C,OAAOD,EAAQA,EAAQE,OAAS,EACjC,EAAE,EAEHN,EAAEO,QAAU,CACVC,SAAUC,KAAKC,MAAMC,KAAKT,EAAOU,aAAa,iBAAiB,CAAC,CAAC,CACnE,EAGA,IAAIC,EAAcZ,EAAEI,qBAAqB,MAAM,EAAE,GACjDQ,EAAYC,UAAUC,OAAO,OAAO,EACpCF,EAAYC,UAAUE,IAAI,IAAI,CAE/B,GAAEC,OAAQC,QAAQ"}

File diff suppressed because one or more lines are too long

@ -362,7 +362,7 @@ article[data-vim-selected].category-social {
.category-files,
.category-social {
border: 1px solid var(--color-result-border);
margin: 0 @results-tablet-offset 1rem @results-tablet-offset !important;
margin: 1rem @results-tablet-offset 0 @results-tablet-offset !important;
.rounded-corners;
}
@ -734,26 +734,6 @@ article[data-vim-selected].category-social {
}
}
.numbered_pagination {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
overflow: hidden;
}
.page_number {
background: transparent !important;
color: var(--color-result-link-font) !important;
text-decoration: underline;
}
.page_number_current {
background: transparent;
color: var(--color-result-link-visited-font);
border: none;
}
#apis {
margin-top: 8px;
clear: both;
@ -1029,10 +1009,6 @@ article[data-vim-selected].category-social {
background-color: var(--color-sidebar-background);
}
.numbered_pagination {
display: none;
}
.result-paper {
.attributes {
display: block;

@ -187,35 +187,6 @@
<button role="link" type="submit">{{ _('Next page') }} {{ icon_small('chevron-right') }}</button>
</div>
</form>
{% set pstart = 1 %}
{% set pend = 11 %}
{% if pageno > 5 %}
{% set pstart = pageno - 4 %}
{% set pend = pageno + 6 %}
{% endif %}
<div class="numbered_pagination">
{% for x in range(pstart, pend) %}
<form method="{{ method or 'POST' }}" action="{{ url_for('search') }}" class="page_number">
<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="{{ x }}" >
<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) -}}
{% if pageno == x %}
<input role="link" class="page_number_current" type="button" value="{{ x }}">
{% else %}
<input role="link" class="page_number" type="submit" value="{{ x }}">
{% endif %}
</form>
{% endfor %}
</div>
</nav>
{% endif %}
</div>

@ -6,7 +6,7 @@
# ButterflyOfFire ButterflyOfFire, 2018
# ButterflyOfFire, 2018
# d506c013dc1b502e7a53f91ebcbf8f29_985b4b3, 2017-2018
# Markus Heiser <markus.heiser@darmarit.de>, 2022, 2023.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# ken kailer <kenkailer@yahoo.com>, 2022.
# George Kashkosh <kash.george@gmail.com>, 2022.
# Droid <droidpy587@gmail.com>, 2022.
@ -15,8 +15,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2022-12-30 07:14+0000\n"
"Last-Translator: Droid <droidpy587@gmail.com>\n"
"Language-Team: Arabic <https://weblate.bubu1.eu/projects/searxng/searxng/ar/>"
"\n"
"Language: ar\n"
@ -320,12 +320,13 @@ msgid "Night"
msgstr "ليلا"
#: searx/plugins/autodetect_search_language.py:79
#, fuzzy
msgid "Autodetect search language"
msgstr "كشف تلقائي عن لغة البحث"
msgstr "البحث التلقائي للغة"
#: searx/plugins/autodetect_search_language.py:80
msgid "Automatically detect the query search language and switch to it."
msgstr "كشف تلقائي عن لغة البحث والتبديل إليها."
msgstr ""
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -1141,7 +1142,7 @@ msgstr "تاريخ النشر"
#: searx/templates/simple/result_templates/paper.html:9
msgid "Journal"
msgstr "السجل اليومي"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:22
msgid "Editor"
@ -1161,11 +1162,11 @@ msgstr "السمات"
#: searx/templates/simple/result_templates/paper.html:26
msgid "DOI"
msgstr "DOI"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:27
msgid "ISSN"
msgstr "ISSN"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:28
msgid "ISBN"

@ -8,22 +8,20 @@
# beriain, 2020-2021
# Txopi <txopi@ikusimakusi.eus>, 2016
# beriain <soila@disroot.org>, 2022.
# Markus Heiser <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: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Basque <https://weblate.bubu1.eu/projects/searxng/searxng/eu/>"
"\n"
"PO-Revision-Date: 2022-09-11 22:50+0000\n"
"Last-Translator: beriain <soila@disroot.org>\n"
"Language: eu\n"
"Language-Team: Basque "
"<https://weblate.bubu1.eu/projects/searxng/searxng/eu/>\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 4.14.1\n"
"Generated-By: Babel 2.11.0\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -129,7 +127,7 @@ msgstr "software wikiak"
#. CATEGORY_GROUPS['WEB']
#: searx/searxng.msg
msgid "web"
msgstr "web"
msgstr ""
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
#: searx/searxng.msg
@ -1478,3 +1476,4 @@ msgstr "ezkutatu bideoa"
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
#~ " rel=\"external\">ikasi gehiago eskaera metodoen"
#~ " inguruan</a>"

@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"PO-Revision-Date: 2023-01-06 07:14+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Persian <https://weblate.bubu1.eu/projects/searxng/searxng/fa/"
">\n"
@ -95,7 +95,7 @@ msgstr "علم"
#. CATEGORY_GROUPS['APPS']
#: searx/searxng.msg
msgid "apps"
msgstr "برنامه ها"
msgstr "برنامک‌ها"
#. CATEGORY_GROUPS['DICTIONARIES']
#: searx/searxng.msg
@ -170,7 +170,7 @@ msgstr "خطای شبکه"
#: searx/webapp.py:169
msgid "SSL error: certificate validation has failed"
msgstr "ارور SSL:اعتبار سنجی گواهی امنیتی SSL ناموفق بود"
msgstr "ارور SSL:اعتبار سنجی گواهی ناموفق بود"
#: searx/webapp.py:171
msgid "unexpected crash"
@ -198,7 +198,7 @@ msgstr "درخواست‌های زیاد"
#: searx/webapp.py:188
msgid "access denied"
msgstr "دسترسی مجاز نیست"
msgstr "دسترسی ممنوع است"
#: searx/webapp.py:189
msgid "server API error"
@ -219,7 +219,7 @@ msgstr "خطا در بارگزاری صفحه جدید"
#: searx/webapp.py:522 searx/webapp.py:954
msgid "Invalid settings, please edit your preferences"
msgstr "تنظیمات نادرست است، لطفا تنظیمات جستجو را تغییر دهید"
msgstr "تنظیمات نادرست است، لطفا پیش‌فرض‌های جستجو را تغییر دهید"
#: searx/webapp.py:538
msgid "Invalid settings"

@ -4,23 +4,22 @@
#
# Translators:
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2017
# Markus Heiser <markus.heiser@darmarit.de>, 2022, 2023.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Mico Hautaluoma <m@mha.fi>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"PO-Revision-Date: 2022-10-11 13:31+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Finnish <https://weblate.bubu1.eu/projects/searxng/searxng/fi/"
">\n"
"Language: fi\n"
"Language-Team: Finnish "
"<https://weblate.bubu1.eu/projects/searxng/searxng/fi/>\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 4.14.1\n"
"Generated-By: Babel 2.11.0\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -166,7 +165,7 @@ msgstr "verkkovirhe"
#: searx/webapp.py:169
msgid "SSL error: certificate validation has failed"
msgstr "SSL-virhe: sertifikaatin vahvistus epäonnistui"
msgstr ""
#: searx/webapp.py:171
msgid "unexpected crash"
@ -274,8 +273,6 @@ msgid ""
"{numCitations} citations from the year {firstCitationVelocityYear} to "
"{lastCitationVelocityYear}"
msgstr ""
"{numCitations} Sitaatit vuodesta {firstCitationVelocityYear} vuoteen "
"{lastCitationVelocityYear}"
#: searx/engines/tineye.py:40
msgid ""
@ -317,7 +314,7 @@ msgstr "Yö"
#: searx/plugins/autodetect_search_language.py:79
msgid "Autodetect search language"
msgstr "Tunnista hakukieli automaattisesti"
msgstr ""
#: searx/plugins/autodetect_search_language.py:80
msgid "Automatically detect the query search language and switch to it."
@ -458,7 +455,7 @@ msgstr "Taustavoimana"
#: searx/templates/simple/base.html:64
msgid "a privacy-respecting, open metasearch engine"
msgstr "yksityisyyttä kunnioittava, avoin metahakukone"
msgstr ""
#: searx/templates/simple/base.html:65
msgid "Source code"
@ -1131,11 +1128,11 @@ msgstr "piilota kartta"
#: searx/templates/simple/result_templates/paper.html:5
msgid "Published date"
msgstr "Julkaisupäivä"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:9
msgid "Journal"
msgstr "Journaali"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:22
msgid "Editor"
@ -1143,7 +1140,7 @@ msgstr ""
#: searx/templates/simple/result_templates/paper.html:23
msgid "Publisher"
msgstr "Julkaisija"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:24
msgid "Type"
@ -1151,7 +1148,7 @@ msgstr ""
#: searx/templates/simple/result_templates/paper.html:25
msgid "Tags"
msgstr "Tägit"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:26
msgid "DOI"
@ -1159,19 +1156,19 @@ msgstr ""
#: searx/templates/simple/result_templates/paper.html:27
msgid "ISSN"
msgstr "ISSN"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:28
msgid "ISBN"
msgstr "ISBN"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:33
msgid "PDF"
msgstr "PDF"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:34
msgid "HTML"
msgstr "HTML"
msgstr ""
#: searx/templates/simple/result_templates/torrent.html:6
msgid "magnet link"
@ -1495,3 +1492,4 @@ msgstr "piilota video"
#~ " <a "
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
#~ " rel=\"external\">Lisätietoja eri välitystavoista.</a>"

@ -9,24 +9,23 @@
# pointhi, 2014
# rike, 2014
# stf <stefan.marsiske@gmail.com>, 2014
# Markus Heiser <markus.heiser@darmarit.de>, 2022, 2023.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Shopimisrel <shopisrael12@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-20 07:15+0000\n"
"PO-Revision-Date: 2022-09-21 15:58+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Hebrew <https://weblate.bubu1.eu/projects/searxng/searxng/he/>"
"\n"
"Language: he\n"
"Language-Team: Hebrew "
"<https://weblate.bubu1.eu/projects/searxng/searxng/he/>\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 "
"&& n % 10 == 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 == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
"X-Generator: Weblate 4.14.1\n"
"Generated-By: Babel 2.11.0\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -137,7 +136,7 @@ msgstr "רשת"
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
#: searx/searxng.msg
msgid "scientific publications"
msgstr "מחקרים מדעיים"
msgstr ""
#. STYLE_NAMES['AUTO']
#: searx/searxng.msg
@ -172,7 +171,7 @@ msgstr "שגיאת רשת תקשורת"
#: searx/webapp.py:169
msgid "SSL error: certificate validation has failed"
msgstr "שגיאת SSL: אימות התעודה נכשל"
msgstr ""
#: searx/webapp.py:171
msgid "unexpected crash"
@ -305,27 +304,27 @@ msgstr "אי אפשר להוריד את תמונה זו."
#: searx/engines/wttr.py:101
msgid "Morning"
msgstr "בוקר"
msgstr ""
#: searx/engines/wttr.py:101
msgid "Noon"
msgstr "צהריים"
msgstr ""
#: searx/engines/wttr.py:101
msgid "Evening"
msgstr "ערב"
msgstr ""
#: searx/engines/wttr.py:101
msgid "Night"
msgstr "לילה"
msgstr ""
#: searx/plugins/autodetect_search_language.py:79
msgid "Autodetect search language"
msgstr "זיהוי שפת חיפוש אוטומטי"
msgstr ""
#: searx/plugins/autodetect_search_language.py:80
msgid "Automatically detect the query search language and switch to it."
msgstr "זהה אוטומטית את שפת החיפוש והחלף אליה בהתאם."
msgstr ""
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -369,7 +368,7 @@ msgstr ""
#: searx/plugins/self_info.py:20
msgid "Self Information"
msgstr "מידע עצמי"
msgstr ""
#: searx/plugins/self_info.py:21
msgid ""
@ -1121,7 +1120,7 @@ msgstr "הסתר מפה"
#: searx/templates/simple/result_templates/paper.html:5
msgid "Published date"
msgstr "תאריך פרסום"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:9
msgid "Journal"
@ -1129,7 +1128,7 @@ msgstr ""
#: searx/templates/simple/result_templates/paper.html:22
msgid "Editor"
msgstr "עורך"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:23
msgid "Publisher"
@ -1137,11 +1136,11 @@ msgstr ""
#: searx/templates/simple/result_templates/paper.html:24
msgid "Type"
msgstr "סוג"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:25
msgid "Tags"
msgstr "תגים"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:26
msgid "DOI"
@ -1484,3 +1483,4 @@ msgstr "הסתר וידאו"
#~ "href=\"https://he.wikipedia.org/wiki/Hypertext_Transfer_Protocol#.D7.A9.D7.99.D7.98.D7.95.D7.AA_.D7.91.D7.A7.D7.A9.D7.94\""
#~ " rel=\"external\">למידע נוסף אודות שיטות "
#~ "בקשה (request methods)</a>"

@ -12,22 +12,20 @@
# SecularSteve <fairfull.playing@gmail.com>, 2022.
# Sweder doc <swederdvl@gmail.com>, 2022.
# Peter Martin <weblate@pe7er.com>, 2022.
# Max Westen <max@maxwesten.nl>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-20 07:15+0000\n"
"Last-Translator: Max Westen <max@maxwesten.nl>\n"
"Language-Team: Dutch <https://weblate.bubu1.eu/projects/searxng/searxng/nl/>"
"\n"
"PO-Revision-Date: 2022-11-19 16:21+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language: nl\n"
"Language-Team: Dutch "
"<https://weblate.bubu1.eu/projects/searxng/searxng/nl/>\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 4.14.1\n"
"Generated-By: Babel 2.11.0\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -73,7 +71,7 @@ msgstr "videos"
#. CATEGORY_NAMES['IT']
#: searx/searxng.msg
msgid "it"
msgstr "IT"
msgstr "het"
#. CATEGORY_NAMES['NEWS']
#: searx/searxng.msg
@ -386,7 +384,7 @@ msgstr ""
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr "Tor controle plug-in"
msgstr "Tor proef plug-in"
#: searx/plugins/tor_check.py:28
msgid ""
@ -1512,3 +1510,4 @@ msgstr "verberg video"
#~ "href=\"http://nl.wikipedia.org/wiki/Hypertext_Transfer_Protocol"
#~ "#HTTP-requests\" rel=\"external\">lees meer over"
#~ " opvraagmethodes</a>"

@ -5,7 +5,7 @@
# Translators:
# Dickprince, 2017
# C. E., 2018
# Markus Heiser <markus.heiser@darmarit.de>, 2022, 2023.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Miguel Silva <miguelcabeca.dev@gmail.com>, 2022.
# Ricardo Simões <xmcorporation@gmail.com>, 2022.
# zaioti <zaioti@tuta.io>, 2022.
@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"PO-Revision-Date: 2022-12-30 07:14+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Portuguese <https://weblate.bubu1.eu/projects/searxng/searxng/"
"pt/>\n"
@ -40,7 +40,7 @@ msgstr "outro"
#. CATEGORY_NAMES['FILES']
#: searx/searxng.msg
msgid "files"
msgstr "arquivos"
msgstr "ficheiros"
#. CATEGORY_NAMES['GENERAL']
#: searx/searxng.msg
@ -125,7 +125,7 @@ msgstr "repositórios"
#. CATEGORY_GROUPS['SOFTWARE_WIKIS']
#: searx/searxng.msg
msgid "software wikis"
msgstr "wikis do software"
msgstr "wikis de software"
#. CATEGORY_GROUPS['WEB']
#: searx/searxng.msg
@ -326,7 +326,6 @@ msgstr "Deteção automatica da li"
#: searx/plugins/autodetect_search_language.py:80
msgid "Automatically detect the query search language and switch to it."
msgstr ""
"Detecte automaticamente o idioma de pesquisa consultado e mude para ele."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."

@ -17,22 +17,20 @@
# calb sepherus <calb.sepherus@protonmail.com>, 2022.
# Yan Lyra <yanlyra3@gmail.com>, 2022.
# zaioti <zaioti@tuta.io>, 2022.
# Spectro <spectro@keemail.me>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-20 07:15+0000\n"
"Last-Translator: Spectro <spectro@keemail.me>\n"
"Language-Team: Portuguese (Brazil) <https://weblate.bubu1.eu/projects/"
"searxng/searxng/pt_BR/>\n"
"PO-Revision-Date: 2022-11-28 13:11+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language: pt_BR\n"
"Language-Team: Portuguese (Brazil) "
"<https://weblate.bubu1.eu/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 4.14.1\n"
"Generated-By: Babel 2.11.0\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -330,12 +328,11 @@ msgstr "Noite"
#: searx/plugins/autodetect_search_language.py:79
msgid "Autodetect search language"
msgstr "Detecção automática de idioma de pesquisa"
msgstr ""
#: searx/plugins/autodetect_search_language.py:80
msgid "Automatically detect the query search language and switch to it."
msgstr ""
"Detecte automaticamente o idioma de pesquisa da consulta e mude para ele."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -1521,3 +1518,4 @@ msgstr "ocultar vídeo"
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
#~ " rel=\"external\">saiba mais sobre os "
#~ "métodos de solicitação</a>"

@ -7,14 +7,13 @@
# Markus Heiser <markus.heiser@darmarit.de>, 2022, 2023.
# Alexandre Flament <alex@al-f.net>, 2022.
# peterT1D <kozlovic.peter@gmail.com>, 2022.
# Nik Drešar <nik.dresar@gmail.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"Last-Translator: Nik Drešar <nik.dresar@gmail.com>\n"
"PO-Revision-Date: 2023-01-06 07:14+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Slovenian <https://weblate.bubu1.eu/projects/searxng/searxng/"
"sl/>\n"
"Language: sl\n"
@ -29,7 +28,7 @@ msgstr ""
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
#: searx/searxng.msg
msgid "others"
msgstr "Ostali"
msgstr "Drugi"
#. CONSTANT_NAMES['OTHER_CATEGORY']
#: searx/searxng.msg
@ -266,7 +265,7 @@ msgstr "{title} (neveljaven)"
#: searx/engines/pdbe.py:103
msgid "This entry has been superseded by"
msgstr "Ta vnos je bil nadomeščen z"
msgstr "Ta vnos je bil presezen"
#: searx/engines/qwant.py:219
msgid "Channel"
@ -277,8 +276,6 @@ msgid ""
"{numCitations} citations from the year {firstCitationVelocityYear} to "
"{lastCitationVelocityYear}"
msgstr ""
"{numCitations} navedb od leta {firstCitationVelocityYear} do "
"{lastCitationVelocityYear}"
#: searx/engines/tineye.py:40
msgid ""
@ -462,7 +459,7 @@ msgstr "Omogočeno z"
#: searx/templates/simple/base.html:64
msgid "a privacy-respecting, open metasearch engine"
msgstr "odprt metaiskalnik, ki spoštuje zasebnost"
msgstr ""
#: searx/templates/simple/base.html:65
msgid "Source code"
@ -529,37 +526,37 @@ msgstr "Če je to javna instanca, prosim specificirajte URL v poročilu o napaki
#: searx/templates/simple/new_issue.html:72
msgid "Submit a new issue on Github including the above information"
msgstr "Predloži novo težavo na Githubu, vključno z zgornjimi informacijami"
msgstr ""
#: searx/templates/simple/preferences.html:29
msgid "No HTTPS"
msgstr "Brez HTTPS"
msgstr ""
#: searx/templates/simple/messages/no_results.html:10
#: searx/templates/simple/preferences.html:31
#: searx/templates/simple/preferences.html:32
#: searx/templates/simple/results.html:49
msgid "View error logs and submit a bug report"
msgstr "Oglejte si dnevnike napak in pošljite poročilo o napakah"
msgstr ""
#: searx/templates/simple/preferences.html:53
#: searx/templates/simple/stats.html:64
msgid "Median"
msgstr "Mediana"
msgstr ""
#: searx/templates/simple/preferences.html:54
#: searx/templates/simple/stats.html:70
msgid "P80"
msgstr "P80"
msgstr ""
#: searx/templates/simple/preferences.html:55
#: searx/templates/simple/stats.html:76
msgid "P95"
msgstr "P95"
msgstr ""
#: searx/templates/simple/preferences.html:83
msgid "Failed checker test(s): "
msgstr "Neuspešno opravljen(i) preizkus(i) preverjanja: "
msgstr ""
#: searx/templates/simple/preferences.html:85
msgid "Errors:"
@ -625,7 +622,7 @@ msgstr "Filtriraj vsebino"
#: searx/templates/simple/preferences.html:157
msgid "Open Access DOI resolver"
msgstr "odprto dostopni DOI razreševalec"
msgstr ""
#: searx/templates/simple/preferences.html:167
msgid ""
@ -637,11 +634,11 @@ msgstr ""
#: searx/templates/simple/preferences.html:171
msgid "Engine tokens"
msgstr "Žetoni za iskalnik"
msgstr ""
#: searx/templates/simple/preferences.html:175
msgid "Access tokens for private engines"
msgstr "Žetoni dostopa za zasebne iskalnike"
msgstr ""
#: searx/templates/simple/preferences.html:179
msgid "User interface"
@ -661,19 +658,19 @@ msgstr "Tema"
#: searx/templates/simple/preferences.html:203
msgid "Change SearXNG layout"
msgstr "Spremenite postavitev SearXNG"
msgstr ""
#: searx/templates/simple/preferences.html:206
msgid "Theme style"
msgstr "Slog teme"
msgstr ""
#: searx/templates/simple/preferences.html:214
msgid "Choose auto to follow your browser settings"
msgstr "Če želite slediti nastavitvam brskalnika, izberite samodejno"
msgstr ""
#: searx/templates/simple/preferences.html:217
msgid "Center Alignment"
msgstr "Sredinska poravnava"
msgstr ""
#: searx/templates/simple/preferences.html:220
#: searx/templates/simple/preferences.html:232
@ -689,7 +686,7 @@ msgstr "Izklopljeno"
#: searx/templates/simple/preferences.html:224
msgid "Displays results in the center of the page (Oscar layout)."
msgstr "Prikaže rezultate na sredini strani (postavitev Oscar)."
msgstr ""
#: searx/templates/simple/preferences.html:229
msgid "Results on new tabs"
@ -713,7 +710,7 @@ msgstr "Zasebnost"
#: searx/templates/simple/preferences.html:257
msgid "HTTP Method"
msgstr "metoda HTTP"
msgstr ""
#: searx/templates/simple/preferences.html:264
msgid ""
@ -721,9 +718,6 @@ msgid ""
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
" rel=\"external\">learn more about request methods</a>"
msgstr ""
"Spremenite način oddaje obrazcev, <a href=\"http://en.wikipedia.org/wiki/"
"Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">izvedite več "
"o metodah zahtevka</a>"
#: searx/templates/simple/preferences.html:269
msgid "Image proxy"
@ -741,19 +735,17 @@ msgstr "Onemogočeno"
#: searx/templates/simple/preferences.html:276
msgid "Proxying image results through SearXNG"
msgstr "Proxy rezultatov slik prek SearXNG"
msgstr ""
#: searx/templates/simple/preferences.html:281
msgid "Query in the page's title"
msgstr "Poizvedba v naslovu strani"
msgstr ""
#: searx/templates/simple/preferences.html:288
msgid ""
"When enabled, the result page's title contains your query. Your browser "
"can record this title"
msgstr ""
"Ko je omogočeno, naslov strani z rezultati vsebuje vašo poizvedbo. Vaš "
"brskalnik lahko posname ta naslov"
#: searx/templates/simple/preferences.html:294
msgid "Engines"
@ -768,8 +760,6 @@ msgid ""
"This tab does not show up for search results, but you can search the "
"engines listed here via bangs."
msgstr ""
"Ta zavihek se ne prikaže pri rezultatih iskanja, lahko pa iščete iskalnike, "
"navedene tukaj, prek bangs."
#: searx/templates/simple/preferences.html:307
#: searx/templates/simple/preferences.html:358
@ -810,7 +800,7 @@ msgstr "Zanesljivost"
#: searx/templates/simple/preferences.html:353
msgid "Special Queries"
msgstr "Posebne poizvedbe"
msgstr ""
#: searx/templates/simple/preferences.html:359
msgid "Keywords"
@ -830,11 +820,11 @@ msgstr "Primeri"
#: searx/templates/simple/preferences.html:365
msgid "This is the list of SearXNG's instant answering modules."
msgstr "To je seznam modulov za takojšnje javljanje SearXNG."
msgstr ""
#: searx/templates/simple/preferences.html:376
msgid "This is the list of plugins."
msgstr "To je seznam vtičnikov."
msgstr "To je seznam vtičnikov"
#: searx/templates/simple/preferences.html:393
msgid "Cookies"
@ -845,12 +835,10 @@ msgid ""
"This is the list of cookies and their values SearXNG is storing on your "
"computer."
msgstr ""
"To je seznam piškotkov in njihovih vrednosti, ki jih SearXNG shranjuje v vaš "
"računalnik."
#: searx/templates/simple/preferences.html:396
msgid "With that list, you can assess SearXNG transparency."
msgstr "S tem seznamom lahko ocenite transparentnost SearXNG."
msgstr ""
#: searx/templates/simple/preferences.html:401
msgid "Cookie name"
@ -874,15 +862,13 @@ msgstr ""
#: searx/templates/simple/preferences.html:419
msgid "URL to restore your preferences in another browser"
msgstr "URL za obnovitev vaših nastavitev v drugem brskalniku"
msgstr ""
#: searx/templates/simple/preferences.html:423
msgid ""
"Specifying custom settings in the preferences URL can be used to sync "
"preferences across devices."
msgstr ""
"Določanje nastavitev po meri v URL-ju z nastavitvami se lahko uporabi za "
"sinhronizacijo nastavitev med napravami."
#: searx/templates/simple/preferences.html:428
msgid ""
@ -945,7 +931,7 @@ msgstr "Poskusite iskati:"
#: searx/templates/simple/results.html:152
msgid "Back to top"
msgstr "Nazaj na vrh"
msgstr ""
#: searx/templates/simple/results.html:170
msgid "Previous page"
@ -957,7 +943,7 @@ msgstr "Naslednja stran"
#: searx/templates/simple/search.html:3
msgid "Display the front page"
msgstr "Prikaži naslovno stran"
msgstr ""
#: searx/templates/simple/search.html:9
#: searx/templates/simple/simple_search.html:5
@ -967,7 +953,7 @@ msgstr "Poišči..."
#: searx/templates/simple/search.html:10
#: searx/templates/simple/simple_search.html:6
msgid "clear"
msgstr "počisti"
msgstr ""
#: searx/templates/simple/search.html:11
#: searx/templates/simple/simple_search.html:7
@ -984,19 +970,19 @@ msgstr "Točke"
#: searx/templates/simple/stats.html:27
msgid "Result count"
msgstr "Število rezultatov"
msgstr ""
#: searx/templates/simple/stats.html:59
msgid "Total"
msgstr "Skupaj"
msgstr ""
#: searx/templates/simple/stats.html:60
msgid "HTTP"
msgstr "HTTP"
msgstr ""
#: searx/templates/simple/stats.html:61
msgid "Processing"
msgstr "obdelava"
msgstr ""
#: searx/templates/simple/stats.html:99
msgid "Warnings"
@ -1020,7 +1006,7 @@ msgstr "Odstotek"
#: searx/templates/simple/stats.html:111
msgid "Parameter"
msgstr "Parameter"
msgstr ""
#: searx/templates/simple/stats.html:119
msgid "Filename"
@ -1032,15 +1018,15 @@ msgstr "Funkcija"
#: searx/templates/simple/stats.html:121
msgid "Code"
msgstr "Koda"
msgstr ""
#: searx/templates/simple/stats.html:128
msgid "Checker"
msgstr "Pregledovalnik"
msgstr ""
#: searx/templates/simple/stats.html:131
msgid "Failed test"
msgstr "Neuspešen preizkus"
msgstr ""
#: searx/templates/simple/stats.html:132
msgid "Comment(s)"
@ -1109,7 +1095,7 @@ msgstr "Ta stran ni posredovala nobenega opisa."
#: searx/templates/simple/result_templates/images.html:19
msgid "Format"
msgstr "Format"
msgstr ""
#: searx/templates/simple/result_templates/images.html:21
msgid "Engine"
@ -1141,19 +1127,19 @@ msgstr "Revija"
#: searx/templates/simple/result_templates/paper.html:22
msgid "Editor"
msgstr "Urejevalnik"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:23
msgid "Publisher"
msgstr "Založnik"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:24
msgid "Type"
msgstr "Vrsta"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:25
msgid "Tags"
msgstr "Oznake"
msgstr ""
#: searx/templates/simple/result_templates/paper.html:26
msgid "DOI"

@ -6,25 +6,24 @@
# pvhn4 <pvhn4@protonmail.com>, 2017
# zubr139, 2016-2017
# Andrij Mizyk <andmizyk@gmail.com>, 2022.
# Markus Heiser <markus.heiser@darmarit.de>, 2022, 2023.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-12-12 07:18+0000\n"
"PO-Revision-Date: 2023-01-13 07:14+0000\n"
"PO-Revision-Date: 2022-11-25 07:16+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Ukrainian <https://weblate.bubu1.eu/projects/searxng/searxng/"
"uk/>\n"
"Language: uk\n"
"Language-Team: Ukrainian "
"<https://weblate.bubu1.eu/projects/searxng/searxng/uk/>\n"
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 !="
" 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n "
"% 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9)"
" || (n % 100 >=11 && n % 100 <=14 )) ? 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 % 10 == 1 && n % 100 != 11 "
"? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > "
"14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % "
"100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
"X-Generator: Weblate 4.14.1\n"
"Generated-By: Babel 2.11.0\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -278,8 +277,6 @@ msgid ""
"{numCitations} citations from the year {firstCitationVelocityYear} to "
"{lastCitationVelocityYear}"
msgstr ""
"{numCitations} цитувань з {firstCitationVelocityYear} по "
"{lastCitationVelocityYear} рік"
#: searx/engines/tineye.py:40
msgid ""
@ -287,9 +284,6 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"Не вдалось зчитати зображення за вказаним URL. Можливо, тому що формат "
"даного зображення не підтримується. TinEye підтримує зображення у форматах "
"JPEG, PNG, GIF, BMP, TIFF та WebP."
#: searx/engines/tineye.py:46
msgid ""
@ -305,7 +299,7 @@ msgstr "Зображення не можливо завантажити."
#: searx/engines/wttr.py:101
msgid "Morning"
msgstr "Ранок"
msgstr ""
#: searx/engines/wttr.py:101
msgid "Noon"
@ -1478,3 +1472,4 @@ msgstr "приховати відео"
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
#~ " rel=\"external\">детальніше про методи "
#~ "запитів</a>"

@ -59,34 +59,27 @@ def get_git_url_and_branch():
def get_git_version():
git_commit_date_hash = subprocess_run(r"git show -s --date='format:%-Y.%-m.%-d' --format='%cd+%h'")
git_commit_date_hash = subprocess_run(r"git show -s --date='format:%Y.%m.%d' --format='%cd-%h'")
tag_version = git_version = git_commit_date_hash
# add "+dirty" suffix if there are uncommited changes except searx/settings.yml
# add "-dirty" suffix if there are uncommited changes except searx/settings.yml
try:
subprocess_run("git diff --quiet -- . ':!searx/settings.yml' ':!utils/brand.env'")
except subprocess.CalledProcessError as e:
if e.returncode == 1:
git_version += "+dirty"
git_version += "-dirty"
else:
logger.warning('"%s" returns an unexpected return code %i', e.returncode, e.cmd)
docker_tag = git_version.replace("+", "-")
return git_version, tag_version, docker_tag
return git_version, tag_version
try:
vf = importlib.import_module('searx.version_frozen')
VERSION_STRING, VERSION_TAG, DOCKER_TAG, GIT_URL, GIT_BRANCH = (
vf.VERSION_STRING,
vf.VERSION_TAG,
vf.DOCKER_TAG,
vf.GIT_URL,
vf.GIT_BRANCH,
)
VERSION_STRING, VERSION_TAG, GIT_URL, GIT_BRANCH = vf.VERSION_STRING, vf.VERSION_TAG, vf.GIT_URL, vf.GIT_BRANCH
except ImportError:
try:
try:
VERSION_STRING, VERSION_TAG, DOCKER_TAG = get_git_version()
VERSION_STRING, VERSION_TAG = get_git_version()
except subprocess.CalledProcessError as ex:
logger.error("Error while getting the version: %s", ex.stderr)
try:
@ -109,7 +102,6 @@ if __name__ == "__main__":
VERSION_STRING = "{VERSION_STRING}"
VERSION_TAG = "{VERSION_TAG}"
DOCKER_TAG = "{DOCKER_TAG}"
GIT_URL = "{GIT_URL}"
GIT_BRANCH = "{GIT_BRANCH}"
"""
@ -122,7 +114,6 @@ GIT_BRANCH = "{GIT_BRANCH}"
shell_code = f"""
VERSION_STRING="{VERSION_STRING}"
VERSION_TAG="{VERSION_TAG}"
DOCKER_TAG="{DOCKER_TAG}"
GIT_URL="{GIT_URL}"
GIT_BRANCH="{GIT_BRANCH}"
"""

@ -113,68 +113,31 @@ def prettify_url(url, max_length=74):
return url
def contains_cjko(s: str) -> bool:
"""This function check whether or not a string contains Chinese, Japanese,
or Korean characters. It employs regex and uses the u escape sequence to
match any character in a set of Unicode ranges.
Args:
s (str): string to be checked.
Returns:
bool: True if the input s contains the characters and False otherwise.
"""
unicode_ranges = (
'\u4e00-\u9fff' # Chinese characters
'\u3040-\u309f' # Japanese hiragana
'\u30a0-\u30ff' # Japanese katakana
'\u4e00-\u9faf' # Japanese kanji
'\uac00-\ud7af' # Korean hangul syllables
'\u1100-\u11ff' # Korean hangul jamo
)
return bool(re.search(fr'[{unicode_ranges}]', s))
def regex_highlight_cjk(word: str) -> str:
"""Generate the regex pattern to match for a given word according
to whether or not the word contains CJK characters or not.
If the word is and/or contains CJK character, the regex pattern
will match standalone word by taking into account the presence
of whitespace before and after it; if not, it will match any presence
of the word throughout the text, ignoring the whitespace.
Args:
word (str): the word to be matched with regex pattern.
Returns:
str: the regex pattern for the word.
"""
rword = re.escape(word)
if contains_cjko(rword):
return fr'({rword})'
else:
return fr'\b({rword})(?!\w)'
def highlight_content(content, query):
if not content:
return None
# ignoring html contents
# TODO better html content detection
if content.find('<') != -1:
return content
querysplit = query.split()
queries = []
for qs in querysplit:
qs = qs.replace("'", "").replace('"', '').replace(" ", "")
if len(qs) > 0:
queries.extend(re.findall(regex_highlight_cjk(qs), content, flags=re.I | re.U))
if len(queries) > 0:
for q in set(queries):
content = re.sub(regex_highlight_cjk(q), f'<span class="highlight">{q}</span>', content)
if content.lower().find(query.lower()) > -1:
query_regex = '({0})'.format(re.escape(query))
content = re.sub(query_regex, '<span class="highlight">\\1</span>', content, flags=re.I | re.U)
else:
regex_parts = []
for chunk in query.split():
chunk = chunk.replace('"', '')
if len(chunk) == 0:
continue
elif len(chunk) == 1:
regex_parts.append('\\W+{0}\\W+'.format(re.escape(chunk)))
else:
regex_parts.append('{0}'.format(re.escape(chunk)))
query_regex = '({0})'.format('|'.join(regex_parts))
content = re.sub(query_regex, '<span class="highlight">\\1</span>', content, flags=re.I | re.U)
return content

@ -1,41 +0,0 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
from tests import SearxTestCase
import searx.exceptions
from searx import get_setting
class TestExceptions(SearxTestCase):
def test_default_suspend_time(self):
with self.assertRaises(searx.exceptions.SearxEngineAccessDeniedException) as e:
raise searx.exceptions.SearxEngineAccessDeniedException()
self.assertEqual(
e.exception.suspended_time,
get_setting(searx.exceptions.SearxEngineAccessDeniedException.SUSPEND_TIME_SETTING),
)
with self.assertRaises(searx.exceptions.SearxEngineCaptchaException) as e:
raise searx.exceptions.SearxEngineCaptchaException()
self.assertEqual(
e.exception.suspended_time, get_setting(searx.exceptions.SearxEngineCaptchaException.SUSPEND_TIME_SETTING)
)
with self.assertRaises(searx.exceptions.SearxEngineTooManyRequestsException) as e:
raise searx.exceptions.SearxEngineTooManyRequestsException()
self.assertEqual(
e.exception.suspended_time,
get_setting(searx.exceptions.SearxEngineTooManyRequestsException.SUSPEND_TIME_SETTING),
)
def test_custom_suspend_time(self):
with self.assertRaises(searx.exceptions.SearxEngineAccessDeniedException) as e:
raise searx.exceptions.SearxEngineAccessDeniedException(suspended_time=1337)
self.assertEqual(e.exception.suspended_time, 1337)
with self.assertRaises(searx.exceptions.SearxEngineCaptchaException) as e:
raise searx.exceptions.SearxEngineCaptchaException(suspended_time=1409)
self.assertEqual(e.exception.suspended_time, 1409)
with self.assertRaises(searx.exceptions.SearxEngineTooManyRequestsException) as e:
raise searx.exceptions.SearxEngineTooManyRequestsException(suspended_time=1543)
self.assertEqual(e.exception.suspended_time, 1543)

@ -28,33 +28,32 @@ class TestWebUtils(SearxTestCase):
content = 'a'
query = 'test'
self.assertEqual(webutils.highlight_content(content, query), 'a')
self.assertEqual(webutils.highlight_content(content, query), content)
query = 'a test'
self.assertEqual(webutils.highlight_content(content, query), '<span class="highlight">a</span>')
self.assertEqual(webutils.highlight_content(content, query), content)
data = (
('" test "', 'a test string', 'a <span class="highlight">test</span> string'),
('"a"', 'this is a test string', 'this is <span class="highlight">a</span> test string'),
('"a"', 'this is a test string', 'this is<span class="highlight"> a </span>test string'),
(
'a test',
'this is a test string that matches entire query',
'this is <span class="highlight">a</span> <span class="highlight">test</span> string that matches entire query',
'this is <span class="highlight">a test</span> string that matches entire query',
),
(
'this a test',
'this is a string to test.',
(
'<span class="highlight">this</span> is <span class="highlight">a</span> string to <span class="highlight">test</span>.'
'<span class="highlight">this</span> is<span class="highlight"> a </span>'
'string to <span class="highlight">test</span>.'
),
),
(
'match this "exact phrase"',
'this string contains the exact phrase we want to match',
''.join(
[
'<span class="highlight">this</span> string contains the <span class="highlight">exact</span> ',
'<span class="highlight">phrase</span> we want to <span class="highlight">match</span>',
]
(
'<span class="highlight">this</span> string contains the <span class="highlight">exact</span>'
' <span class="highlight">phrase</span> we want to <span class="highlight">match</span>'
),
),
)

Loading…
Cancel
Save