mirror of https://github.com/searxng/searxng.git
Merge branch 'master' into engines-with-token
* master: (92 commits) [pylint] engines/currency_convert.py Update searx.data - update_firefox_version.py Update searx.data - update_ahmia_blacklist.py Update searx.data - update_currencies.py Update searx.data - update_wikidata_units.py [build] /static [simple] improve margin of #linkto_preferences [fix] engines description - currency_convert.py [simple] add aria-label to preferences link [simple] link preferences on /about and /stats [mod] tineye engine: minor changes [fix] 1x engine [build] /static [simple] introduce page_with_header.html template [mod] tineye engine: set engine_type to 'online_url_search' [enh] implement a OnlineUrlSearchProcessor Fix setup.py help folder [build] /static [fix] simple theme: /preferences: cookies table is LTR [mod] remove deprecate code ...
This commit is contained in:
commit
018abdcd80
|
@ -32,6 +32,10 @@
|
||||||
;; Jedi, flycheck & other python stuff should use the 'python-shell-interpreter'
|
;; Jedi, flycheck & other python stuff should use the 'python-shell-interpreter'
|
||||||
;; from the local py3 environment.
|
;; from the local py3 environment.
|
||||||
;;
|
;;
|
||||||
|
;; For pyright support you need to install::
|
||||||
|
;;
|
||||||
|
;; M-x package-install lsp-pyright
|
||||||
|
;;
|
||||||
;; Other useful jedi stuff you might add to your ~/.emacs::
|
;; Other useful jedi stuff you might add to your ~/.emacs::
|
||||||
;;
|
;;
|
||||||
;; (global-set-key [f6] 'flycheck-mode)
|
;; (global-set-key [f6] 'flycheck-mode)
|
||||||
|
@ -99,12 +103,19 @@
|
||||||
;; use nodejs from the (local) NVM environment (see nvm-dir)
|
;; use nodejs from the (local) NVM environment (see nvm-dir)
|
||||||
(nvm-use-for-buffer)
|
(nvm-use-for-buffer)
|
||||||
(setq-local js-indent-level 2)
|
(setq-local js-indent-level 2)
|
||||||
|
;; flycheck should use the eslint checker from developer tools
|
||||||
|
(setq-local flycheck-javascript-eslint-executable
|
||||||
|
(expand-file-name "node_modules/.bin/eslint" prj-root))
|
||||||
|
|
||||||
(flycheck-mode)
|
(flycheck-mode)
|
||||||
))))
|
))))
|
||||||
|
|
||||||
(python-mode
|
(python-mode
|
||||||
. ((eval . (progn
|
. ((eval . (progn
|
||||||
|
;; use nodejs from the (local) NVM environment (see nvm-dir)
|
||||||
|
(nvm-use-for-buffer)
|
||||||
|
(if (featurep 'lsp-pyright)
|
||||||
|
(lsp))
|
||||||
(setq-local python-environment-virtualenv
|
(setq-local python-environment-virtualenv
|
||||||
(list (expand-file-name "bin/virtualenv" python-shell-virtualenv-root)
|
(list (expand-file-name "bin/virtualenv" python-shell-virtualenv-root)
|
||||||
;;"--system-site-packages"
|
;;"--system-site-packages"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# to sync with .dockerignore
|
# to sync with .dockerignore & pyrightconfig.json
|
||||||
|
|
||||||
*.pyc
|
*.pyc
|
||||||
*/*.pyc
|
*/*.pyc
|
||||||
|
@ -16,3 +16,6 @@ dist/
|
||||||
local/
|
local/
|
||||||
gh-pages/
|
gh-pages/
|
||||||
*.egg-info/
|
*.egg-info/
|
||||||
|
|
||||||
|
/package-lock.json
|
||||||
|
/node_modules/
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
# -*- coding: utf-8; mode: conf-unix -*-
|
|
||||||
#
|
|
||||||
# Developement tools pre-installed in NVM's node installation [1]
|
|
||||||
#
|
|
||||||
# [1] https://github.com/nvm-sh/nvm#default-global-packages-from-file-while-installing
|
|
||||||
|
|
||||||
eslint
|
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -50,8 +50,8 @@ search.checker.%: install
|
||||||
$(Q)./manage pyenv.cmd searx-checker -v "$(subst _, ,$(patsubst search.checker.%,%,$@))"
|
$(Q)./manage pyenv.cmd searx-checker -v "$(subst _, ,$(patsubst search.checker.%,%,$@))"
|
||||||
|
|
||||||
PHONY += test ci.test test.shell
|
PHONY += test ci.test test.shell
|
||||||
ci.test: test.yamllint test.black test.pylint test.unit test.robot
|
ci.test: test.yamllint test.black test.pyright test.pylint test.unit test.robot test.rst
|
||||||
test: test.yamllint test.black test.pylint test.unit test.robot test.shell
|
test: test.yamllint test.black test.pyright test.pylint test.unit test.robot test.rst test.shell
|
||||||
test.shell:
|
test.shell:
|
||||||
$(Q)shellcheck -x -s dash \
|
$(Q)shellcheck -x -s dash \
|
||||||
dockerfiles/docker-entrypoint.sh
|
dockerfiles/docker-entrypoint.sh
|
||||||
|
@ -86,7 +86,7 @@ MANAGE += py.build py.clean
|
||||||
MANAGE += pyenv pyenv.install pyenv.uninstall
|
MANAGE += pyenv pyenv.install pyenv.uninstall
|
||||||
MANAGE += pypi.upload pypi.upload.test
|
MANAGE += pypi.upload pypi.upload.test
|
||||||
MANAGE += format.python
|
MANAGE += format.python
|
||||||
MANAGE += test.yamllint test.pylint test.black test.unit test.coverage test.robot test.clean
|
MANAGE += test.yamllint test.pylint test.pyright test.black test.unit test.coverage test.robot test.rst test.clean
|
||||||
MANAGE += themes.all themes.oscar themes.simple themes.simple.test pygments.less
|
MANAGE += themes.all themes.oscar themes.simple themes.simple.test pygments.less
|
||||||
MANAGE += static.build.commit static.build.drop static.build.restore
|
MANAGE += static.build.commit static.build.drop static.build.restore
|
||||||
MANAGE += nvm.install nvm.clean nvm.status nvm.nodejs
|
MANAGE += nvm.install nvm.clean nvm.status nvm.nodejs
|
||||||
|
|
91
README.rst
91
README.rst
|
@ -1,11 +1,21 @@
|
||||||
.. SPDX-License-Identifier: AGPL-3.0-or-later
|
.. SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
.. figure:: https://raw.githubusercontent.com/searxng/searxng/master/src/brand/searxng.svg
|
.. figure:: https://raw.githubusercontent.com/searxng/searxng/master/src/brand/searxng.svg
|
||||||
:target: https://docs.searxng.org/
|
:target: https://docs.searxng.org/
|
||||||
:alt: SearXNG
|
:alt: SearXNG
|
||||||
:width: 100%
|
:width: 100%
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
Privacy-respecting, hackable `metasearch engine`_
|
||||||
|
|
||||||
|
If you are looking for running instances, ready to use, then visit searx.space_.
|
||||||
|
Otherwise jump to the user_, admin_ and developer_ handbooks you will find on
|
||||||
|
our homepage_.
|
||||||
|
|
||||||
|SearXNG install|
|
|SearXNG install|
|
||||||
|SearXNG homepage|
|
|SearXNG homepage|
|
||||||
|SearXNG wiki|
|
|SearXNG wiki|
|
||||||
|
@ -15,16 +25,11 @@
|
||||||
|weblate|
|
|weblate|
|
||||||
|SearXNG logo|
|
|SearXNG logo|
|
||||||
|
|
||||||
Privacy-respecting, hackable `metasearch engine`_
|
----
|
||||||
|
|
||||||
If you are looking for running instances, ready to use, then visit searx.space_.
|
|
||||||
|
|
||||||
Otherwise jump to the user_, admin_ and developer_ handbooks you will find on
|
|
||||||
our homepage_.
|
|
||||||
|
|
||||||
.. _searx.space: https://searx.space
|
.. _searx.space: https://searx.space
|
||||||
.. _user: https://docs.searxng.org/user
|
.. _user: https://docs.searxng.org/user
|
||||||
.. _admin: https://docs.searxng.org/user/admin
|
.. _admin: https://docs.searxng.org/admin
|
||||||
.. _developer: https://docs.searxng.org/dev
|
.. _developer: https://docs.searxng.org/dev
|
||||||
.. _homepage: https://docs.searxng.org/
|
.. _homepage: https://docs.searxng.org/
|
||||||
.. _metasearch engine: https://en.wikipedia.org/wiki/Metasearch_engine
|
.. _metasearch engine: https://en.wikipedia.org/wiki/Metasearch_engine
|
||||||
|
@ -58,26 +63,76 @@ our homepage_.
|
||||||
:target: https://weblate.bubu1.eu/projects/searxng/
|
:target: https://weblate.bubu1.eu/projects/searxng/
|
||||||
|
|
||||||
|
|
||||||
SearXNG is a fork of `searx`_:
|
Contact
|
||||||
|
=======
|
||||||
|
|
||||||
* `the differences with searx <https://github.com/searxng/searxng/issues/46>`_
|
Come join us if you have questions or just want to chat about SearXNG.
|
||||||
* `exhaustive changelog <https://github.com/searxng/searxng/wiki/Changes-from-version-1.0.0>`_
|
|
||||||
|
Matrix
|
||||||
|
`#searxng:matrix.org <https://matrix.to/#/#searxng:matrix.org>`_
|
||||||
|
|
||||||
|
IRC
|
||||||
|
`#searxng on libera.chat <https://web.libera.chat/?channel=#searxng>`_
|
||||||
|
which is bridged to Matrix.
|
||||||
|
|
||||||
|
|
||||||
|
Differences to searx
|
||||||
|
====================
|
||||||
|
|
||||||
|
SearXNG is a fork of `searx`_. Here are some of the changes:
|
||||||
|
|
||||||
.. _searx: https://github.com/searx/searx
|
.. _searx: https://github.com/searx/searx
|
||||||
|
|
||||||
|
|
||||||
Contact
|
User experience
|
||||||
"""""""
|
---------------
|
||||||
|
|
||||||
Matrix: `#searxng:matrix.org <https://matrix.to/#/#searxng:matrix.org>`_
|
- Huge update of the simple theme:
|
||||||
|
|
||||||
|
* usable on desktop, tablet and mobile
|
||||||
|
* light and dark versions (you can choose in the preferences)
|
||||||
|
* support right-to-left languages
|
||||||
|
|
||||||
|
- the translations are up to date, you can contribute on `Weblate`_
|
||||||
|
- the preferences page has been updated:
|
||||||
|
|
||||||
|
* you can see which engines are reliable or not
|
||||||
|
* engines are grouped inside each tab
|
||||||
|
* each engine has a description
|
||||||
|
|
||||||
|
- it is easier to report a bug of an engine
|
||||||
|
- but you can also disable the recording of the metrics on the server
|
||||||
|
|
||||||
|
|
||||||
|
Setup
|
||||||
|
-----
|
||||||
|
|
||||||
|
- the Docker image is now also built for ARM64 and ARM/v7 architectures
|
||||||
|
- you don't need `Morty`_ to proxy the images even on a public instance
|
||||||
|
- on the way to embed `Filtron`_ into SearXNG
|
||||||
|
- up to date installation scripts
|
||||||
|
|
||||||
|
|
||||||
|
Contributing is easier
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- readable debug log
|
||||||
|
- contributions to the themes are made easier, check out our `Development
|
||||||
|
Quickstart`_ guide
|
||||||
|
- a lot of code cleanup and bug fixes
|
||||||
|
- the dependencies are up to date
|
||||||
|
|
||||||
|
.. _Morty: https://github.com/asciimoo/morty
|
||||||
|
.. _Filtron: https://github.com/searxng/filtron
|
||||||
|
.. _Weblate: https://weblate.bubu1.eu/projects/searxng/searxng/
|
||||||
|
.. _Development Quickstart: https://docs.searxng.org/dev/quickstart.html
|
||||||
|
|
||||||
IRC: `#searxng on libera.chat <https://web.libera.chat/?channel=#searxng>`_ which is bridged to Matrix.
|
|
||||||
|
|
||||||
|
|
||||||
Translations
|
Translations
|
||||||
""""""""""""
|
============
|
||||||
|
|
||||||
We need translators, suggestions are welcome at https://weblate.bubu1.eu/projects/searxng/searxng/
|
We need translators, suggestions are welcome at
|
||||||
|
https://weblate.bubu1.eu/projects/searxng/searxng/
|
||||||
|
|
||||||
.. figure:: https://weblate.bubu1.eu/widgets/searxng/-/multi-auto.svg
|
.. figure:: https://weblate.bubu1.eu/widgets/searxng/-/multi-auto.svg
|
||||||
:target: https://weblate.bubu1.eu/projects/searxng/
|
:target: https://weblate.bubu1.eu/projects/searxng/
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Security Policy
|
||||||
|
|
||||||
|
We love responsible reports of (potential) security issues in SearXNG.
|
||||||
|
|
||||||
|
You can contact us at security@searxng.org.
|
||||||
|
|
||||||
|
Be sure to provide as much information as possible and if found
|
||||||
|
also reproduction steps of the identified vulnerability. Also
|
||||||
|
add the specific URL of the project as well as code you found
|
||||||
|
the issue in to your report.
|
|
@ -136,12 +136,10 @@ find an example configuration below:
|
||||||
MySQL
|
MySQL
|
||||||
-----
|
-----
|
||||||
|
|
||||||
.. _mysql-connector-python: https://pypi.org/project/mysql-connector-python
|
|
||||||
|
|
||||||
.. sidebar:: info
|
.. sidebar:: info
|
||||||
|
|
||||||
- :origin:`mysql_server.py <searx/engines/mysql_server.py>`
|
- :origin:`mysql_server.py <searx/engines/mysql_server.py>`
|
||||||
- ``pip install`` mysql-connector-python_
|
- ``pip install`` :pypi:`mysql-connector-python <mysql-connector-python>`
|
||||||
|
|
||||||
MySQL is said to be the most popular open source database. Before enabling MySQL
|
MySQL is said to be the most popular open source database. Before enabling MySQL
|
||||||
engine, you must install the package ``mysql-connector-python``.
|
engine, you must install the package ``mysql-connector-python``.
|
||||||
|
|
|
@ -12,6 +12,7 @@ Administrator documentation
|
||||||
installation-nginx
|
installation-nginx
|
||||||
installation-apache
|
installation-apache
|
||||||
installation-docker
|
installation-docker
|
||||||
|
installation-switch2ng
|
||||||
update-searxng
|
update-searxng
|
||||||
engines/index
|
engines/index
|
||||||
api
|
api
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
.. _installation switch2ng:
|
||||||
|
|
||||||
|
============================
|
||||||
|
Switch from searx to SearXNG
|
||||||
|
============================
|
||||||
|
|
||||||
|
.. sidebar:: info
|
||||||
|
|
||||||
|
- :pull:`456`
|
||||||
|
- :pull:`A comment about rolling release <446#issuecomment-954730358>`
|
||||||
|
|
||||||
|
.. contents:: Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
:backlinks: entry
|
||||||
|
|
||||||
|
If you have a searx installation on your sever and want to switch to SearXNG,
|
||||||
|
you need to uninstall searx first. If you have an old searx docker installation
|
||||||
|
replace your docker image / see :ref:`installation docker`.
|
||||||
|
|
||||||
|
If your searx instance was installed *"Step by step"* or by the *"Installation
|
||||||
|
scripts"*, you need to undo the installation procedure completely. If you have
|
||||||
|
morty & filtron installed, it is recommended to uninstall these services also.
|
||||||
|
In case of scripts, to uninstall use the scripts from the origin you installed
|
||||||
|
searx from.
|
||||||
|
|
||||||
|
If you have removed the old searx installation, clone from SearXNG and and start
|
||||||
|
with your installation procedure (e.g. :ref:`installation scripts`):
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
$ cd ~/Downloads
|
||||||
|
$ git clone https://github.com/searxng/searxng.git searxng
|
||||||
|
$ cd searxng
|
||||||
|
$ ...
|
||||||
|
|
||||||
|
``.config.sh``
|
||||||
|
==============
|
||||||
|
|
||||||
|
Please take into account; SearXNG has normalized ``.config.sh`` with
|
||||||
|
``settings.yml`` and some of the environment settings has been removed from or
|
||||||
|
renamed in the ``.config.sh``:
|
||||||
|
|
||||||
|
- :patch:`[mod] normalize .config.sh with settings.yml <f61c918d>`
|
||||||
|
- :patch:`[fix] ./utils/filtron.sh - FILTRON_TARGET from YAML settings <7196a9b5>`
|
||||||
|
- :patch:`SearXNG: SEARXNG_SETTINGS_PATH <253b8503>`
|
||||||
|
|
||||||
|
|
||||||
|
Check after Installation
|
||||||
|
========================
|
||||||
|
|
||||||
|
Once you have done your installation, you can run a SearXNG *check* procedure,
|
||||||
|
to see if there are some left overs. In this example there exists a *old*
|
||||||
|
``/etc/searx/settings.yml``::
|
||||||
|
|
||||||
|
$ sudo -H ./utils/searx.sh install check
|
||||||
|
|
||||||
|
============================
|
||||||
|
SearXNG (check installation)
|
||||||
|
============================
|
||||||
|
ERROR: settings.yml in /etc/searx/ is deprecated, move file to folder /etc/searxng/
|
||||||
|
INFO: SearXNG instance already installed at: /usr/local/searx/searx-src
|
||||||
|
...
|
||||||
|
INFO: Service account searx exists.
|
||||||
|
INFO: ~searx: python environment is available.
|
||||||
|
INFO: ~searx: SearXNG software is installed.
|
||||||
|
INFO: uWSGI app searxng.ini is enabled.
|
||||||
|
INFO searx : merge the default settings ( /usr/local/searx/searx-src/searx/settings.yml ) and the user setttings ( /etc/searxng/settings.yml )
|
||||||
|
INFO searx : max_request_timeout=None
|
||||||
|
|
||||||
|
|
||||||
|
To *check* the filtron & morty installations, use similar commands::
|
||||||
|
|
||||||
|
$ sudo -H /utils/filtron.sh install check
|
||||||
|
$ sudo -H /utils/morty.sh install check
|
|
@ -4,6 +4,10 @@
|
||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
|
.. sidebar:: info
|
||||||
|
|
||||||
|
:ref:`installation switch2ng`
|
||||||
|
|
||||||
*You're spoilt for choice*, choose your preferred method of installation.
|
*You're spoilt for choice*, choose your preferred method of installation.
|
||||||
|
|
||||||
- :ref:`installation docker`
|
- :ref:`installation docker`
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
import sys, os
|
import sys, os
|
||||||
from pallets_sphinx_themes import ProjectLink
|
from pallets_sphinx_themes import ProjectLink
|
||||||
from flask import Flask
|
|
||||||
|
|
||||||
from searx import get_setting
|
from searx import get_setting
|
||||||
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
|
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
|
||||||
|
@ -42,12 +41,12 @@ import searx.engines
|
||||||
import searx.plugins
|
import searx.plugins
|
||||||
import searx.webutils
|
import searx.webutils
|
||||||
|
|
||||||
# bypass a creepy check of the secret_key in searx.webapp
|
# import searx.webapp is needed to init the engines & plugins, to init a
|
||||||
|
# (empty) secret_key is needed.
|
||||||
searx.settings['server']['secret_key'] = ''
|
searx.settings['server']['secret_key'] = ''
|
||||||
from searx.webapp import application
|
import searx.webapp
|
||||||
|
|
||||||
searx.engines.load_engines(searx.settings['engines'])
|
searx.engines.load_engines(searx.settings['engines'])
|
||||||
searx.plugins.initialize(application)
|
|
||||||
|
|
||||||
jinja_contexts = {
|
jinja_contexts = {
|
||||||
'searx': {
|
'searx': {
|
||||||
|
|
|
@ -238,10 +238,10 @@ and ``test.robot``. You can run tests selective, e.g.::
|
||||||
...
|
...
|
||||||
TEST test.sh OK
|
TEST test.sh OK
|
||||||
|
|
||||||
.. _make test.sh:
|
.. _make test.shell:
|
||||||
|
|
||||||
``make test.sh``
|
``make test.shell``
|
||||||
================
|
===================
|
||||||
|
|
||||||
:ref:`sh lint` / if you have changed some bash scripting run this test before
|
:ref:`sh lint` / if you have changed some bash scripting run this test before
|
||||||
commit.
|
commit.
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
.. _tineye engine:
|
||||||
|
|
||||||
|
======
|
||||||
|
Tineye
|
||||||
|
======
|
||||||
|
|
||||||
|
.. automodule:: searx.engines.tineye
|
||||||
|
:members:
|
||||||
|
|
35
manage
35
manage
|
@ -20,6 +20,8 @@ source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_go.sh"
|
||||||
# shellcheck source=utils/lib_redis.sh
|
# shellcheck source=utils/lib_redis.sh
|
||||||
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_redis.sh"
|
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_redis.sh"
|
||||||
|
|
||||||
|
PATH="${REPO_ROOT}/node_modules/.bin:${PATH}"
|
||||||
|
|
||||||
# config
|
# config
|
||||||
|
|
||||||
PYOBJECTS="searx"
|
PYOBJECTS="searx"
|
||||||
|
@ -46,6 +48,10 @@ while IFS= read -r line; do
|
||||||
YAMLLINT_FILES+=("$line")
|
YAMLLINT_FILES+=("$line")
|
||||||
done <<< "$(git ls-files './tests/*.yml' './searx/*.yml' './utils/templates/etc/searxng/*.yml')"
|
done <<< "$(git ls-files './tests/*.yml' './searx/*.yml' './utils/templates/etc/searxng/*.yml')"
|
||||||
|
|
||||||
|
RST_FILES=(
|
||||||
|
'README.rst'
|
||||||
|
)
|
||||||
|
|
||||||
PYLINT_SEARXNG_DISABLE_OPTION="\
|
PYLINT_SEARXNG_DISABLE_OPTION="\
|
||||||
I,C,R,\
|
I,C,R,\
|
||||||
W0105,W0212,W0511,W0603,W0613,W0621,W0702,W0703,W1401,\
|
W0105,W0212,W0511,W0603,W0613,W0621,W0702,W0703,W1401,\
|
||||||
|
@ -99,10 +105,12 @@ format.:
|
||||||
test.:
|
test.:
|
||||||
yamllint : lint YAML files (YAMLLINT_FILES)
|
yamllint : lint YAML files (YAMLLINT_FILES)
|
||||||
pylint : lint PYLINT_FILES, searx/engines, searx & tests
|
pylint : lint PYLINT_FILES, searx/engines, searx & tests
|
||||||
|
pyright : static type check of python sources
|
||||||
black : check black code format
|
black : check black code format
|
||||||
unit : run unit tests
|
unit : run unit tests
|
||||||
coverage : run unit tests with coverage
|
coverage : run unit tests with coverage
|
||||||
robot : run robot test
|
robot : run robot test
|
||||||
|
rst : test .rst files incl. README.rst
|
||||||
clean : clean intermediate test stuff
|
clean : clean intermediate test stuff
|
||||||
themes.:
|
themes.:
|
||||||
all : build all themes
|
all : build all themes
|
||||||
|
@ -553,6 +561,12 @@ node.env() {
|
||||||
dump_return $?
|
dump_return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
node.env.devtools() {
|
||||||
|
nodejs.ensure
|
||||||
|
build_msg INSTALL "package.json: developer and CI tools"
|
||||||
|
npm install
|
||||||
|
}
|
||||||
|
|
||||||
node.clean() {
|
node.clean() {
|
||||||
if ! required_commands npm 2>/dev/null; then
|
if ! required_commands npm 2>/dev/null; then
|
||||||
build_msg CLEAN "npm is not installed / ignore npm dependencies"
|
build_msg CLEAN "npm is not installed / ignore npm dependencies"
|
||||||
|
@ -677,6 +691,20 @@ test.pylint() {
|
||||||
dump_return $?
|
dump_return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test.pyright() {
|
||||||
|
build_msg TEST "[pyright] static type check of python sources"
|
||||||
|
node.env.devtools
|
||||||
|
# We run Pyright in the virtual environment because Pyright
|
||||||
|
# executes "python" to determine the Python version.
|
||||||
|
build_msg TEST "[pyright] suppress warnings related to intentional monkey patching"
|
||||||
|
pyenv.cmd npx --no-install pyright -p pyrightconfig-ci.json \
|
||||||
|
| grep -v ".py$" \
|
||||||
|
| grep -v '/engines/.*.py.* - warning: "logger" is not defined'\
|
||||||
|
| grep -v '/engines/.*.py.* - warning: "supported_languages" is not defined' \
|
||||||
|
| grep -v '/engines/.*.py.* - warning: "language_aliases" is not defined'
|
||||||
|
dump_return $?
|
||||||
|
}
|
||||||
|
|
||||||
test.black() {
|
test.black() {
|
||||||
build_msg TEST "[black] \$BLACK_TARGETS"
|
build_msg TEST "[black] \$BLACK_TARGETS"
|
||||||
pyenv.cmd black --check --diff "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
|
pyenv.cmd black --check --diff "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
|
||||||
|
@ -707,6 +735,13 @@ test.robot() {
|
||||||
dump_return $?
|
dump_return $?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
test.rst() {
|
||||||
|
build_msg TEST "[reST markup] ${RST_FILES[*]}"
|
||||||
|
for rst in "${RST_FILES[@]}"; do
|
||||||
|
pyenv.cmd rst2html.py --halt error "$rst" > /dev/null || die 42 "fix issue in $rst"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
test.clean() {
|
test.clean() {
|
||||||
build_msg CLEAN "test stuff"
|
build_msg CLEAN "test stuff"
|
||||||
rm -rf geckodriver.log .coverage coverage/
|
rm -rf geckodriver.log .coverage coverage/
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"eslint": "^8.7.0",
|
||||||
|
"pyright": "^1.1.215"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"venvPath": "local",
|
||||||
|
"venv": "py3",
|
||||||
|
"include": [
|
||||||
|
"searx",
|
||||||
|
"searxng_extra",
|
||||||
|
"tests"
|
||||||
|
],
|
||||||
|
"typeCheckingMode": "off"
|
||||||
|
}
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"venvPath": "local",
|
||||||
|
"venv": "py3",
|
||||||
|
"include": [
|
||||||
|
"searx",
|
||||||
|
"searxng_extra",
|
||||||
|
"tests"
|
||||||
|
]
|
||||||
|
}
|
|
@ -8,7 +8,7 @@ splinter==0.17.0
|
||||||
selenium==4.1.0
|
selenium==4.1.0
|
||||||
twine==3.7.1
|
twine==3.7.1
|
||||||
Pallets-Sphinx-Themes==2.0.2
|
Pallets-Sphinx-Themes==2.0.2
|
||||||
Sphinx==4.3.2
|
Sphinx==4.4.0
|
||||||
sphinx-issues==3.0.1
|
sphinx-issues==3.0.1
|
||||||
sphinx-jinja==1.4.0
|
sphinx-jinja==1.4.0
|
||||||
sphinx-tabs==3.2.0
|
sphinx-tabs==3.2.0
|
||||||
|
|
|
@ -13,3 +13,6 @@ uvloop==0.16.0
|
||||||
httpx-socks[asyncio]==0.7.2
|
httpx-socks[asyncio]==0.7.2
|
||||||
langdetect==1.0.9
|
langdetect==1.0.9
|
||||||
setproctitle==1.2.2
|
setproctitle==1.2.2
|
||||||
|
redis==4.1.2
|
||||||
|
mistletoe==0.8.1
|
||||||
|
typing_extensions==4.0.1
|
||||||
|
|
|
@ -1,33 +1,23 @@
|
||||||
'''
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
searx is free software: you can redistribute it and/or modify
|
# lint: pylint
|
||||||
it under the terms of the GNU Affero General Public License as published by
|
"""This module implements functions needed for the autocompleter.
|
||||||
the Free Software Foundation, either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
searx is distributed in the hope that it will be useful,
|
"""
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU Affero General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Affero General Public License
|
|
||||||
along with searx. If not, see < http://www.gnu.org/licenses/ >.
|
|
||||||
|
|
||||||
(C) 2013- by Adam Tauber, <asciimoo@gmail.com>
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
from lxml import etree
|
|
||||||
from json import loads
|
from json import loads
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
|
from lxml import etree
|
||||||
from httpx import HTTPError
|
from httpx import HTTPError
|
||||||
|
|
||||||
|
|
||||||
from searx import settings
|
from searx import settings
|
||||||
from searx.data import ENGINES_LANGUAGES
|
from searx.data import ENGINES_LANGUAGES
|
||||||
from searx.network import get as http_get
|
from searx.network import get as http_get
|
||||||
from searx.exceptions import SearxEngineResponseException
|
from searx.exceptions import SearxEngineResponseException
|
||||||
|
|
||||||
|
# a fetch_supported_languages() for XPath engines isn't available right now
|
||||||
|
# _brave = ENGINES_LANGUAGES['brave'].keys()
|
||||||
|
|
||||||
|
|
||||||
def get(*args, **kwargs):
|
def get(*args, **kwargs):
|
||||||
if 'timeout' not in kwargs:
|
if 'timeout' not in kwargs:
|
||||||
|
@ -36,7 +26,26 @@ def get(*args, **kwargs):
|
||||||
return http_get(*args, **kwargs)
|
return http_get(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def dbpedia(query, lang):
|
def brave(query, _lang):
|
||||||
|
# brave search autocompleter
|
||||||
|
url = 'https://search.brave.com/api/suggest?'
|
||||||
|
url += urlencode({'q': query})
|
||||||
|
country = 'all'
|
||||||
|
# if lang in _brave:
|
||||||
|
# country = lang
|
||||||
|
kwargs = {'cookies': {'country': country}}
|
||||||
|
resp = get(url, **kwargs)
|
||||||
|
|
||||||
|
results = []
|
||||||
|
|
||||||
|
if resp.ok:
|
||||||
|
data = resp.json()
|
||||||
|
for item in data[1]:
|
||||||
|
results.append(item)
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def dbpedia(query, _lang):
|
||||||
# dbpedia autocompleter, no HTTPS
|
# dbpedia autocompleter, no HTTPS
|
||||||
autocomplete_url = 'https://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
|
autocomplete_url = 'https://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
|
||||||
|
|
||||||
|
@ -51,7 +60,7 @@ def dbpedia(query, lang):
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
def duckduckgo(query, lang):
|
def duckduckgo(query, _lang):
|
||||||
# duckduckgo autocompleter
|
# duckduckgo autocompleter
|
||||||
url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
|
url = 'https://ac.duckduckgo.com/ac/?{0}&type=list'
|
||||||
|
|
||||||
|
@ -85,7 +94,7 @@ def startpage(query, lang):
|
||||||
return [e['text'] for e in data.get('suggestions', []) if 'text' in e]
|
return [e['text'] for e in data.get('suggestions', []) if 'text' in e]
|
||||||
|
|
||||||
|
|
||||||
def swisscows(query, lang):
|
def swisscows(query, _lang):
|
||||||
# swisscows autocompleter
|
# swisscows autocompleter
|
||||||
url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
|
url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
|
||||||
|
|
||||||
|
@ -128,6 +137,7 @@ backends = {
|
||||||
'swisscows': swisscows,
|
'swisscows': swisscows,
|
||||||
'qwant': qwant,
|
'qwant': qwant,
|
||||||
'wikipedia': wikipedia,
|
'wikipedia': wikipedia,
|
||||||
|
'brave': brave,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ def ahmia_blacklist_loader():
|
||||||
This function is used by :py:mod:`searx.plugins.ahmia_filter`.
|
This function is used by :py:mod:`searx.plugins.ahmia_filter`.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
with open(str(data_dir / 'ahmia_blacklist.txt'), encoding='utf-8') as f:
|
with open(data_dir / 'ahmia_blacklist.txt', encoding='utf-8') as f:
|
||||||
return f.read().split()
|
return f.read().split()
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -827,6 +827,7 @@
|
||||||
"CNY"
|
"CNY"
|
||||||
],
|
],
|
||||||
"רנמינבי": "CNY",
|
"רנמינבי": "CNY",
|
||||||
|
"zsenminpi": "CNY",
|
||||||
"renminbi cinese": "CNY",
|
"renminbi cinese": "CNY",
|
||||||
"人民元": "CNY",
|
"人民元": "CNY",
|
||||||
"juanis": "CNY",
|
"juanis": "CNY",
|
||||||
|
@ -992,7 +993,7 @@
|
||||||
"džibučio frankas": "DJF",
|
"džibučio frankas": "DJF",
|
||||||
"djiboutiaanse frank": "DJF",
|
"djiboutiaanse frank": "DJF",
|
||||||
"frank dżibuti": "DJF",
|
"frank dżibuti": "DJF",
|
||||||
"franco do djibouti": "DJF",
|
"franco do jibuti": "DJF",
|
||||||
"франк джибути": "DJF",
|
"франк джибути": "DJF",
|
||||||
"џибутски франак": "DJF",
|
"џибутски франак": "DJF",
|
||||||
"djiboutisk franc": "DJF",
|
"djiboutisk franc": "DJF",
|
||||||
|
@ -2324,11 +2325,10 @@
|
||||||
"mazedonischer denar": "MKD",
|
"mazedonischer denar": "MKD",
|
||||||
"macedonian denar": "MKD",
|
"macedonian denar": "MKD",
|
||||||
"makedona denaro": "MKD",
|
"makedona denaro": "MKD",
|
||||||
"denar normacedonio": "MKD",
|
"denar macedonio": "MKD",
|
||||||
"põhja makedoonia denaar": "MKD",
|
"põhja makedoonia denaar": "MKD",
|
||||||
"pohjois makedonian denaari": "MKD",
|
"pohjois makedonian denaari": "MKD",
|
||||||
"denar macédonien": "MKD",
|
"denar macédonien": "MKD",
|
||||||
"denar macedonio": "MKD",
|
|
||||||
"דינר מקדוני": "MKD",
|
"דינר מקדוני": "MKD",
|
||||||
"makedonski denar": "MKD",
|
"makedonski denar": "MKD",
|
||||||
"macedón dénár": "MKD",
|
"macedón dénár": "MKD",
|
||||||
|
@ -4849,6 +4849,7 @@
|
||||||
"belarus rubel": "BYN",
|
"belarus rubel": "BYN",
|
||||||
"br": "BYN",
|
"br": "BYN",
|
||||||
"nuevo rublo bierlorruso": "BYN",
|
"nuevo rublo bierlorruso": "BYN",
|
||||||
|
"зайчик": "BYN",
|
||||||
"білоруський рубль": "BYN",
|
"білоруський рубль": "BYN",
|
||||||
"Bz$": "BZD",
|
"Bz$": "BZD",
|
||||||
"bz$": "BZD",
|
"bz$": "BZD",
|
||||||
|
@ -5060,7 +5061,6 @@
|
||||||
"יואן": "CNY",
|
"יואן": "CNY",
|
||||||
"יואן סיני": "CNY",
|
"יואן סיני": "CNY",
|
||||||
"kínai jüan": "CNY",
|
"kínai jüan": "CNY",
|
||||||
"zsenminpi": "CNY",
|
|
||||||
"yuan cinese": "CNY",
|
"yuan cinese": "CNY",
|
||||||
"人民幣": "CNY",
|
"人民幣": "CNY",
|
||||||
"中国元": "CNY",
|
"中国元": "CNY",
|
||||||
|
@ -5223,10 +5223,10 @@
|
||||||
"המטבע של ג'יבוטי": "DJF",
|
"המטבע של ג'יבוטי": "DJF",
|
||||||
"franco di gibuti": "DJF",
|
"franco di gibuti": "DJF",
|
||||||
"djiboutische frank": "DJF",
|
"djiboutische frank": "DJF",
|
||||||
"franco do jibuti": "DJF",
|
|
||||||
"franco djibutiano": "DJF",
|
"franco djibutiano": "DJF",
|
||||||
"franco djibutiense": "DJF",
|
"franco djibutiense": "DJF",
|
||||||
"franco do djibuti": "DJF",
|
"franco do djibuti": "DJF",
|
||||||
|
"franco do djibouti": "DJF",
|
||||||
"franco jibutiano": "DJF",
|
"franco jibutiano": "DJF",
|
||||||
"franco jibutiense": "DJF",
|
"franco jibutiense": "DJF",
|
||||||
"валюта джибути": "DJF",
|
"валюта джибути": "DJF",
|
||||||
|
@ -6383,6 +6383,8 @@
|
||||||
"M": "LSL",
|
"M": "LSL",
|
||||||
"lisente": "LSL",
|
"lisente": "LSL",
|
||||||
"loti lesothan": "LSL",
|
"loti lesothan": "LSL",
|
||||||
|
"לוטי": "LSL",
|
||||||
|
"לוטי לסוטו": "LSL",
|
||||||
"loti del lesotho": "LSL",
|
"loti del lesotho": "LSL",
|
||||||
"レソト・ロチ": "LSL",
|
"レソト・ロチ": "LSL",
|
||||||
"валюта лесото": "LSL",
|
"валюта лесото": "LSL",
|
||||||
|
@ -6494,15 +6496,12 @@
|
||||||
"dinar normacedoni": "MKD",
|
"dinar normacedoni": "MKD",
|
||||||
"makedonský dinár": "MKD",
|
"makedonský dinár": "MKD",
|
||||||
"makedonsk denar": "MKD",
|
"makedonsk denar": "MKD",
|
||||||
"nordmazedonischer denar": "MKD",
|
|
||||||
"denari": "MKD",
|
"denari": "MKD",
|
||||||
"mkd": "MKD",
|
"mkd": "MKD",
|
||||||
"north macedonian denar": "MKD",
|
|
||||||
"makedonia denaro": "MKD",
|
"makedonia denaro": "MKD",
|
||||||
"dinar macedonio": "MKD",
|
"dinar macedonio": "MKD",
|
||||||
"makedoonia denaar": "MKD",
|
"makedoonia denaar": "MKD",
|
||||||
"makedonian denaari": "MKD",
|
"makedonian denaari": "MKD",
|
||||||
"dinar macédonien": "MKD",
|
|
||||||
"denar macedone": "MKD",
|
"denar macedone": "MKD",
|
||||||
"denaro macedone": "MKD",
|
"denaro macedone": "MKD",
|
||||||
"マケドニア・ディナール": "MKD",
|
"マケドニア・ディナール": "MKD",
|
||||||
|
@ -7031,8 +7030,6 @@
|
||||||
"питкэрнский доллар": "PND",
|
"питкэрнский доллар": "PND",
|
||||||
"غواراني": "PYG",
|
"غواراني": "PYG",
|
||||||
"₲": "PYG",
|
"₲": "PYG",
|
||||||
"paraguajský guarani": "PYG",
|
|
||||||
"paraguajský guaraní": "PYG",
|
|
||||||
"paraguayský guarani": "PYG",
|
"paraguayský guarani": "PYG",
|
||||||
"pyg": "PYG",
|
"pyg": "PYG",
|
||||||
"paraguayan guarani": "PYG",
|
"paraguayan guarani": "PYG",
|
||||||
|
@ -8052,9 +8049,9 @@
|
||||||
"unitate monetară europeană": "XEU",
|
"unitate monetară europeană": "XEU",
|
||||||
"европейская валютная единица": "XEU",
|
"европейская валютная единица": "XEU",
|
||||||
"europeiska valutaenhet": "XEU",
|
"europeiska valutaenhet": "XEU",
|
||||||
"xmr": "XMR",
|
|
||||||
"mo": "XMR",
|
|
||||||
"bitmonero": "XMR",
|
"bitmonero": "XMR",
|
||||||
|
"mo": "XMR",
|
||||||
|
"xmr": "XMR",
|
||||||
"فرنك س ف ا غرب أفريقيا": "XOF",
|
"فرنك س ف ا غرب أفريقيا": "XOF",
|
||||||
"F": "XOF",
|
"F": "XOF",
|
||||||
"xof": "XOF",
|
"xof": "XOF",
|
||||||
|
@ -8124,6 +8121,7 @@
|
||||||
"единая система региональных взаиморасчетов": "XSU",
|
"единая система региональных взаиморасчетов": "XSU",
|
||||||
"единая система региональных взаиморасчётов": "XSU",
|
"единая система региональных взаиморасчётов": "XSU",
|
||||||
"rial del iemen del nord": "YER",
|
"rial del iemen del nord": "YER",
|
||||||
|
"nord jemena rialo": "YER",
|
||||||
"rial nord yéménite": "YER",
|
"rial nord yéménite": "YER",
|
||||||
"észak jemeni riál": "YER",
|
"észak jemeni riál": "YER",
|
||||||
"北イエメン・リアル": "YER",
|
"北イエメン・リアル": "YER",
|
||||||
|
@ -8155,6 +8153,7 @@
|
||||||
"R": "ZAR",
|
"R": "ZAR",
|
||||||
"rand de sud àfrica": "ZAR",
|
"rand de sud àfrica": "ZAR",
|
||||||
"rand sud africà": "ZAR",
|
"rand sud africà": "ZAR",
|
||||||
|
"rand de affrica": "ZAR",
|
||||||
"rando": "ZAR",
|
"rando": "ZAR",
|
||||||
"sud afrika rando": "ZAR",
|
"sud afrika rando": "ZAR",
|
||||||
"zar": "ZAR",
|
"zar": "ZAR",
|
||||||
|
@ -8753,7 +8752,7 @@
|
||||||
"sv": "Burundisk franc",
|
"sv": "Burundisk franc",
|
||||||
"ta": "புரூண்டி பிராங்க்",
|
"ta": "புரூண்டி பிராங்க்",
|
||||||
"tr": "Burundi frangı",
|
"tr": "Burundi frangı",
|
||||||
"uk": "Бурундійський франк",
|
"uk": "бурундійський франк",
|
||||||
"he": "פרנק בורונדי",
|
"he": "פרנק בורונדי",
|
||||||
"ro": "franc burundez"
|
"ro": "franc burundez"
|
||||||
},
|
},
|
||||||
|
@ -10965,7 +10964,7 @@
|
||||||
"nl": "Sri Lankaanse roepie",
|
"nl": "Sri Lankaanse roepie",
|
||||||
"pl": "Rupia lankijska",
|
"pl": "Rupia lankijska",
|
||||||
"pt": "rúpia do Sri Lanka",
|
"pt": "rúpia do Sri Lanka",
|
||||||
"ru": "Ланкийская рупия",
|
"ru": "ланкийская рупия",
|
||||||
"sr": "шриланчанска рупија",
|
"sr": "шриланчанска рупија",
|
||||||
"sv": "Lankesisk rupie",
|
"sv": "Lankesisk rupie",
|
||||||
"ta": "இலங்கை ரூபாய்",
|
"ta": "இலங்கை ரூபாய்",
|
||||||
|
@ -11031,7 +11030,8 @@
|
||||||
"sr": "лесотски лоти",
|
"sr": "лесотски лоти",
|
||||||
"sv": "Lesothisk Loti",
|
"sv": "Lesothisk Loti",
|
||||||
"tr": "Loti",
|
"tr": "Loti",
|
||||||
"uk": "Лоті"
|
"uk": "Лоті",
|
||||||
|
"he": "לוטי"
|
||||||
},
|
},
|
||||||
"LYD": {
|
"LYD": {
|
||||||
"ar": "دينار ليبي",
|
"ar": "دينار ليبي",
|
||||||
|
@ -11186,13 +11186,13 @@
|
||||||
"ca": "denar",
|
"ca": "denar",
|
||||||
"cs": "Makedonský denár",
|
"cs": "Makedonský denár",
|
||||||
"da": "Makedonske denarer",
|
"da": "Makedonske denarer",
|
||||||
"de": "nordmazedonischer Denar",
|
"de": "mazedonischer Denar",
|
||||||
"en": "denar",
|
"en": "Macedonian denar",
|
||||||
"eo": "makedona denaro",
|
"eo": "makedona denaro",
|
||||||
"es": "denar macedonio",
|
"es": "denar macedonio",
|
||||||
"et": "Makedoonia denaar",
|
"et": "Makedoonia denaar",
|
||||||
"fi": "Makedonian denaari",
|
"fi": "Makedonian denaari",
|
||||||
"fr": "dinar macédonien",
|
"fr": "denar macédonien",
|
||||||
"gl": "Dinar macedonio",
|
"gl": "Dinar macedonio",
|
||||||
"he": "דינר מקדוני",
|
"he": "דינר מקדוני",
|
||||||
"hr": "Makedonski denar",
|
"hr": "Makedonski denar",
|
||||||
|
@ -11980,7 +11980,7 @@
|
||||||
"PYG": {
|
"PYG": {
|
||||||
"ar": "غواراني باراغواي",
|
"ar": "غواراني باراغواي",
|
||||||
"ca": "guaraní",
|
"ca": "guaraní",
|
||||||
"cs": "Paraguayský guaraní",
|
"cs": "paraguayský guaraní",
|
||||||
"de": "Paraguayischer Guaraní",
|
"de": "Paraguayischer Guaraní",
|
||||||
"en": "Paraguayan guaraní",
|
"en": "Paraguayan guaraní",
|
||||||
"eo": "paragvaja gvaranio",
|
"eo": "paragvaja gvaranio",
|
||||||
|
@ -13662,7 +13662,8 @@
|
||||||
"sr": "јужноафрички ранд",
|
"sr": "јужноафрички ранд",
|
||||||
"sv": "Rand",
|
"sv": "Rand",
|
||||||
"tr": "Güney Afrika randı",
|
"tr": "Güney Afrika randı",
|
||||||
"uk": "Ранд"
|
"uk": "Ранд",
|
||||||
|
"cy": "Rand De Affrica"
|
||||||
},
|
},
|
||||||
"ZMW": {
|
"ZMW": {
|
||||||
"ar": "كواشا زامبية",
|
"ar": "كواشا زامبية",
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
{
|
{
|
||||||
"versions": [
|
"versions": [
|
||||||
|
"96.0.3",
|
||||||
|
"96.0.2",
|
||||||
|
"96.0.1",
|
||||||
|
"96.0",
|
||||||
"95.0.2",
|
"95.0.2",
|
||||||
"95.0.1",
|
"95.0.1",
|
||||||
"95.0",
|
"95.0"
|
||||||
"94.0.2",
|
|
||||||
"94.0.1",
|
|
||||||
"94.0"
|
|
||||||
],
|
],
|
||||||
"os": [
|
"os": [
|
||||||
"Windows NT 10.0; Win64; x64",
|
"Windows NT 10.0; Win64; x64",
|
||||||
|
|
|
@ -211,6 +211,7 @@
|
||||||
"Q1104069": "$",
|
"Q1104069": "$",
|
||||||
"Q11061003": "μm²",
|
"Q11061003": "μm²",
|
||||||
"Q11061005": "nm²",
|
"Q11061005": "nm²",
|
||||||
|
"Q110742003": "dppx",
|
||||||
"Q1131660": "st",
|
"Q1131660": "st",
|
||||||
"Q1137675": "cr",
|
"Q1137675": "cr",
|
||||||
"Q1140444": "Zb",
|
"Q1140444": "Zb",
|
||||||
|
|
|
@ -42,6 +42,7 @@ ENGINE_DEFAULT_ARGS = {
|
||||||
"safesearch": False,
|
"safesearch": False,
|
||||||
"time_range_support": False,
|
"time_range_support": False,
|
||||||
"enable_http": False,
|
"enable_http": False,
|
||||||
|
"using_tor_proxy": False,
|
||||||
"display_error_messages": True,
|
"display_error_messages": True,
|
||||||
"tokens": [],
|
"tokens": [],
|
||||||
"about": {},
|
"about": {},
|
||||||
|
@ -230,8 +231,8 @@ def set_language_attributes(engine: Engine):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def update_attributes_for_tor(engine):
|
def update_attributes_for_tor(engine: Engine) -> bool:
|
||||||
if settings['outgoing'].get('using_tor_proxy') and hasattr(engine, 'onion_url'):
|
if using_tor_proxy(engine) and hasattr(engine, 'onion_url'):
|
||||||
engine.search_url = engine.onion_url + getattr(engine, 'search_path', '')
|
engine.search_url = engine.onion_url + getattr(engine, 'search_path', '')
|
||||||
engine.timeout += settings['outgoing'].get('extra_proxy_timeout', 0)
|
engine.timeout += settings['outgoing'].get('extra_proxy_timeout', 0)
|
||||||
|
|
||||||
|
@ -249,13 +250,18 @@ def is_missing_required_attributes(engine):
|
||||||
return missing
|
return missing
|
||||||
|
|
||||||
|
|
||||||
|
def using_tor_proxy(engine: Engine):
|
||||||
|
"""Return True if the engine configuration declares to use Tor."""
|
||||||
|
return settings['outgoing'].get('using_tor_proxy') or getattr(engine, 'using_tor_proxy', False)
|
||||||
|
|
||||||
|
|
||||||
def is_engine_active(engine: Engine):
|
def is_engine_active(engine: Engine):
|
||||||
# check if engine is inactive
|
# check if engine is inactive
|
||||||
if engine.inactive is True:
|
if engine.inactive is True:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
# exclude onion engines if not using tor
|
# exclude onion engines if not using tor
|
||||||
if 'onions' in engine.categories and not settings['outgoing'].get('using_tor_proxy'):
|
if 'onions' in engine.categories and not using_tor_proxy(engine):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
"""
|
# lint: pylint
|
||||||
currency convert (DuckDuckGo)
|
"""Currency convert (DuckDuckGo)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
@ -13,18 +13,19 @@ about = {
|
||||||
"use_official_api": False,
|
"use_official_api": False,
|
||||||
"require_api_key": False,
|
"require_api_key": False,
|
||||||
"results": 'JSONP',
|
"results": 'JSONP',
|
||||||
|
"description": "Service from DuckDuckGo.",
|
||||||
}
|
}
|
||||||
|
|
||||||
engine_type = 'online_currency'
|
engine_type = 'online_currency'
|
||||||
categories = []
|
categories = []
|
||||||
url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}'
|
base_url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}'
|
||||||
weight = 100
|
weight = 100
|
||||||
|
|
||||||
https_support = True
|
https_support = True
|
||||||
|
|
||||||
|
|
||||||
def request(query, params):
|
def request(_query, params):
|
||||||
params['url'] = url.format(params['from'], params['to'])
|
params['url'] = base_url.format(params['from'], params['to'])
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +35,7 @@ def response(resp):
|
||||||
results = []
|
results = []
|
||||||
try:
|
try:
|
||||||
conversion_rate = float(json.loads(json_resp)['conversion']['converted-amount'])
|
conversion_rate = float(json.loads(json_resp)['conversion']['converted-amount'])
|
||||||
except:
|
except ValueError:
|
||||||
return results
|
return results
|
||||||
answer = '{0} {1} = {2} {3}, 1 {1} ({5}) = {4} {3} ({6})'.format(
|
answer = '{0} {1} = {2} {3}, 1 {1} ({5}) = {4} {3} ({6})'.format(
|
||||||
resp.search_params['amount'],
|
resp.search_params['amount'],
|
||||||
|
|
|
@ -111,8 +111,9 @@ filter_mapping = {0: 'off', 1: 'medium', 2: 'high'}
|
||||||
# specific xpath variables
|
# specific xpath variables
|
||||||
# ------------------------
|
# ------------------------
|
||||||
|
|
||||||
# google results are grouped into <div class="g" ../>
|
# google results are grouped into <div class="g ..." ../>
|
||||||
results_xpath = '//div[@class="g"]'
|
results_xpath = '//div[@id="search"]//div[contains(@class, "g ")]'
|
||||||
|
results_xpath_mobile_ui = '//div[contains(@class, "g ")]'
|
||||||
|
|
||||||
# google *sections* are no usual *results*, we ignore them
|
# google *sections* are no usual *results*, we ignore them
|
||||||
g_section_with_header = './g-section-with-header'
|
g_section_with_header = './g-section-with-header'
|
||||||
|
@ -124,8 +125,8 @@ title_xpath = './/h3[1]'
|
||||||
# href=...>
|
# href=...>
|
||||||
href_xpath = './/div[@class="yuRUbf"]//a/@href'
|
href_xpath = './/div[@class="yuRUbf"]//a/@href'
|
||||||
|
|
||||||
# in the result group there is <div class="IsZvec" ../> containing he *content*
|
# in the result group there is <div class="VwiC3b ..." ../> containing the *content*
|
||||||
content_xpath = './/div[@class="IsZvec"]'
|
content_xpath = './/div[contains(@class, "VwiC3b")]'
|
||||||
|
|
||||||
# Suggestions are links placed in a *card-section*, we extract only the text
|
# Suggestions are links placed in a *card-section*, we extract only the text
|
||||||
# from the links not the links itself.
|
# from the links not the links itself.
|
||||||
|
@ -336,7 +337,12 @@ def response(resp):
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
|
|
||||||
# parse results
|
# parse results
|
||||||
for result in eval_xpath_list(dom, results_xpath):
|
|
||||||
|
_results_xpath = results_xpath
|
||||||
|
if use_mobile_ui:
|
||||||
|
_results_xpath = results_xpath_mobile_ui
|
||||||
|
|
||||||
|
for result in eval_xpath_list(dom, _results_xpath):
|
||||||
|
|
||||||
# google *sections*
|
# google *sections*
|
||||||
if extract_text(eval_xpath(result, g_section_with_header)):
|
if extract_text(eval_xpath(result, g_section_with_header)):
|
||||||
|
@ -347,20 +353,22 @@ def response(resp):
|
||||||
title_tag = eval_xpath_getindex(result, title_xpath, 0, default=None)
|
title_tag = eval_xpath_getindex(result, title_xpath, 0, default=None)
|
||||||
if title_tag is None:
|
if title_tag is None:
|
||||||
# this not one of the common google results *section*
|
# this not one of the common google results *section*
|
||||||
logger.debug('ingoring <div class="g" ../> section: missing title')
|
logger.debug('ingoring item from the result_xpath list: missing title')
|
||||||
continue
|
continue
|
||||||
title = extract_text(title_tag)
|
title = extract_text(title_tag)
|
||||||
url = eval_xpath_getindex(result, href_xpath, 0, None)
|
url = eval_xpath_getindex(result, href_xpath, 0, None)
|
||||||
if url is None:
|
if url is None:
|
||||||
continue
|
continue
|
||||||
content = extract_text(eval_xpath_getindex(result, content_xpath, 0, default=None), allow_none=True)
|
content = extract_text(eval_xpath_getindex(result, content_xpath, 0, default=None), allow_none=True)
|
||||||
|
if content is None:
|
||||||
|
logger.debug('ingoring item from the result_xpath list: missing content of title "%s"', title)
|
||||||
|
continue
|
||||||
|
|
||||||
|
logger.debug('add link to results: %s', title)
|
||||||
results.append({'url': url, 'title': title, 'content': content})
|
results.append({'url': url, 'title': title, 'content': content})
|
||||||
|
|
||||||
except Exception as e: # pylint: disable=broad-except
|
except Exception as e: # pylint: disable=broad-except
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
# from lxml import etree
|
|
||||||
# logger.debug(etree.tostring(result, pretty_print=True))
|
|
||||||
# import pdb
|
|
||||||
# pdb.set_trace()
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# parse suggestion
|
# parse suggestion
|
||||||
|
|
|
@ -3,12 +3,10 @@
|
||||||
INA (Videos)
|
INA (Videos)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from json import loads
|
|
||||||
from html import unescape
|
from html import unescape
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
from lxml import html
|
from lxml import html
|
||||||
from dateutil import parser
|
from searx.utils import extract_text, eval_xpath, eval_xpath_list, eval_xpath_getindex
|
||||||
from searx.utils import extract_text
|
|
||||||
|
|
||||||
# about
|
# about
|
||||||
about = {
|
about = {
|
||||||
|
@ -24,25 +22,24 @@ about = {
|
||||||
# engine dependent config
|
# engine dependent config
|
||||||
categories = ['videos']
|
categories = ['videos']
|
||||||
paging = True
|
paging = True
|
||||||
page_size = 48
|
page_size = 12
|
||||||
|
|
||||||
# search-url
|
# search-url
|
||||||
base_url = 'https://www.ina.fr'
|
base_url = 'https://www.ina.fr'
|
||||||
search_url = base_url + '/layout/set/ajax/recherche/result?autopromote=&hf={ps}&b={start}&type=Video&r=&{query}'
|
search_url = base_url + '/ajax/recherche?{query}&espace=1&sort=pertinence&order=desc&offset={start}&modified=size'
|
||||||
|
|
||||||
# specific xpath variables
|
# specific xpath variables
|
||||||
results_xpath = '//div[contains(@class,"search-results--list")]//div[@class="media-body"]'
|
results_xpath = '//div[@id="searchHits"]/div'
|
||||||
url_xpath = './/a/@href'
|
url_xpath = './/a/@href'
|
||||||
title_xpath = './/h3[@class="h3--title media-heading"]'
|
title_xpath = './/div[contains(@class,"title-bloc-small")]'
|
||||||
thumbnail_xpath = './/img/@src'
|
content_xpath = './/div[contains(@class,"sous-titre-fonction")]'
|
||||||
publishedDate_xpath = './/span[@class="broadcast"]'
|
thumbnail_xpath = './/img/@data-src'
|
||||||
content_xpath = './/p[@class="media-body__summary"]'
|
publishedDate_xpath = './/div[contains(@class,"dateAgenda")]'
|
||||||
|
|
||||||
|
|
||||||
# do search-request
|
# do search-request
|
||||||
def request(query, params):
|
def request(query, params):
|
||||||
params['url'] = search_url.format(ps=page_size, start=params['pageno'] * page_size, query=urlencode({'q': query}))
|
params['url'] = search_url.format(start=params['pageno'] * page_size, query=urlencode({'q': query}))
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,26 +48,17 @@ def response(resp):
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
# we get html in a JSON container...
|
# we get html in a JSON container...
|
||||||
response = loads(resp.text)
|
dom = html.fromstring(resp.text)
|
||||||
dom = html.fromstring(response)
|
|
||||||
|
|
||||||
# parse results
|
# parse results
|
||||||
for result in dom.xpath(results_xpath):
|
for result in eval_xpath_list(dom, results_xpath):
|
||||||
videoid = result.xpath(url_xpath)[0]
|
url_relative = eval_xpath_getindex(result, url_xpath, 0)
|
||||||
url = base_url + videoid
|
url = base_url + url_relative
|
||||||
title = unescape(extract_text(result.xpath(title_xpath)))
|
title = unescape(extract_text(eval_xpath(result, title_xpath)))
|
||||||
try:
|
thumbnail = extract_text(eval_xpath(result, thumbnail_xpath))
|
||||||
thumbnail = extract_text(result.xpath(thumbnail_xpath)[0])
|
content = extract_text(eval_xpath(result, publishedDate_xpath)) + extract_text(
|
||||||
except:
|
eval_xpath(result, content_xpath)
|
||||||
thumbnail = ''
|
)
|
||||||
if thumbnail and thumbnail[0] == '/':
|
|
||||||
thumbnail = base_url + thumbnail
|
|
||||||
d = extract_text(result.xpath(publishedDate_xpath)[0])
|
|
||||||
d = d.split('/')
|
|
||||||
# force ISO date to avoid wrong parsing
|
|
||||||
d = "%s-%s-%s" % (d[2], d[1], d[0])
|
|
||||||
publishedDate = parser.parse(d)
|
|
||||||
content = extract_text(result.xpath(content_xpath))
|
|
||||||
|
|
||||||
# append result
|
# append result
|
||||||
results.append(
|
results.append(
|
||||||
|
@ -79,7 +67,6 @@ def response(resp):
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': content,
|
'content': content,
|
||||||
'template': 'videos.html',
|
'template': 'videos.html',
|
||||||
'publishedDate': publishedDate,
|
|
||||||
'thumbnail': thumbnail,
|
'thumbnail': thumbnail,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,6 +11,7 @@ import mysql.connector # pylint: disable=import-error
|
||||||
engine_type = 'offline'
|
engine_type = 'offline'
|
||||||
auth_plugin = 'caching_sha2_password'
|
auth_plugin = 'caching_sha2_password'
|
||||||
host = "127.0.0.1"
|
host = "127.0.0.1"
|
||||||
|
port = 3306
|
||||||
database = ""
|
database = ""
|
||||||
username = ""
|
username = ""
|
||||||
password = ""
|
password = ""
|
||||||
|
@ -35,6 +36,7 @@ def init(engine_settings):
|
||||||
user=username,
|
user=username,
|
||||||
password=password,
|
password=password,
|
||||||
host=host,
|
host=host,
|
||||||
|
port=port,
|
||||||
auth_plugin=auth_plugin,
|
auth_plugin=auth_plugin,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,16 +1,28 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
"""
|
# lint: pylint
|
||||||
Startpage (Web)
|
"""Startpage (Web)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from lxml import html
|
|
||||||
from dateutil import parser
|
|
||||||
from datetime import datetime, timedelta
|
|
||||||
import re
|
import re
|
||||||
|
from time import time
|
||||||
|
|
||||||
|
from urllib.parse import urlencode
|
||||||
from unicodedata import normalize, combining
|
from unicodedata import normalize, combining
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from dateutil import parser
|
||||||
|
from lxml import html
|
||||||
from babel import Locale
|
from babel import Locale
|
||||||
from babel.localedata import locale_identifiers
|
from babel.localedata import locale_identifiers
|
||||||
|
|
||||||
|
from searx.network import get
|
||||||
from searx.utils import extract_text, eval_xpath, match_language
|
from searx.utils import extract_text, eval_xpath, match_language
|
||||||
|
from searx.exceptions import (
|
||||||
|
SearxEngineResponseException,
|
||||||
|
SearxEngineCaptchaException,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# about
|
# about
|
||||||
about = {
|
about = {
|
||||||
|
@ -33,7 +45,7 @@ supported_languages_url = 'https://www.startpage.com/do/settings'
|
||||||
|
|
||||||
# search-url
|
# search-url
|
||||||
base_url = 'https://startpage.com/'
|
base_url = 'https://startpage.com/'
|
||||||
search_url = base_url + 'do/search'
|
search_url = base_url + 'sp/search?'
|
||||||
|
|
||||||
# specific xpath variables
|
# specific xpath variables
|
||||||
# ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
|
# ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
|
||||||
|
@ -42,18 +54,74 @@ results_xpath = '//div[@class="w-gl__result__main"]'
|
||||||
link_xpath = './/a[@class="w-gl__result-title result-link"]'
|
link_xpath = './/a[@class="w-gl__result-title result-link"]'
|
||||||
content_xpath = './/p[@class="w-gl__description"]'
|
content_xpath = './/p[@class="w-gl__description"]'
|
||||||
|
|
||||||
|
# timestamp of the last fetch of 'sc' code
|
||||||
|
sc_code_ts = 0
|
||||||
|
sc_code = ''
|
||||||
|
|
||||||
|
|
||||||
|
def raise_captcha(resp):
|
||||||
|
|
||||||
|
if str(resp.url).startswith('https://www.startpage.com/sp/captcha'):
|
||||||
|
# suspend CAPTCHA for 7 days
|
||||||
|
raise SearxEngineCaptchaException(suspended_time=7 * 24 * 3600)
|
||||||
|
|
||||||
|
|
||||||
|
def get_sc_code(headers):
|
||||||
|
"""Get an actual `sc` argument from startpage's home page.
|
||||||
|
|
||||||
|
Startpage puts a `sc` argument on every link. Without this argument
|
||||||
|
startpage considers the request is from a bot. We do not know what is
|
||||||
|
encoded in the value of the `sc` argument, but it seems to be a kind of a
|
||||||
|
*time-stamp*. This *time-stamp* is valid for a few hours.
|
||||||
|
|
||||||
|
This function scrap a new *time-stamp* from startpage's home page every hour
|
||||||
|
(3000 sec).
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
global sc_code_ts, sc_code # pylint: disable=global-statement
|
||||||
|
|
||||||
|
if time() > (sc_code_ts + 3000):
|
||||||
|
logger.debug("query new sc time-stamp ...")
|
||||||
|
|
||||||
|
resp = get(base_url, headers=headers)
|
||||||
|
raise_captcha(resp)
|
||||||
|
dom = html.fromstring(resp.text)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# href --> '/?sc=adrKJMgF8xwp20'
|
||||||
|
href = eval_xpath(dom, '//a[@class="footer-home__logo"]')[0].get('href')
|
||||||
|
except IndexError as exc:
|
||||||
|
# suspend startpage API --> https://github.com/searxng/searxng/pull/695
|
||||||
|
raise SearxEngineResponseException(
|
||||||
|
suspended_time=7 * 24 * 3600, message="PR-695: query new sc time-stamp failed!"
|
||||||
|
) from exc
|
||||||
|
|
||||||
|
sc_code = href[5:]
|
||||||
|
sc_code_ts = time()
|
||||||
|
logger.debug("new value is: %s", sc_code)
|
||||||
|
|
||||||
|
return sc_code
|
||||||
|
|
||||||
|
|
||||||
# do search-request
|
# do search-request
|
||||||
def request(query, params):
|
def request(query, params):
|
||||||
|
|
||||||
params['url'] = search_url
|
# pylint: disable=line-too-long
|
||||||
params['method'] = 'POST'
|
# The format string from Startpage's FFox add-on [1]::
|
||||||
params['data'] = {
|
#
|
||||||
|
# https://www.startpage.com/do/dsearch?query={searchTerms}&cat=web&pl=ext-ff&language=__MSG_extensionUrlLanguage__&extVersion=1.3.0
|
||||||
|
#
|
||||||
|
# [1] https://addons.mozilla.org/en-US/firefox/addon/startpage-private-search/
|
||||||
|
|
||||||
|
args = {
|
||||||
'query': query,
|
'query': query,
|
||||||
'page': params['pageno'],
|
'page': params['pageno'],
|
||||||
'cat': 'web',
|
'cat': 'web',
|
||||||
'cmd': 'process_search',
|
# 'pl': 'ext-ff',
|
||||||
'engine0': 'v1all',
|
# 'extVersion': '1.3.0',
|
||||||
|
# 'abp': "-1",
|
||||||
|
'sc': get_sc_code(params['headers']),
|
||||||
}
|
}
|
||||||
|
|
||||||
# set language if specified
|
# set language if specified
|
||||||
|
@ -61,9 +129,10 @@ def request(query, params):
|
||||||
lang_code = match_language(params['language'], supported_languages, fallback=None)
|
lang_code = match_language(params['language'], supported_languages, fallback=None)
|
||||||
if lang_code:
|
if lang_code:
|
||||||
language_name = supported_languages[lang_code]['alias']
|
language_name = supported_languages[lang_code]['alias']
|
||||||
params['data']['language'] = language_name
|
args['language'] = language_name
|
||||||
params['data']['lui'] = language_name
|
args['lui'] = language_name
|
||||||
|
|
||||||
|
params['url'] = search_url + urlencode(args)
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
@ -134,10 +203,11 @@ def response(resp):
|
||||||
|
|
||||||
# get supported languages from their site
|
# get supported languages from their site
|
||||||
def _fetch_supported_languages(resp):
|
def _fetch_supported_languages(resp):
|
||||||
# startpage's language selector is a mess
|
# startpage's language selector is a mess each option has a displayed name
|
||||||
# each option has a displayed name and a value, either of which may represent the language name
|
# and a value, either of which may represent the language name in the native
|
||||||
# in the native script, the language name in English, an English transliteration of the native name,
|
# script, the language name in English, an English transliteration of the
|
||||||
# the English name of the writing script used by the language, or occasionally something else entirely.
|
# native name, the English name of the writing script used by the language,
|
||||||
|
# or occasionally something else entirely.
|
||||||
|
|
||||||
# this cases are so special they need to be hardcoded, a couple of them are mispellings
|
# this cases are so special they need to be hardcoded, a couple of them are mispellings
|
||||||
language_names = {
|
language_names = {
|
||||||
|
@ -151,7 +221,15 @@ def _fetch_supported_languages(resp):
|
||||||
}
|
}
|
||||||
|
|
||||||
# get the English name of every language known by babel
|
# get the English name of every language known by babel
|
||||||
language_names.update({name.lower(): lang_code for lang_code, name in Locale('en')._data['languages'].items()})
|
language_names.update(
|
||||||
|
{
|
||||||
|
# fmt: off
|
||||||
|
name.lower(): lang_code
|
||||||
|
# pylint: disable=protected-access
|
||||||
|
for lang_code, name in Locale('en')._data['languages'].items()
|
||||||
|
# fmt: on
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
# get the native name of every language known by babel
|
# get the native name of every language known by babel
|
||||||
for lang_code in filter(lambda lang_code: lang_code.find('_') == -1, locale_identifiers()):
|
for lang_code in filter(lambda lang_code: lang_code.find('_') == -1, locale_identifiers()):
|
||||||
|
@ -176,8 +254,8 @@ def _fetch_supported_languages(resp):
|
||||||
if isinstance(lang_code, str):
|
if isinstance(lang_code, str):
|
||||||
supported_languages[lang_code] = {'alias': sp_option_value}
|
supported_languages[lang_code] = {'alias': sp_option_value}
|
||||||
elif isinstance(lang_code, list):
|
elif isinstance(lang_code, list):
|
||||||
for lc in lang_code:
|
for _lc in lang_code:
|
||||||
supported_languages[lc] = {'alias': sp_option_value}
|
supported_languages[_lc] = {'alias': sp_option_value}
|
||||||
else:
|
else:
|
||||||
print('Unknown language option in Startpage: {} ({})'.format(sp_option_value, sp_option_text))
|
print('Unknown language option in Startpage: {} ({})'.format(sp_option_value, sp_option_text))
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
# lint: pylint
|
||||||
|
"""This engine implements *Tineye - reverse image search*
|
||||||
|
|
||||||
|
Using TinEye, you can search by image or perform what we call a reverse image
|
||||||
|
search. You can do that by uploading an image or searching by URL. You can also
|
||||||
|
simply drag and drop your images to start your search. TinEye constantly crawls
|
||||||
|
the web and adds images to its index. Today, the TinEye index is over 50.2
|
||||||
|
billion images `[tineye.com] <https://tineye.com/how>`_.
|
||||||
|
|
||||||
|
.. hint::
|
||||||
|
|
||||||
|
This SearXNG engine only supports *'searching by URL'* and it does not use
|
||||||
|
the official API `[api.tineye.com] <https://api.tineye.com/python/docs/>`_.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
about = {
|
||||||
|
"website": 'https://tineye.com',
|
||||||
|
"wikidata_id": 'Q2382535',
|
||||||
|
"official_api_documentation": 'https://api.tineye.com/python/docs/',
|
||||||
|
"use_official_api": False,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": 'JSON',
|
||||||
|
}
|
||||||
|
|
||||||
|
engine_type = 'online_url_search'
|
||||||
|
categories = ['general']
|
||||||
|
paging = True
|
||||||
|
safesearch = False
|
||||||
|
base_url = 'https://tineye.com'
|
||||||
|
search_string = '/result_json/?page={page}&{query}'
|
||||||
|
|
||||||
|
|
||||||
|
def request(query, params):
|
||||||
|
|
||||||
|
if params['search_urls']['data:image']:
|
||||||
|
query = params['search_urls']['data:image']
|
||||||
|
elif params['search_urls']['http']:
|
||||||
|
query = params['search_urls']['http']
|
||||||
|
|
||||||
|
query = urlencode({'url': query})
|
||||||
|
|
||||||
|
# see https://github.com/TinEye/pytineye/blob/main/pytineye/api.py
|
||||||
|
params['url'] = base_url + search_string.format(query=query, page=params['pageno'])
|
||||||
|
|
||||||
|
params['headers'].update(
|
||||||
|
{
|
||||||
|
'Connection': 'keep-alive',
|
||||||
|
'Accept-Encoding': 'gzip, defalte, br',
|
||||||
|
'Host': 'tineye.com',
|
||||||
|
'DNT': '1',
|
||||||
|
'TE': 'trailers',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
# Define wanted results
|
||||||
|
json_data = resp.json()
|
||||||
|
number_of_results = json_data['num_matches']
|
||||||
|
|
||||||
|
for i in json_data['matches']:
|
||||||
|
image_format = i['format']
|
||||||
|
width = i['width']
|
||||||
|
height = i['height']
|
||||||
|
thumbnail_src = i['image_url']
|
||||||
|
backlink = i['domains'][0]['backlinks'][0]
|
||||||
|
url = backlink['backlink']
|
||||||
|
source = backlink['url']
|
||||||
|
title = backlink['image_name']
|
||||||
|
img_src = backlink['url']
|
||||||
|
|
||||||
|
# Get and convert published date
|
||||||
|
api_date = backlink['crawl_date'][:-3]
|
||||||
|
publishedDate = datetime.fromisoformat(api_date)
|
||||||
|
|
||||||
|
# Append results
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
'template': 'images.html',
|
||||||
|
'url': url,
|
||||||
|
'thumbnail_src': thumbnail_src,
|
||||||
|
'source': source,
|
||||||
|
'title': title,
|
||||||
|
'img_src': img_src,
|
||||||
|
'format': image_format,
|
||||||
|
'widht': width,
|
||||||
|
'height': height,
|
||||||
|
'publishedDate': publishedDate,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# Append number of results
|
||||||
|
results.append({'number_of_results': number_of_results})
|
||||||
|
|
||||||
|
return results
|
|
@ -1,10 +1,12 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
"""
|
# lint: pylint
|
||||||
1x (Images)
|
"""1x (Images)
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from lxml import html, etree
|
|
||||||
from urllib.parse import urlencode, urljoin
|
from urllib.parse import urlencode, urljoin
|
||||||
|
from lxml import html, etree
|
||||||
|
|
||||||
from searx.utils import extract_text, eval_xpath_list, eval_xpath_getindex
|
from searx.utils import extract_text, eval_xpath_list, eval_xpath_getindex
|
||||||
|
|
||||||
# about
|
# about
|
||||||
|
@ -38,13 +40,14 @@ def request(query, params):
|
||||||
def response(resp):
|
def response(resp):
|
||||||
results = []
|
results = []
|
||||||
xmldom = etree.fromstring(resp.content)
|
xmldom = etree.fromstring(resp.content)
|
||||||
xmlsearchresult = eval_xpath_getindex(xmldom, '//searchresult', 0)
|
xmlsearchresult = eval_xpath_getindex(xmldom, '//data', 0)
|
||||||
dom = html.fragment_fromstring(xmlsearchresult.text, create_parent='div')
|
dom = html.fragment_fromstring(xmlsearchresult.text, create_parent='div')
|
||||||
for link in eval_xpath_list(dom, '/div/table/tr/td/div[2]//a'):
|
for link in eval_xpath_list(dom, '//a'):
|
||||||
url = urljoin(base_url, link.attrib.get('href'))
|
url = urljoin(base_url, link.attrib.get('href'))
|
||||||
title = extract_text(link)
|
title = extract_text(link)
|
||||||
thumbnail_src = urljoin(gallery_url, eval_xpath_getindex(link, './/img', 0).attrib['src'])
|
thumbnail_src = urljoin(
|
||||||
|
gallery_url, (eval_xpath_getindex(link, './/img', 0).attrib['src']).replace(base_url, '')
|
||||||
|
)
|
||||||
# append result
|
# append result
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,9 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
||||||
|
from typing import Optional, Union
|
||||||
|
|
||||||
|
|
||||||
class SearxException(Exception):
|
class SearxException(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -35,7 +38,7 @@ class SearxParameterException(SearxException):
|
||||||
class SearxSettingsException(SearxException):
|
class SearxSettingsException(SearxException):
|
||||||
"""Error while loading the settings"""
|
"""Error while loading the settings"""
|
||||||
|
|
||||||
def __init__(self, message, filename):
|
def __init__(self, message: Union[str, Exception], filename: Optional[str]):
|
||||||
super().__init__(message)
|
super().__init__(message)
|
||||||
self.message = message
|
self.message = message
|
||||||
self.filename = filename
|
self.filename = filename
|
||||||
|
|
|
@ -0,0 +1,71 @@
|
||||||
|
# About [searxng][url_for:index]
|
||||||
|
|
||||||
|
SearXNG is a fork from the well-known [searx] [metasearch engine], aggregating
|
||||||
|
the results of other [search engines][url_for:preferences] while not storing
|
||||||
|
information about its users.
|
||||||
|
|
||||||
|
More about SearXNG ...
|
||||||
|
|
||||||
|
* [SearXNG sources][brand.git_url]
|
||||||
|
* [weblate]
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Why use it?
|
||||||
|
|
||||||
|
* SearXNG may not offer you as personalised results as Google,
|
||||||
|
but it doesn't generate a profile about you.
|
||||||
|
|
||||||
|
* SearXNG doesn't care about what you search for, never shares anything
|
||||||
|
with a third party, and it can't be used to compromise you.
|
||||||
|
|
||||||
|
* SearXNG is free software, the code is 100% open and you can help
|
||||||
|
to make it better. See more on [SearXNG sources][brand.git_url].
|
||||||
|
|
||||||
|
If you do care about privacy, want to be a conscious user, or otherwise
|
||||||
|
believe in digital freedom, make SearXNG your default search engine or run
|
||||||
|
it on your own server
|
||||||
|
|
||||||
|
## Technical details - How does it work?
|
||||||
|
|
||||||
|
SearXNG is a [metasearch engine], inspired by the [seeks project]. It provides
|
||||||
|
basic privacy by mixing your queries with searches on other platforms without
|
||||||
|
storing search data. Queries are made using a POST request on every browser
|
||||||
|
(except Chromium-based browsers*). Therefore they show up in neither our logs,
|
||||||
|
nor your url history. In the case of Chromium-based browser users there is an
|
||||||
|
exception: searx uses the search bar to perform GET requests. SearXNG can be
|
||||||
|
added to your browser's search bar; moreover, it can be set as the default
|
||||||
|
search engine.
|
||||||
|
|
||||||
|
<span id='add to browser'></span>
|
||||||
|
## How to set as the default search engine?
|
||||||
|
|
||||||
|
SearXNG supports [OpenSearch]. For more information on changing your default
|
||||||
|
search engine, see your browser's documentation:
|
||||||
|
|
||||||
|
* [Firefox](https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox)
|
||||||
|
* [Microsoft Edge](https://support.microsoft.com/en-us/help/4028574/microsoft-edge-change-the-default-search-engine)
|
||||||
|
* Chromium-based browsers [only add websites that the user navigates to without a path.](https://www.chromium.org/tab-to-search)
|
||||||
|
|
||||||
|
## Where to find anonymous usage statistics of this instance ?
|
||||||
|
|
||||||
|
[Stats page][url_for:stats] contains some useful data about the engines used.
|
||||||
|
|
||||||
|
## How can I make it my own?
|
||||||
|
|
||||||
|
SearXNG appreciates your concern regarding logs, so take the code from
|
||||||
|
the [SearXNG project][brand.git_url] and run it yourself!
|
||||||
|
|
||||||
|
Add your instance to this [list of public instances][brand.public_instances] to
|
||||||
|
help other people reclaim their privacy and make the Internet freer! The more
|
||||||
|
decentralized the Internet is, the more freedom we have!
|
||||||
|
|
||||||
|
## Where are the docs & code of this instance?
|
||||||
|
|
||||||
|
See the [SearXNG docs][brand.docs_url] and [SearXNG sources][brand.git_url]
|
||||||
|
|
||||||
|
[searx]: https://github.com/searx/searx
|
||||||
|
[metasearch engine]: https://en.wikipedia.org/wiki/Metasearch_engine
|
||||||
|
[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
|
|
@ -5,40 +5,18 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import threading
|
import threading
|
||||||
import concurrent.futures
|
import concurrent.futures
|
||||||
|
from queue import SimpleQueue
|
||||||
from types import MethodType
|
from types import MethodType
|
||||||
from timeit import default_timer
|
from timeit import default_timer
|
||||||
|
from typing import Iterable, Tuple
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
import anyio
|
import anyio
|
||||||
import h2.exceptions
|
|
||||||
|
|
||||||
from .network import get_network, initialize, check_network_configuration
|
from .network import get_network, initialize, check_network_configuration
|
||||||
from .client import get_loop
|
from .client import get_loop
|
||||||
from .raise_for_httperror import raise_for_httperror
|
from .raise_for_httperror import raise_for_httperror
|
||||||
|
|
||||||
# queue.SimpleQueue: Support Python 3.6
|
|
||||||
try:
|
|
||||||
from queue import SimpleQueue
|
|
||||||
except ImportError:
|
|
||||||
from queue import Empty
|
|
||||||
from collections import deque
|
|
||||||
|
|
||||||
class SimpleQueue:
|
|
||||||
"""Minimal backport of queue.SimpleQueue"""
|
|
||||||
|
|
||||||
def __init__(self):
|
|
||||||
self._queue = deque()
|
|
||||||
self._count = threading.Semaphore(0)
|
|
||||||
|
|
||||||
def put(self, item):
|
|
||||||
self._queue.append(item)
|
|
||||||
self._count.release()
|
|
||||||
|
|
||||||
def get(self):
|
|
||||||
if not self._count.acquire(True): # pylint: disable=consider-using-with
|
|
||||||
raise Empty
|
|
||||||
return self._queue.popleft()
|
|
||||||
|
|
||||||
|
|
||||||
THREADLOCAL = threading.local()
|
THREADLOCAL = threading.local()
|
||||||
"""Thread-local data is data for thread specific values."""
|
"""Thread-local data is data for thread specific values."""
|
||||||
|
@ -210,7 +188,7 @@ def _close_response_method(self):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
def stream(method, url, **kwargs):
|
def stream(method, url, **kwargs) -> Tuple[httpx.Response, Iterable[bytes]]:
|
||||||
"""Replace httpx.stream.
|
"""Replace httpx.stream.
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import logging
|
import logging
|
||||||
|
from ssl import SSLContext
|
||||||
import threading
|
import threading
|
||||||
|
from typing import Any, Dict
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
from httpx_socks import AsyncProxyTransport
|
from httpx_socks import AsyncProxyTransport
|
||||||
|
@ -23,7 +25,7 @@ else:
|
||||||
|
|
||||||
logger = logger.getChild('searx.network.client')
|
logger = logger.getChild('searx.network.client')
|
||||||
LOOP = None
|
LOOP = None
|
||||||
SSLCONTEXTS = {}
|
SSLCONTEXTS: Dict[Any, SSLContext] = {}
|
||||||
TRANSPORT_KWARGS = {
|
TRANSPORT_KWARGS = {
|
||||||
'trust_env': False,
|
'trust_env': False,
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@ import atexit
|
||||||
import asyncio
|
import asyncio
|
||||||
import ipaddress
|
import ipaddress
|
||||||
from itertools import cycle
|
from itertools import cycle
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
|
@ -16,7 +17,7 @@ from .client import new_client, get_loop, AsyncHTTPTransportNoHttp
|
||||||
|
|
||||||
logger = logger.getChild('network')
|
logger = logger.getChild('network')
|
||||||
DEFAULT_NAME = '__DEFAULT__'
|
DEFAULT_NAME = '__DEFAULT__'
|
||||||
NETWORKS = {}
|
NETWORKS: Dict[str, 'Network'] = {}
|
||||||
# requests compatibility when reading proxy settings from settings.yml
|
# requests compatibility when reading proxy settings from settings.yml
|
||||||
PROXY_PATTERN_MAPPING = {
|
PROXY_PATTERN_MAPPING = {
|
||||||
'http': 'http://',
|
'http': 'http://',
|
||||||
|
@ -166,13 +167,14 @@ class Network:
|
||||||
for transport in client._mounts.values(): # pylint: disable=protected-access
|
for transport in client._mounts.values(): # pylint: disable=protected-access
|
||||||
if isinstance(transport, AsyncHTTPTransportNoHttp):
|
if isinstance(transport, AsyncHTTPTransportNoHttp):
|
||||||
continue
|
continue
|
||||||
if not getattr(transport, '_rdns', False):
|
if getattr(transport, "_pool") and getattr(
|
||||||
result = False
|
transport._pool, "_rdns", False # pylint: disable=protected-access
|
||||||
break
|
):
|
||||||
else:
|
continue
|
||||||
response = await client.get('https://check.torproject.org/api/ip')
|
return False
|
||||||
if not response.json()['IsTor']:
|
response = await client.get("https://check.torproject.org/api/ip", timeout=10)
|
||||||
result = False
|
if not response.json()["IsTor"]:
|
||||||
|
result = False
|
||||||
Network._TOR_CHECK_RESULT[proxies] = result
|
Network._TOR_CHECK_RESULT[proxies] = result
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ from os.path import abspath, basename, dirname, exists, join
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
from pkgutil import iter_modules
|
from pkgutil import iter_modules
|
||||||
from logging import getLogger
|
from logging import getLogger
|
||||||
from typing import List
|
from typing import List, Tuple
|
||||||
|
|
||||||
from searx import logger, settings
|
from searx import logger, settings
|
||||||
|
|
||||||
|
@ -22,6 +22,9 @@ class Plugin: # pylint: disable=too-few-public-methods
|
||||||
name: str
|
name: str
|
||||||
description: str
|
description: str
|
||||||
default_on: bool
|
default_on: bool
|
||||||
|
js_dependencies: Tuple[str]
|
||||||
|
css_dependencies: Tuple[str]
|
||||||
|
preference_section: str
|
||||||
|
|
||||||
|
|
||||||
logger = logger.getChild("plugins")
|
logger = logger.getChild("plugins")
|
||||||
|
|
|
@ -2,7 +2,9 @@ import re
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from threading import RLock
|
from threading import RLock
|
||||||
|
from typing import List, NamedTuple, Set
|
||||||
from urllib.parse import urlparse, unquote
|
from urllib.parse import urlparse, unquote
|
||||||
|
|
||||||
from searx import logger
|
from searx import logger
|
||||||
from searx.engines import engines
|
from searx.engines import engines
|
||||||
from searx.metrics import histogram_observe, counter_add, count_error
|
from searx.metrics import histogram_observe, counter_add, count_error
|
||||||
|
@ -137,6 +139,18 @@ def result_score(result):
|
||||||
return sum((occurences * weight) / position for position in result['positions'])
|
return sum((occurences * weight) / position for position in result['positions'])
|
||||||
|
|
||||||
|
|
||||||
|
class Timing(NamedTuple):
|
||||||
|
engine: str
|
||||||
|
total: float
|
||||||
|
load: float
|
||||||
|
|
||||||
|
|
||||||
|
class UnresponsiveEngine(NamedTuple):
|
||||||
|
engine: str
|
||||||
|
error_type: str
|
||||||
|
suspended: bool
|
||||||
|
|
||||||
|
|
||||||
class ResultContainer:
|
class ResultContainer:
|
||||||
"""docstring for ResultContainer"""
|
"""docstring for ResultContainer"""
|
||||||
|
|
||||||
|
@ -168,8 +182,8 @@ class ResultContainer:
|
||||||
self.engine_data = defaultdict(dict)
|
self.engine_data = defaultdict(dict)
|
||||||
self._closed = False
|
self._closed = False
|
||||||
self.paging = False
|
self.paging = False
|
||||||
self.unresponsive_engines = set()
|
self.unresponsive_engines: Set[UnresponsiveEngine] = set()
|
||||||
self.timings = []
|
self.timings: List[Timing] = []
|
||||||
self.redirect_url = None
|
self.redirect_url = None
|
||||||
self.on_result = lambda _: True
|
self.on_result = lambda _: True
|
||||||
self._lock = RLock()
|
self._lock = RLock()
|
||||||
|
@ -401,17 +415,12 @@ class ResultContainer:
|
||||||
return 0
|
return 0
|
||||||
return resultnum_sum / len(self._number_of_results)
|
return resultnum_sum / len(self._number_of_results)
|
||||||
|
|
||||||
def add_unresponsive_engine(self, engine_name, error_type, error_message=None, suspended=False):
|
def add_unresponsive_engine(self, engine_name: str, error_type: str, suspended: bool = False):
|
||||||
if engines[engine_name].display_error_messages:
|
if engines[engine_name].display_error_messages:
|
||||||
self.unresponsive_engines.add((engine_name, error_type, error_message, suspended))
|
self.unresponsive_engines.add(UnresponsiveEngine(engine_name, error_type, suspended))
|
||||||
|
|
||||||
def add_timing(self, engine_name, engine_time, page_load_time):
|
def add_timing(self, engine_name: str, engine_time: float, page_load_time: float):
|
||||||
timing = {
|
self.timings.append(Timing(engine_name, total=engine_time, load=page_load_time))
|
||||||
'engine': engines[engine_name].shortcut,
|
|
||||||
'total': engine_time,
|
|
||||||
'load': page_load_time,
|
|
||||||
}
|
|
||||||
self.timings.append(timing)
|
|
||||||
|
|
||||||
def get_timings(self):
|
def get_timings(self):
|
||||||
return self.timings
|
return self.timings
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
# lint: pylint
|
# lint: pylint
|
||||||
# pylint: disable=missing-module-docstring
|
# pylint: disable=missing-module-docstring
|
||||||
|
# pyright: strict
|
||||||
|
|
||||||
import json
|
import json
|
||||||
import random
|
import random
|
||||||
|
@ -8,6 +9,8 @@ import time
|
||||||
import threading
|
import threading
|
||||||
import os
|
import os
|
||||||
import signal
|
import signal
|
||||||
|
from typing import Dict, Union, List, Any, Tuple
|
||||||
|
from typing_extensions import TypedDict, Literal
|
||||||
|
|
||||||
from searx import logger, settings, searx_debug
|
from searx import logger, settings, searx_debug
|
||||||
from searx.exceptions import SearxSettingsException
|
from searx.exceptions import SearxSettingsException
|
||||||
|
@ -20,17 +23,58 @@ CHECKER_RESULT = 'CHECKER_RESULT'
|
||||||
running = threading.Lock()
|
running = threading.Lock()
|
||||||
|
|
||||||
|
|
||||||
def _get_interval(every, error_msg):
|
CheckerResult = Union['CheckerOk', 'CheckerErr', 'CheckerOther']
|
||||||
|
|
||||||
|
|
||||||
|
class CheckerOk(TypedDict):
|
||||||
|
"""Checking the engines succeeded"""
|
||||||
|
|
||||||
|
status: Literal['ok']
|
||||||
|
engines: Dict[str, 'EngineResult']
|
||||||
|
timestamp: int
|
||||||
|
|
||||||
|
|
||||||
|
class CheckerErr(TypedDict):
|
||||||
|
"""Checking the engines failed"""
|
||||||
|
|
||||||
|
status: Literal['error']
|
||||||
|
timestamp: int
|
||||||
|
|
||||||
|
|
||||||
|
class CheckerOther(TypedDict):
|
||||||
|
"""The status is unknown or disabled"""
|
||||||
|
|
||||||
|
status: Literal['unknown', 'disabled']
|
||||||
|
|
||||||
|
|
||||||
|
EngineResult = Union['EngineOk', 'EngineErr']
|
||||||
|
|
||||||
|
|
||||||
|
class EngineOk(TypedDict):
|
||||||
|
"""Checking the engine succeeded"""
|
||||||
|
|
||||||
|
success: Literal[True]
|
||||||
|
|
||||||
|
|
||||||
|
class EngineErr(TypedDict):
|
||||||
|
"""Checking the engine failed"""
|
||||||
|
|
||||||
|
success: Literal[False]
|
||||||
|
errors: Dict[str, List[str]]
|
||||||
|
|
||||||
|
|
||||||
|
def _get_interval(every: Any, error_msg: str) -> Tuple[int, int]:
|
||||||
if isinstance(every, int):
|
if isinstance(every, int):
|
||||||
every = (every, every)
|
return (every, every)
|
||||||
|
|
||||||
if (
|
if (
|
||||||
not isinstance(every, (tuple, list))
|
not isinstance(every, (tuple, list))
|
||||||
or len(every) != 2
|
or len(every) != 2 # type: ignore
|
||||||
or not isinstance(every[0], int)
|
or not isinstance(every[0], int)
|
||||||
or not isinstance(every[1], int)
|
or not isinstance(every[1], int)
|
||||||
):
|
):
|
||||||
raise SearxSettingsException(error_msg, None)
|
raise SearxSettingsException(error_msg, None)
|
||||||
return every
|
return (every[0], every[1])
|
||||||
|
|
||||||
|
|
||||||
def _get_every():
|
def _get_every():
|
||||||
|
@ -38,25 +82,27 @@ def _get_every():
|
||||||
return _get_interval(every, 'checker.scheduling.every is not a int or list')
|
return _get_interval(every, 'checker.scheduling.every is not a int or list')
|
||||||
|
|
||||||
|
|
||||||
def get_result():
|
def get_result() -> CheckerResult:
|
||||||
serialized_result = storage.get_str(CHECKER_RESULT)
|
serialized_result = storage.get_str(CHECKER_RESULT)
|
||||||
if serialized_result is not None:
|
if serialized_result is not None:
|
||||||
return json.loads(serialized_result)
|
return json.loads(serialized_result)
|
||||||
return {'status': 'unknown'}
|
return {'status': 'unknown'}
|
||||||
|
|
||||||
|
|
||||||
def _set_result(result, include_timestamp=True):
|
def _set_result(result: CheckerResult):
|
||||||
if include_timestamp:
|
|
||||||
result['timestamp'] = int(time.time() / 3600) * 3600
|
|
||||||
storage.set_str(CHECKER_RESULT, json.dumps(result))
|
storage.set_str(CHECKER_RESULT, json.dumps(result))
|
||||||
|
|
||||||
|
|
||||||
|
def _timestamp():
|
||||||
|
return int(time.time() / 3600) * 3600
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
if not running.acquire(blocking=False): # pylint: disable=consider-using-with
|
if not running.acquire(blocking=False): # pylint: disable=consider-using-with
|
||||||
return
|
return
|
||||||
try:
|
try:
|
||||||
logger.info('Starting checker')
|
logger.info('Starting checker')
|
||||||
result = {'status': 'ok', 'engines': {}}
|
result: CheckerOk = {'status': 'ok', 'engines': {}, 'timestamp': _timestamp()}
|
||||||
for name, processor in PROCESSORS.items():
|
for name, processor in PROCESSORS.items():
|
||||||
logger.debug('Checking %s engine', name)
|
logger.debug('Checking %s engine', name)
|
||||||
checker = Checker(processor)
|
checker = Checker(processor)
|
||||||
|
@ -69,7 +115,7 @@ def run():
|
||||||
_set_result(result)
|
_set_result(result)
|
||||||
logger.info('Check done')
|
logger.info('Check done')
|
||||||
except Exception: # pylint: disable=broad-except
|
except Exception: # pylint: disable=broad-except
|
||||||
_set_result({'status': 'error'})
|
_set_result({'status': 'error', 'timestamp': _timestamp()})
|
||||||
logger.exception('Error while running the checker')
|
logger.exception('Error while running the checker')
|
||||||
finally:
|
finally:
|
||||||
running.release()
|
running.release()
|
||||||
|
@ -89,7 +135,7 @@ def _start_scheduling():
|
||||||
run()
|
run()
|
||||||
|
|
||||||
|
|
||||||
def _signal_handler(_signum, _frame):
|
def _signal_handler(_signum: int, _frame: Any):
|
||||||
t = threading.Thread(target=run)
|
t = threading.Thread(target=run)
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
t.start()
|
t.start()
|
||||||
|
@ -102,7 +148,7 @@ def initialize():
|
||||||
signal.signal(signal.SIGUSR1, _signal_handler)
|
signal.signal(signal.SIGUSR1, _signal_handler)
|
||||||
|
|
||||||
# disabled by default
|
# disabled by default
|
||||||
_set_result({'status': 'disabled'}, include_timestamp=False)
|
_set_result({'status': 'disabled'})
|
||||||
|
|
||||||
# special case when debug is activate
|
# special case when debug is activate
|
||||||
if searx_debug and settings.get('checker', {}).get('off_when_debug', True):
|
if searx_debug and settings.get('checker', {}).get('off_when_debug', True):
|
||||||
|
@ -116,7 +162,7 @@ def initialize():
|
||||||
return
|
return
|
||||||
|
|
||||||
#
|
#
|
||||||
_set_result({'status': 'unknown'}, include_timestamp=False)
|
_set_result({'status': 'unknown'})
|
||||||
|
|
||||||
start_after = scheduling.get('start_after', (300, 1800))
|
start_after = scheduling.get('start_after', (300, 1800))
|
||||||
start_after = _get_interval(start_after, 'checker.scheduling.start_after is not a int or list')
|
start_after = _get_interval(start_after, 'checker.scheduling.start_after is not a int or list')
|
||||||
|
|
|
@ -74,7 +74,7 @@ def _download_and_check_if_image(image_url: str) -> bool:
|
||||||
try:
|
try:
|
||||||
# use "image_proxy" (avoid HTTP/2)
|
# use "image_proxy" (avoid HTTP/2)
|
||||||
network.set_context_network_name('image_proxy')
|
network.set_context_network_name('image_proxy')
|
||||||
stream = network.stream(
|
r, stream = network.stream(
|
||||||
'GET',
|
'GET',
|
||||||
image_url,
|
image_url,
|
||||||
timeout=10.0,
|
timeout=10.0,
|
||||||
|
@ -91,7 +91,6 @@ def _download_and_check_if_image(image_url: str) -> bool:
|
||||||
'Cache-Control': 'max-age=0',
|
'Cache-Control': 'max-age=0',
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
r = next(stream)
|
|
||||||
r.close()
|
r.close()
|
||||||
if r.status_code == 200:
|
if r.status_code == 200:
|
||||||
is_image = r.headers.get('content-type', '').startswith('image/')
|
is_image = r.headers.get('content-type', '').startswith('image/')
|
||||||
|
|
|
@ -11,10 +11,12 @@ __all__ = [
|
||||||
'OnlineProcessor',
|
'OnlineProcessor',
|
||||||
'OnlineDictionaryProcessor',
|
'OnlineDictionaryProcessor',
|
||||||
'OnlineCurrencyProcessor',
|
'OnlineCurrencyProcessor',
|
||||||
|
'OnlineUrlSearchProcessor',
|
||||||
'PROCESSORS',
|
'PROCESSORS',
|
||||||
]
|
]
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
|
from typing import Dict
|
||||||
|
|
||||||
from searx import logger
|
from searx import logger
|
||||||
from searx import engines
|
from searx import engines
|
||||||
|
@ -23,16 +25,23 @@ from .online import OnlineProcessor
|
||||||
from .offline import OfflineProcessor
|
from .offline import OfflineProcessor
|
||||||
from .online_dictionary import OnlineDictionaryProcessor
|
from .online_dictionary import OnlineDictionaryProcessor
|
||||||
from .online_currency import OnlineCurrencyProcessor
|
from .online_currency import OnlineCurrencyProcessor
|
||||||
|
from .online_url_search import OnlineUrlSearchProcessor
|
||||||
from .abstract import EngineProcessor
|
from .abstract import EngineProcessor
|
||||||
|
|
||||||
logger = logger.getChild('search.processors')
|
logger = logger.getChild('search.processors')
|
||||||
PROCESSORS = {}
|
PROCESSORS: Dict[str, EngineProcessor] = {}
|
||||||
"""Cache request processores, stored by *engine-name* (:py:func:`initialize`)"""
|
"""Cache request processores, stored by *engine-name* (:py:func:`initialize`)"""
|
||||||
|
|
||||||
|
|
||||||
def get_processor_class(engine_type):
|
def get_processor_class(engine_type):
|
||||||
"""Return processor class according to the ``engine_type``"""
|
"""Return processor class according to the ``engine_type``"""
|
||||||
for c in [OnlineProcessor, OfflineProcessor, OnlineDictionaryProcessor, OnlineCurrencyProcessor]:
|
for c in [
|
||||||
|
OnlineProcessor,
|
||||||
|
OfflineProcessor,
|
||||||
|
OnlineDictionaryProcessor,
|
||||||
|
OnlineCurrencyProcessor,
|
||||||
|
OnlineUrlSearchProcessor,
|
||||||
|
]:
|
||||||
if c.engine_type == engine_type:
|
if c.engine_type == engine_type:
|
||||||
return c
|
return c
|
||||||
return None
|
return None
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
import threading
|
import threading
|
||||||
from abc import abstractmethod, ABC
|
from abc import abstractmethod, ABC
|
||||||
from timeit import default_timer
|
from timeit import default_timer
|
||||||
|
from typing import Dict, Union
|
||||||
|
|
||||||
from searx import settings, logger
|
from searx import settings, logger
|
||||||
from searx.engines import engines
|
from searx.engines import engines
|
||||||
|
@ -17,7 +18,7 @@ from searx.exceptions import SearxEngineAccessDeniedException, SearxEngineRespon
|
||||||
from searx.utils import get_engine_from_settings
|
from searx.utils import get_engine_from_settings
|
||||||
|
|
||||||
logger = logger.getChild('searx.search.processor')
|
logger = logger.getChild('searx.search.processor')
|
||||||
SUSPENDED_STATUS = {}
|
SUSPENDED_STATUS: Dict[Union[int, str], 'SuspendedStatus'] = {}
|
||||||
|
|
||||||
|
|
||||||
class SuspendedStatus:
|
class SuspendedStatus:
|
||||||
|
@ -61,7 +62,7 @@ class EngineProcessor(ABC):
|
||||||
|
|
||||||
__slots__ = 'engine', 'engine_name', 'lock', 'suspended_status', 'logger'
|
__slots__ = 'engine', 'engine_name', 'lock', 'suspended_status', 'logger'
|
||||||
|
|
||||||
def __init__(self, engine, engine_name):
|
def __init__(self, engine, engine_name: str):
|
||||||
self.engine = engine
|
self.engine = engine
|
||||||
self.engine_name = engine_name
|
self.engine_name = engine_name
|
||||||
self.logger = engines[engine_name].logger
|
self.logger = engines[engine_name].logger
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
# lint: pylint
|
||||||
|
"""Processores for engine-type: ``online_url_search``
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
import re
|
||||||
|
from .online import OnlineProcessor
|
||||||
|
|
||||||
|
re_search_urls = {
|
||||||
|
'http': re.compile(r'https?:\/\/[^ ]*'),
|
||||||
|
'ftp': re.compile(r'ftps?:\/\/[^ ]*'),
|
||||||
|
'data:image': re.compile('data:image/[^; ]*;base64,[^ ]*'),
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class OnlineUrlSearchProcessor(OnlineProcessor):
|
||||||
|
"""Processor class used by ``online_url_search`` engines."""
|
||||||
|
|
||||||
|
engine_type = 'online_url_search'
|
||||||
|
|
||||||
|
def get_params(self, search_query, engine_category):
|
||||||
|
params = super().get_params(search_query, engine_category)
|
||||||
|
if params is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
url_match = False
|
||||||
|
search_urls = {}
|
||||||
|
|
||||||
|
for k, v in re_search_urls.items():
|
||||||
|
m = v.search(search_query.query)
|
||||||
|
v = None
|
||||||
|
if m:
|
||||||
|
url_match = True
|
||||||
|
v = m[0]
|
||||||
|
search_urls[k] = v
|
||||||
|
|
||||||
|
if not url_match:
|
||||||
|
return None
|
||||||
|
|
||||||
|
params['search_urls'] = search_urls
|
||||||
|
return params
|
|
@ -483,6 +483,11 @@ engines:
|
||||||
timeout: 3.0
|
timeout: 3.0
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
|
- name: tineye
|
||||||
|
engine: tineye
|
||||||
|
shortcut: tin
|
||||||
|
timeout: 9.0
|
||||||
|
|
||||||
- name: etymonline
|
- name: etymonline
|
||||||
engine: xpath
|
engine: xpath
|
||||||
paging: true
|
paging: true
|
||||||
|
@ -777,11 +782,16 @@ engines:
|
||||||
|
|
||||||
- name: invidious
|
- name: invidious
|
||||||
engine: invidious
|
engine: invidious
|
||||||
|
# Instanes will be selected randomly, see https://api.invidious.io/ for
|
||||||
|
# instances that are stable (good uptime) and close to you.
|
||||||
base_url:
|
base_url:
|
||||||
- https://invidious.tube/
|
|
||||||
- https://invidious.snopyta.org/
|
- https://invidious.snopyta.org/
|
||||||
|
- https://vid.puffyan.us/
|
||||||
|
- https://invidious.kavin.rocks/
|
||||||
|
- https://invidio.xamh.de/
|
||||||
|
- https://inv.riverside.rocks/
|
||||||
shortcut: iv
|
shortcut: iv
|
||||||
timeout: 5.0
|
timeout: 3.0
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: kickass
|
- name: kickass
|
||||||
|
@ -1455,7 +1465,7 @@ engines:
|
||||||
# Or you can use the html non-stable engine, activated by default
|
# Or you can use the html non-stable engine, activated by default
|
||||||
engine: wolframalpha_noapi
|
engine: wolframalpha_noapi
|
||||||
timeout: 6.0
|
timeout: 6.0
|
||||||
categories: science
|
categories: []
|
||||||
|
|
||||||
- name: dictzone
|
- name: dictzone
|
||||||
engine: dictzone
|
engine: dictzone
|
||||||
|
|
|
@ -20,6 +20,7 @@ A redis DB connect can be tested by::
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
import redis
|
||||||
from searx import get_setting
|
from searx import get_setting
|
||||||
|
|
||||||
logger = logging.getLogger('searx.shared.redis')
|
logger = logging.getLogger('searx.shared.redis')
|
||||||
|
@ -28,8 +29,6 @@ _client = None
|
||||||
|
|
||||||
def client():
|
def client():
|
||||||
global _client # pylint: disable=global-statement
|
global _client # pylint: disable=global-statement
|
||||||
import redis # pylint: disable=import-error, import-outside-toplevel
|
|
||||||
|
|
||||||
if _client is None:
|
if _client is None:
|
||||||
# not thread safe: in the worst case scenario, two or more clients are
|
# not thread safe: in the worst case scenario, two or more clients are
|
||||||
# initialized only one is kept, the others are garbage collected.
|
# initialized only one is kept, the others are garbage collected.
|
||||||
|
@ -38,8 +37,6 @@ def client():
|
||||||
|
|
||||||
|
|
||||||
def init():
|
def init():
|
||||||
import redis # pylint: disable=import-error, import-outside-toplevel
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
c = client()
|
c = client()
|
||||||
logger.info("connected redis DB --> %s", c.acl_whoami())
|
logger.info("connected redis DB --> %s", c.acl_whoami())
|
||||||
|
|
|
@ -1,20 +1,22 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
# pyright: strict
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
class SharedDict(ABC):
|
class SharedDict(ABC):
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_int(self, key):
|
def get_int(self, key: str) -> Optional[int]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def set_int(self, key, value):
|
def set_int(self, key: str, value: int):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_str(self, key):
|
def get_str(self, key: str) -> Optional[str]:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def set_str(self, key, value):
|
def set_str(self, key: str, value: str):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from . import shared_abstract
|
from . import shared_abstract
|
||||||
|
|
||||||
|
@ -12,16 +13,16 @@ class SimpleSharedDict(shared_abstract.SharedDict):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.d = {}
|
self.d = {}
|
||||||
|
|
||||||
def get_int(self, key):
|
def get_int(self, key: str) -> Optional[int]:
|
||||||
return self.d.get(key, None)
|
return self.d.get(key, None)
|
||||||
|
|
||||||
def set_int(self, key, value):
|
def set_int(self, key: str, value: int):
|
||||||
self.d[key] = value
|
self.d[key] = value
|
||||||
|
|
||||||
def get_str(self, key):
|
def get_str(self, key: str) -> Optional[str]:
|
||||||
return self.d.get(key, None)
|
return self.d.get(key, None)
|
||||||
|
|
||||||
def set_str(self, key, value):
|
def set_str(self, key: str, value: str):
|
||||||
self.d[key] = value
|
self.d[key] = value
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
from typing import Optional
|
||||||
import uwsgi # pylint: disable=E0401
|
import uwsgi # pylint: disable=E0401
|
||||||
from . import shared_abstract
|
from . import shared_abstract
|
||||||
|
|
||||||
|
@ -9,25 +10,25 @@ _last_signal = 10
|
||||||
|
|
||||||
|
|
||||||
class UwsgiCacheSharedDict(shared_abstract.SharedDict):
|
class UwsgiCacheSharedDict(shared_abstract.SharedDict):
|
||||||
def get_int(self, key):
|
def get_int(self, key: str) -> Optional[int]:
|
||||||
value = uwsgi.cache_get(key)
|
value = uwsgi.cache_get(key)
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
return int.from_bytes(value, 'big')
|
return int.from_bytes(value, 'big')
|
||||||
|
|
||||||
def set_int(self, key, value):
|
def set_int(self, key: str, value: int):
|
||||||
b = value.to_bytes(4, 'big')
|
b = value.to_bytes(4, 'big')
|
||||||
uwsgi.cache_update(key, b)
|
uwsgi.cache_update(key, b)
|
||||||
|
|
||||||
def get_str(self, key):
|
def get_str(self, key: str) -> Optional[str]:
|
||||||
value = uwsgi.cache_get(key)
|
value = uwsgi.cache_get(key)
|
||||||
if value is None:
|
if value is None:
|
||||||
return value
|
return value
|
||||||
else:
|
else:
|
||||||
return value.decode('utf-8')
|
return value.decode('utf-8')
|
||||||
|
|
||||||
def set_str(self, key, value):
|
def set_str(self, key: str, value: str):
|
||||||
b = value.encode('utf-8')
|
b = value.encode('utf-8')
|
||||||
uwsgi.cache_update(key, b)
|
uwsgi.cache_update(key, b)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* (C) Copyright Contributors to the searx project (2014 - 2021).
|
* (C) Copyright Contributors to the searx project (2014 - 2021).
|
||||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
window.searxng=function(t){"use strict";t.getElementsByTagName("html")[0].className="js";var e=t.currentScript||(e=t.getElementsByTagName("script"))[e.length-1];return{autocompleter:"true"===e.getAttribute("data-autocompleter"),method:e.getAttribute("data-method"),translations:JSON.parse(e.getAttribute("data-translations"))}}(document),
|
window.searxng=function(t){"use strict";t.getElementsByTagName("html")[0].className="js";t=t.currentScript||(t=t.getElementsByTagName("script"))[t.length-1];return{autocompleter:"true"===t.getAttribute("data-autocompleter"),method:t.getAttribute("data-method"),translations:JSON.parse(t.getAttribute("data-translations"))}}(document),
|
||||||
/**
|
/**
|
||||||
* @license
|
* @license
|
||||||
* (C) Copyright Contributors to the SearXNG project.
|
* (C) Copyright Contributors to the SearXNG project.
|
||||||
|
@ -20,7 +20,7 @@ $(document).ready(function(){var t,a="";searxng.autocompleter&&((t=new Bloodhoun
|
||||||
* (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
|
* (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
|
||||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
$(document).ready(function(){$("#q.autofocus").focus(),$("#clear_search").click(function(){document.getElementById("q").value=""}),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var t=$(this).data("btn-text-collapsed"),e=$(this).data("btn-text-not-collapsed");""!==t&&""!==e&&(new_html=$(this).hasClass("collapsed")?$(this).html().replace(t,e):$(this).html().replace(e,t),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var t="btn-"+$(this).data("btn-class"),e=$(this).data("btn-label-default"),a=$(this).data("btn-label-toggled");""!==a&&(new_html=$(this).hasClass("btn-default")?$(this).html().replace(e,a):$(this).html().replace(a,e),$(this).html(new_html)),$(this).toggleClass(t),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var t=$(this).data("target"),e=$(t+" > iframe"),t=e.attr("src");void 0!==t&&!1!==t||e.attr("src",e.data("src"))}),$(".btn-sm").dblclick(function(){var t="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(t),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(t),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))}),$(".nav-tabs").click(function(t){$(t.target).parents("ul").children().attr("aria-selected","false"),$(t.target).parent().attr("aria-selected","true")}),searxng.image_thumbnail_layout=new searxng.ImageLayout("#main_results","#main_results .result-images","img.img-thumbnail",15,3,200),searxng.image_thumbnail_layout.watch()}),
|
$(document).ready(function(){$("#q.autofocus").focus(),$("#clear_search").click(function(){document.getElementById("q").value=""}),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var t=$(this).data("btn-text-collapsed"),e=$(this).data("btn-text-not-collapsed");""!==t&&""!==e&&(new_html=$(this).hasClass("collapsed")?$(this).html().replace(t,e):$(this).html().replace(e,t),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var t="btn-"+$(this).data("btn-class"),e=$(this).data("btn-label-default"),a=$(this).data("btn-label-toggled");""!==a&&(new_html=$(this).hasClass("btn-default")?$(this).html().replace(e,a):$(this).html().replace(a,e),$(this).html(new_html)),$(this).toggleClass(t),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var t=$(this).data("target"),t=$(t+" > iframe"),e=t.attr("src");void 0!==e&&!1!==e||t.attr("src",t.data("src"))}),$(".btn-sm").dblclick(function(){var t="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(t),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(t),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))}),$(".nav-tabs").click(function(t){$(t.target).parents("ul").children().attr("aria-selected","false"),$(t.target).parent().attr("aria-selected","true")}),searxng.image_thumbnail_layout=new searxng.ImageLayout("#main_results","#main_results .result-images","img.img-thumbnail",15,3,200),searxng.image_thumbnail_layout.watch()}),
|
||||||
/**
|
/**
|
||||||
* @license
|
* @license
|
||||||
* (C) Copyright Contributors to the SearXNG project.
|
* (C) Copyright Contributors to the SearXNG project.
|
||||||
|
@ -35,7 +35,7 @@ window.addEventListener("load",function(){$(".infobox").each(function(){var t=$(
|
||||||
* (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
|
* (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
|
||||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
*/
|
*/
|
||||||
$(document).ready(function(){$(".searxng_init_map").on("click",function(t){var e=$(this).data("leaflet-target"),a=$(this).data("map-lon"),n=$(this).data("map-lat"),i=$(this).data("map-zoom"),s=$(this).data("map-boundingbox"),o=$(this).data("map-geojson");s&&(southWest=L.latLng(s[0],s[2]),northEast=L.latLng(s[1],s[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/css/images/";var r=L.map(e),e=new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});new L.TileLayer("https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});setTimeout(function(){map_bounds?r.fitBounds(map_bounds,{maxZoom:17}):a&&n&&(i?r.setView(new L.LatLng(n,a),i):r.setView(new L.LatLng(n,a),8))},0),r.addLayer(e),L.control.layers({"OSM Mapnik":e}).addTo(r),o&&L.geoJson(o).addTo(r),$(this).off(t)})}),
|
$(document).ready(function(){$(".searxng_init_map").on("click",function(t){var e=$(this).data("leaflet-target"),a=$(this).data("map-lon"),n=$(this).data("map-lat"),i=$(this).data("map-zoom"),s=$(this).data("map-boundingbox"),o=$(this).data("map-geojson"),r=(s&&(southWest=L.latLng(s[0],s[2]),northEast=L.latLng(s[1],s[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/css/images/",L.map(e)),s=new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'}),e=(new L.TileLayer("https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'}),setTimeout(function(){map_bounds?r.fitBounds(map_bounds,{maxZoom:17}):a&&n&&(i?r.setView(new L.LatLng(n,a),i):r.setView(new L.LatLng(n,a),8))},0),r.addLayer(s),{"OSM Mapnik":s});L.control.layers(e).addTo(r),o&&L.geoJson(o).addTo(r),$(this).off(t)})}),
|
||||||
/**
|
/**
|
||||||
* @license
|
* @license
|
||||||
* (C) Copyright Contributors to the SearXNG project.
|
* (C) Copyright Contributors to the SearXNG project.
|
||||||
|
@ -71,5 +71,5 @@ $(document).ready(function(){$("#allow-all-engines").click(function(){$(".onoffs
|
||||||
* );
|
* );
|
||||||
* searxng.image_thumbnail_layout.watch();
|
* searxng.image_thumbnail_layout.watch();
|
||||||
*/
|
*/
|
||||||
function(r,c){function t(t,e,a,n,i,s){this.container_selector=t,this.results_selector=e,this.img_selector=a,this.verticalMargin=n,this.horizontalMargin=i,this.maxHeight=s,this.isAlignDone=!0}t.prototype._getHeigth=function(t,e){for(var a,n=0,i=0;i<t.length;i++)0<(a=t[i]).naturalWidth&&0<a.naturalHeight?n+=a.naturalWidth/a.naturalHeight:n+=1;return(e-t.length*this.verticalMargin)/n},t.prototype._setSize=function(t,e){for(var a,n,i=t.length,s=0;s<i;s++)a=0<(n=t[s]).naturalWidth&&0<n.naturalHeight?e*n.naturalWidth/n.naturalHeight:e,n.style.width=a+"px",n.style.height=e+"px",n.style.marginLeft=this.horizontalMargin+"px",n.style.marginTop=this.horizontalMargin+"px",n.style.marginRight=this.verticalMargin-7+"px",n.style.marginBottom=this.verticalMargin-7+"px",(n=n.parentNode.parentNode).classList.contains("js")||n.classList.add("js")},t.prototype._alignImgs=function(t){for(var e,a,n,i,s=c.querySelector(this.container_selector),o=window.getComputedStyle(s),r=parseInt(o.getPropertyValue("padding-left"),10),o=parseInt(o.getPropertyValue("padding-right"),10),l=s.clientWidth-r-o;0<t.length;){for(e=!0,n=1;n<=t.length&&e;n++)a=t.slice(0,n),(i=this._getHeigth(a,l))<this.maxHeight&&(this._setSize(a,i),t=t.slice(n),e=!1);if(e){this._setSize(a,Math.min(this.maxHeight,i));break}}},t.prototype.align=function(){for(var t=c.querySelectorAll(this.results_selector),e=t.length,a=null,n=null,i=[],s=0;s<e;s++)(n=t[s]).previousElementSibling!==a&&0<i.length&&(this._alignImgs(i),i=[]),i.push(n.querySelector(this.img_selector)),a=n;0<i.length&&this._alignImgs(i)},t.prototype.watch=function(){var t,e,a=this,n=c.querySelectorAll(this.results_selector),i=n.length;function s(t){t.originalTarget.src=r.searxng.static_path+r.searxng.theme.img_load_error}function o(){a.isAlignDone&&(a.isAlignDone=!1,setTimeout(function(){a.align(),a.isAlignDone=!0},100))}for(r.addEventListener("pageshow",o),r.addEventListener("load",o),r.addEventListener("resize",o),t=0;t<i;t++)null!=(e=n[t].querySelector(this.img_selector))&&(e.addEventListener("load",o),e.addEventListener("error",o),r.searxng.theme.img_load_error&&e.addEventListener("error",s,{once:!0}))},r.searxng.ImageLayout=t}(window,document);
|
function(r,c){function t(t,e,a,n,i,s){this.container_selector=t,this.results_selector=e,this.img_selector=a,this.verticalMargin=n,this.horizontalMargin=i,this.maxHeight=s,this.isAlignDone=!0}t.prototype._getHeigth=function(t,e){for(var a,n=0,i=0;i<t.length;i++)0<(a=t[i]).naturalWidth&&0<a.naturalHeight?n+=a.naturalWidth/a.naturalHeight:n+=1;return(e-t.length*this.verticalMargin)/n},t.prototype._setSize=function(t,e){for(var a,n,i=t.length,s=0;s<i;s++)n=0<(a=t[s]).naturalWidth&&0<a.naturalHeight?e*a.naturalWidth/a.naturalHeight:e,a.style.width=n+"px",a.style.height=e+"px",a.style.marginLeft=this.horizontalMargin+"px",a.style.marginTop=this.horizontalMargin+"px",a.style.marginRight=this.verticalMargin-7+"px",a.style.marginBottom=this.verticalMargin-7+"px",(n=a.parentNode.parentNode).classList.contains("js")||n.classList.add("js")},t.prototype._alignImgs=function(t){for(var e,a,n,i,s=c.querySelector(this.container_selector),o=window.getComputedStyle(s),r=parseInt(o.getPropertyValue("padding-left"),10),o=parseInt(o.getPropertyValue("padding-right"),10),l=s.clientWidth-r-o;0<t.length;){for(e=!0,n=1;n<=t.length&&e;n++)a=t.slice(0,n),(i=this._getHeigth(a,l))<this.maxHeight&&(this._setSize(a,i),t=t.slice(n),e=!1);if(e){this._setSize(a,Math.min(this.maxHeight,i));break}}},t.prototype.align=function(){for(var t=c.querySelectorAll(this.results_selector),e=t.length,a=null,n=null,i=[],s=0;s<e;s++)(n=t[s]).previousElementSibling!==a&&0<i.length&&(this._alignImgs(i),i=[]),i.push(n.querySelector(this.img_selector)),a=n;0<i.length&&this._alignImgs(i)},t.prototype.watch=function(){var t,e,a=this,n=c.querySelectorAll(this.results_selector),i=n.length;function s(t){t.originalTarget.src=r.searxng.static_path+r.searxng.theme.img_load_error}function o(){a.isAlignDone&&(a.isAlignDone=!1,setTimeout(function(){a.align(),a.isAlignDone=!0},100))}for(r.addEventListener("pageshow",o),r.addEventListener("load",o),r.addEventListener("resize",o),t=0;t<i;t++)null!=(e=n[t].querySelector(this.img_selector))&&(e.addEventListener("load",o),e.addEventListener("error",o),r.searxng.theme.img_load_error&&e.addEventListener("error",s,{once:!0}))},r.searxng.ImageLayout=t}(window,document);
|
||||||
//# sourceMappingURL=searxng.min.js.map
|
//# sourceMappingURL=searxng.min.js.map
|
File diff suppressed because one or more lines are too long
|
@ -1,3 +1,7 @@
|
||||||
{
|
{
|
||||||
"extends": "stylelint-config-standard"
|
"extends": "stylelint-config-standard",
|
||||||
|
"rules": {
|
||||||
|
"declaration-empty-line-before": null,
|
||||||
|
"no-invalid-position-at-import-rule": null
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
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
|
@ -127,7 +127,7 @@ module.exports = function (grunt) {
|
||||||
},
|
},
|
||||||
files: [
|
files: [
|
||||||
{
|
{
|
||||||
src: ['src/less/style.less'],
|
src: ['src/less/style-ltr.less'],
|
||||||
dest: 'css/searxng.min.css',
|
dest: 'css/searxng.min.css',
|
||||||
nonull: true,
|
nonull: true,
|
||||||
filter: file_exists,
|
filter: file_exists,
|
||||||
|
@ -177,7 +177,7 @@ module.exports = function (grunt) {
|
||||||
'chevron-up-outline': 'node_modules/ionicons/dist/svg/chevron-up-outline.svg',
|
'chevron-up-outline': 'node_modules/ionicons/dist/svg/chevron-up-outline.svg',
|
||||||
'chevron-right': 'node_modules/ionicons/dist/svg/chevron-forward-outline.svg',
|
'chevron-right': 'node_modules/ionicons/dist/svg/chevron-forward-outline.svg',
|
||||||
'chevron-left': 'node_modules/ionicons/dist/svg/chevron-back-outline.svg',
|
'chevron-left': 'node_modules/ionicons/dist/svg/chevron-back-outline.svg',
|
||||||
'menu-outline': 'node_modules/ionicons/dist/svg/menu-outline.svg',
|
'menu-outline': 'node_modules/ionicons/dist/svg/settings-outline.svg',
|
||||||
'ellipsis-vertical-outline': 'node_modules/ionicons/dist/svg/ellipsis-vertical-outline.svg',
|
'ellipsis-vertical-outline': 'node_modules/ionicons/dist/svg/ellipsis-vertical-outline.svg',
|
||||||
'magnet-outline': 'node_modules/ionicons/dist/svg/magnet-outline.svg',
|
'magnet-outline': 'node_modules/ionicons/dist/svg/magnet-outline.svg',
|
||||||
'globe-outline': 'node_modules/ionicons/dist/svg/globe-outline.svg',
|
'globe-outline': 'node_modules/ionicons/dist/svg/globe-outline.svg',
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,8 @@
|
||||||
position: absolute;
|
position: absolute;
|
||||||
max-height: 0;
|
max-height: 0;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
|
|
||||||
.rounded-corners;
|
.rounded-corners;
|
||||||
|
|
||||||
&:active,
|
&:active,
|
||||||
|
@ -24,7 +25,7 @@
|
||||||
|
|
||||||
> li {
|
> li {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
padding: 8px 0 8px 8px;
|
padding: 0.5rem;
|
||||||
|
|
||||||
&.active,
|
&.active,
|
||||||
&:active,
|
&:active,
|
||||||
|
|
|
@ -3,8 +3,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_results #results.only_template_images.image-detail-open #backToTop {
|
#main_results #results.only_template_images.image-detail-open #backToTop {
|
||||||
left: 56.75rem !important;
|
.ltr-left(56.75rem) !important;
|
||||||
right: inherit;
|
.ltr-right(inherit);
|
||||||
}
|
}
|
||||||
|
|
||||||
article.result-images .detail {
|
article.result-images .detail {
|
||||||
|
@ -15,8 +15,8 @@ article.result-images .detail {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 60rem;
|
.ltr-left(60rem);
|
||||||
right: 0;
|
.ltr-right(0);
|
||||||
top: @search-height;
|
top: @search-height;
|
||||||
transition: top 0.064s ease-in 0s;
|
transition: top 0.064s ease-in 0s;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
@ -76,7 +76,7 @@ article.result-images .detail {
|
||||||
h4,
|
h4,
|
||||||
p,
|
p,
|
||||||
a {
|
a {
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
}
|
}
|
||||||
|
|
||||||
p.result-content {
|
p.result-content {
|
||||||
|
@ -113,20 +113,23 @@ article.result-images .detail {
|
||||||
|
|
||||||
a.result-detail-close {
|
a.result-detail-close {
|
||||||
top: 1rem;
|
top: 1rem;
|
||||||
left: 1rem;
|
.ltr-left(1rem);
|
||||||
padding: 0.4rem;
|
padding: 0.4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
a.result-detail-previous {
|
a.result-detail-previous {
|
||||||
top: 1rem;
|
top: 1rem;
|
||||||
right: 6rem;
|
.ltr-right(6rem);
|
||||||
// center the icon by moving it slightly on the left
|
// center the icon by moving it slightly on the left
|
||||||
padding: 0.4rem 0.5rem 0.4rem 0.3rem;
|
padding-top: 0.4rem;
|
||||||
|
.ltr-padding-right(0.5rem);
|
||||||
|
padding-bottom: 0.4rem;
|
||||||
|
.ltr-padding-left(0.3rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
a.result-detail-next {
|
a.result-detail-next {
|
||||||
top: 1rem;
|
top: 1rem;
|
||||||
right: 2rem;
|
.ltr-right(2rem);
|
||||||
padding: 0.4rem;
|
padding: 0.4rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +189,7 @@ article.result-images .detail {
|
||||||
.loader {
|
.loader {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 1rem;
|
top: 1rem;
|
||||||
right: 50%;
|
.ltr-right(50%);
|
||||||
border-top: 0.5em solid var(--color-result-detail-loader-border);
|
border-top: 0.5em solid var(--color-result-detail-loader-border);
|
||||||
border-right: 0.5em solid var(--color-result-detail-loader-border);
|
border-right: 0.5em solid var(--color-result-detail-loader-border);
|
||||||
border-bottom: 0.5em solid var(--color-result-detail-loader-border);
|
border-bottom: 0.5em solid var(--color-result-detail-loader-border);
|
||||||
|
@ -205,7 +208,7 @@ article.result-images .detail {
|
||||||
@media screen and (max-width: @tablet) {
|
@media screen and (max-width: @tablet) {
|
||||||
#results.image-detail-open article.result-images[data-vim-selected] .detail {
|
#results.image-detail-open article.result-images[data-vim-selected] .detail {
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
.ltr-left(0);
|
||||||
|
|
||||||
a.result-images-source {
|
a.result-images-source {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
@ -219,7 +222,7 @@ article.result-images .detail {
|
||||||
}
|
}
|
||||||
|
|
||||||
a.result-detail-next {
|
a.result-detail-next {
|
||||||
right: 1rem;
|
.ltr-right(1rem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -227,7 +230,7 @@ article.result-images .detail {
|
||||||
@media screen and (max-width: @phone) {
|
@media screen and (max-width: @phone) {
|
||||||
#results.image-detail-open article.result-images[data-vim-selected] .detail {
|
#results.image-detail-open article.result-images[data-vim-selected] .detail {
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
.ltr-left(0);
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
|
|
||||||
a.result-images-source img {
|
a.result-images-source img {
|
||||||
|
@ -238,7 +241,7 @@ article.result-images .detail {
|
||||||
|
|
||||||
.result-images-labels p span {
|
.result-images-labels p span {
|
||||||
width: inherit;
|
width: inherit;
|
||||||
margin-right: 1rem;
|
.ltr-margin-right(1rem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
#main_index {
|
#main_index {
|
||||||
margin-top: 26vh;
|
margin-top: 26vh;
|
||||||
|
|
||||||
#linkto_preferences {
|
|
||||||
right: 1.8rem;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.index {
|
.index {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#tab-contentquery table td,
|
#tab-contentquery table td,
|
||||||
#tab-contentquery table th {
|
#tab-contentquery table th {
|
||||||
text-align: left !important;
|
.ltr-text-align-right() !important;
|
||||||
height: 3rem;
|
height: 3rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,20 +18,23 @@
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 5px 0 0 0;
|
padding: 5px 0 0 0;
|
||||||
display: block;
|
display: block;
|
||||||
float: left;
|
.ltr-float-left();
|
||||||
width: 300px;
|
width: 300px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.value {
|
.value {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
float: left;
|
.ltr-float-left();
|
||||||
width: 15em;
|
width: 15em;
|
||||||
|
|
||||||
select,
|
select,
|
||||||
input[type="text"] {
|
input[type="text"] {
|
||||||
font-size: inherit !important;
|
font-size: inherit !important;
|
||||||
margin: 0 1rem 0 0;
|
margin-top: 0;
|
||||||
|
.ltr-margin-right(1rem);
|
||||||
|
margin-bottom: 0;
|
||||||
|
.ltr-margin-left(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
@ -63,7 +66,7 @@
|
||||||
.description {
|
.description {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 5px 0 0 0;
|
padding: 5px 0 0 0;
|
||||||
float: left;
|
.ltr-float-right();
|
||||||
width: 50%;
|
width: 50%;
|
||||||
color: var(--color-settings-engine-description-font);
|
color: var(--color-settings-engine-description-font);
|
||||||
font-size: 90%;
|
font-size: 90%;
|
||||||
|
@ -79,6 +82,7 @@
|
||||||
|
|
||||||
table.cookies {
|
table.cookies {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
th,
|
th,
|
||||||
td {
|
td {
|
||||||
|
@ -106,7 +110,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.category {
|
.category {
|
||||||
margin-right: 0.5rem;
|
.ltr-margin-right(0.5rem);
|
||||||
|
|
||||||
label {
|
label {
|
||||||
border: 2px solid transparent;
|
border: 2px solid transparent;
|
||||||
|
@ -121,7 +125,7 @@
|
||||||
|
|
||||||
.name,
|
.name,
|
||||||
.shortcut {
|
.shortcut {
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
}
|
}
|
||||||
|
|
||||||
.preferences_back {
|
.preferences_back {
|
||||||
|
@ -153,7 +157,7 @@
|
||||||
th.name {
|
th.name {
|
||||||
.engine-tooltip {
|
.engine-tooltip {
|
||||||
margin-top: 1.8rem;
|
margin-top: 1.8rem;
|
||||||
left: calc((100% - 85em) / 2 + 10em);
|
.ltr-left(calc((100% - 85em) / 2 + 10em));
|
||||||
max-width: 40rem;
|
max-width: 40rem;
|
||||||
|
|
||||||
.engine-description {
|
.engine-description {
|
||||||
|
@ -163,7 +167,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.engine-group {
|
.engine-group {
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
background: var(--color-settings-engine-group-background);
|
background: var(--color-settings-engine-group-background);
|
||||||
}
|
}
|
||||||
|
@ -175,6 +179,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.engine-tooltip {
|
.engine-tooltip {
|
||||||
left: 10em !important;
|
.ltr-left(10em) !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#search_header {
|
#search_header {
|
||||||
padding: 1.5em 2em 0 @results-offset - 3rem;
|
padding-top: 1.5em;
|
||||||
|
.ltr-padding-right(2em);
|
||||||
|
.ltr-padding-left(@results-offset - 3rem);
|
||||||
margin: 0;
|
margin: 0;
|
||||||
background: var(--color-header-background);
|
background: var(--color-header-background);
|
||||||
border-bottom: 1px solid var(--color-header-border);
|
border-bottom: 1px solid var(--color-header-border);
|
||||||
|
@ -24,7 +26,7 @@
|
||||||
.category {
|
.category {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
margin-right: 1rem;
|
.ltr-margin-right(1rem);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
|
||||||
input {
|
input {
|
||||||
|
@ -127,11 +129,11 @@
|
||||||
|
|
||||||
#q {
|
#q {
|
||||||
outline: medium none;
|
outline: medium none;
|
||||||
padding-left: 12px;
|
.ltr-padding-left(12px);
|
||||||
padding-right: 0 !important;
|
.ltr-padding-right(0) !important;
|
||||||
border-right: none;
|
.ltr-border-right(none);
|
||||||
width: @search-width;
|
width: @search-width;
|
||||||
border-radius: 10px 0 0 10px;
|
.ltr-rounded-left-corners(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
#q::-ms-clear,
|
#q::-ms-clear,
|
||||||
|
@ -140,8 +142,8 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#send_search {
|
#send_search {
|
||||||
border-left: none;
|
.ltr-border-left(none);
|
||||||
border-radius: 0 10px 10px 0;
|
.ltr-rounded-right-corners(10px);
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
@ -153,12 +155,15 @@
|
||||||
.no-js #clear_search,
|
.no-js #clear_search,
|
||||||
.no-js #send_search {
|
.no-js #send_search {
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
border-left: 1px solid var(--color-search-border);
|
.ltr-border-left(1px solid var(--color-search-border));
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search_filters {
|
.search_filters {
|
||||||
margin: 0.6rem 0 0 @results-offset + 0.6rem;
|
margin-top: 0.6rem;
|
||||||
|
.ltr-margin-right(0);
|
||||||
|
margin-bottom: 0;
|
||||||
|
.ltr-margin-left(@results-offset + 0.6rem);
|
||||||
|
|
||||||
select {
|
select {
|
||||||
background-color: inherit;
|
background-color: inherit;
|
||||||
|
@ -177,7 +182,10 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.search_filters {
|
.search_filters {
|
||||||
margin: 0.6rem 0 0 @results-tablet-offset + 3rem;
|
margin-top: 0.6rem;
|
||||||
|
.ltr-margin-right(0);
|
||||||
|
margin-bottom: 0;
|
||||||
|
.ltr-margin-left(@results-tablet-offset + 3rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#categories {
|
#categories {
|
||||||
|
@ -204,7 +212,7 @@
|
||||||
|
|
||||||
#categories {
|
#categories {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
overflow-x: scroll;
|
overflow-x: scroll;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
-webkit-overflow-scrolling: touch;
|
-webkit-overflow-scrolling: touch;
|
||||||
|
@ -243,7 +251,7 @@
|
||||||
|
|
||||||
#main_results #q:placeholder-shown ~ #send_search {
|
#main_results #q:placeholder-shown ~ #send_search {
|
||||||
margin-right: 2.6rem;
|
margin-right: 2.6rem;
|
||||||
transition: margin-right 0.1s;
|
transition: margin-right 0.1s; // FIX RTL
|
||||||
}
|
}
|
||||||
|
|
||||||
.search_filters {
|
.search_filters {
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
.ltr-left(@offset) {
|
||||||
|
left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-right(@offset) {
|
||||||
|
right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-margin-right(@offset) {
|
||||||
|
margin-right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-margin-left(@offset) {
|
||||||
|
margin-left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-right(@offset) {
|
||||||
|
border-right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-left(@offset) {
|
||||||
|
border-left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-padding-right(@offset) {
|
||||||
|
padding-right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-padding-left(@offset) {
|
||||||
|
padding-left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-float-left() {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-float-right() {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-text-align-right() {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-rounded-left-corners(@radius) {
|
||||||
|
border-radius: @radius 0 0 @radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-rounded-right-corners(@radius) {
|
||||||
|
border-radius: 0 @radius @radius 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-text-align-left() {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-left-width(@offset) {
|
||||||
|
border-left-width: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-right-width(@offset) {
|
||||||
|
border-right-width: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-transform() {
|
||||||
|
transform: scale(1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@import "style.less";
|
|
@ -1,6 +1,134 @@
|
||||||
|
.ltr-left(@offset) {
|
||||||
|
right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-right(@offset) {
|
||||||
|
left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-margin-right(@offset) {
|
||||||
|
margin-left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-margin-left(@offset) {
|
||||||
|
margin-right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-right(@offset) {
|
||||||
|
border-left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-left(@offset) {
|
||||||
|
border-right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-padding-right(@offset) {
|
||||||
|
padding-left: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-padding-left(@offset) {
|
||||||
|
padding-right: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-float-left() {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-float-right() {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-text-align-right() {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-rounded-left-corners(@radius) {
|
||||||
|
border-radius: 0 @radius @radius 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-rounded-right-corners(@radius) {
|
||||||
|
border-radius: @radius 0 0 @radius;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-text-align-left() {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-left-width(@offset) {
|
||||||
|
border-right-width: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-border-right-width(@offset) {
|
||||||
|
border-left-width: @offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ltr-transform() {
|
||||||
|
transform: scale(-1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
@import "style.less";
|
@import "style.less";
|
||||||
|
|
||||||
#search_submit {
|
#q,
|
||||||
left: 1px;
|
#sidebar .infobox dt bdi {
|
||||||
right: auto;
|
direction: rtl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// URL are displayed LTR but align on the right
|
||||||
|
#urls {
|
||||||
|
direction: initial;
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
.result .url_wrapper {
|
||||||
|
justify-content: end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Image detail
|
||||||
|
#results.image-detail-open article.result-images[data-vim-selected] .detail .result-images-labels p {
|
||||||
|
direction: rtl;
|
||||||
|
|
||||||
|
&.result-url {
|
||||||
|
// Display URL using the LTR direction
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
|
span {
|
||||||
|
// And put the label on the right
|
||||||
|
direction: rtl;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// select HTML element
|
||||||
|
@supports ((background-position-x: 100%) and ((appearance: none) or (-webkit-appearance: none) or (-moz-appearance: none))) {
|
||||||
|
select {
|
||||||
|
border-width: 0 0 0 2rem;
|
||||||
|
background-position-x: -2rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// vim hotkey helps is not translated
|
||||||
|
#vim-hotkeys-help table {
|
||||||
|
direction: ltr;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logo on the right
|
||||||
|
#main_preferences h1,
|
||||||
|
#main_stats h1 {
|
||||||
|
background-position-x: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
// patch of searx/static/themes/__common__/less/stats.less
|
||||||
|
.bar-chart-serie1,
|
||||||
|
.bar-chart-serie2 {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.engine-stats .engine-name,
|
||||||
|
.engine-stats .engine-score,
|
||||||
|
.engine-stats .result-count,
|
||||||
|
.engine-stats .response-time,
|
||||||
|
.engine-stats .engine-reliability {
|
||||||
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
vertical-align: bottom;
|
vertical-align: bottom;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
text-decoration: inherit;
|
text-decoration: inherit;
|
||||||
|
.ltr-transform();
|
||||||
}
|
}
|
||||||
|
|
||||||
.ion-icon-small {
|
.ion-icon-small {
|
||||||
|
@ -78,9 +79,7 @@ main {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_preferences,
|
.page_with_header {
|
||||||
#main_about,
|
|
||||||
#main_stats {
|
|
||||||
margin: 2em auto;
|
margin: 2em auto;
|
||||||
width: 85em;
|
width: 85em;
|
||||||
}
|
}
|
||||||
|
@ -100,16 +99,8 @@ footer {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_preferences h1,
|
.page_with_header .logo {
|
||||||
#main_stats h1 {
|
height: 40px;
|
||||||
background: url('../img/searxng.png') no-repeat;
|
|
||||||
background-size: contain;
|
|
||||||
min-height: 40px;
|
|
||||||
margin: 0 auto;
|
|
||||||
|
|
||||||
span {
|
|
||||||
visibility: hidden;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
input[type="submit"],
|
input[type="submit"],
|
||||||
|
@ -139,8 +130,8 @@ a {
|
||||||
|
|
||||||
article[data-vim-selected] {
|
article[data-vim-selected] {
|
||||||
background: var(--color-result-vim-selected);
|
background: var(--color-result-vim-selected);
|
||||||
border-left: 0.2rem solid var(--color-result-vim-arrow);
|
.ltr-border-left(0.2rem solid var(--color-result-vim-arrow));
|
||||||
.rounded-right-corners;
|
.ltr-rounded-right-corners(10px);
|
||||||
}
|
}
|
||||||
|
|
||||||
article.result-images[data-vim-selected] {
|
article.result-images[data-vim-selected] {
|
||||||
|
@ -166,7 +157,7 @@ article[data-vim-selected].category-social {
|
||||||
.result {
|
.result {
|
||||||
margin: @results-margin 0;
|
margin: @results-margin 0;
|
||||||
padding: @result-padding;
|
padding: @result-padding;
|
||||||
border-left: 0.2rem solid transparent;
|
.ltr-border-left(0.2rem solid transparent);
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
|
@ -264,15 +255,17 @@ article[data-vim-selected].category-social {
|
||||||
|
|
||||||
img {
|
img {
|
||||||
&.thumbnail {
|
&.thumbnail {
|
||||||
float: left;
|
.ltr-float-left();
|
||||||
padding: 0.6rem 1rem 0 0;
|
padding-top: 0.6rem;
|
||||||
|
.ltr-padding-right(1rem);
|
||||||
width: 20rem;
|
width: 20rem;
|
||||||
height: unset; // remove heigth value that was needed for lazy loading
|
height: unset; // remove heigth value that was needed for lazy loading
|
||||||
}
|
}
|
||||||
|
|
||||||
&.image {
|
&.image {
|
||||||
float: left;
|
.ltr-float-left();
|
||||||
padding: 0.6rem 1rem 0 0;
|
padding-top: 0.6rem;
|
||||||
|
.ltr-padding-right(1rem);
|
||||||
width: 7rem;
|
width: 7rem;
|
||||||
max-height: 7rem;
|
max-height: 7rem;
|
||||||
object-fit: scale-down;
|
object-fit: scale-down;
|
||||||
|
@ -308,12 +301,15 @@ article[data-vim-selected].category-social {
|
||||||
}
|
}
|
||||||
|
|
||||||
.engines {
|
.engines {
|
||||||
float: right;
|
.ltr-float-right();
|
||||||
color: var(--color-result-engines-font);
|
color: var(--color-result-engines-font);
|
||||||
|
|
||||||
span {
|
span {
|
||||||
font-size: smaller;
|
font-size: smaller;
|
||||||
margin: 0 0.5em 0 0;
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
.ltr-margin-right(0.5rem);
|
||||||
|
.ltr-margin-left(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,9 +352,12 @@ article[data-vim-selected].category-social {
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
right: 0;
|
.ltr-right(0);
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
margin: 0 0 4px 4px;
|
margin-top: 0;
|
||||||
|
.ltr-margin-right(0);
|
||||||
|
margin-bottom: 4px;
|
||||||
|
.ltr-margin-left(4px);
|
||||||
// color: @color-result-image-span-font;
|
// color: @color-result-image-span-font;
|
||||||
background-color: var(--color-result-image-span-background-hover);
|
background-color: var(--color-result-image-span-background-hover);
|
||||||
font-size: 0.7em;
|
font-size: 0.7em;
|
||||||
|
@ -367,7 +366,7 @@ article[data-vim-selected].category-social {
|
||||||
|
|
||||||
.result-map {
|
.result-map {
|
||||||
img.image {
|
img.image {
|
||||||
float: right !important;
|
.ltr-float-right() !important;
|
||||||
height: 100px !important;
|
height: 100px !important;
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
}
|
}
|
||||||
|
@ -382,12 +381,12 @@ article[data-vim-selected].category-social {
|
||||||
font-weight: inherit;
|
font-weight: inherit;
|
||||||
width: 17rem;
|
width: 17rem;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
}
|
}
|
||||||
|
|
||||||
td {
|
td {
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -397,7 +396,10 @@ article[data-vim-selected].category-social {
|
||||||
}
|
}
|
||||||
|
|
||||||
#results {
|
#results {
|
||||||
margin: 1rem 2rem 0 @results-offset;
|
margin-top: 1rem;
|
||||||
|
.ltr-margin-right(2rem);
|
||||||
|
margin-bottom: 0;
|
||||||
|
.ltr-margin-left(@results-offset);
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: @results-width 25rem;
|
grid-template-columns: @results-width 25rem;
|
||||||
grid-template-rows: min-content min-content 1fr min-content;
|
grid-template-rows: min-content min-content 1fr min-content;
|
||||||
|
@ -533,7 +535,10 @@ article[data-vim-selected].category-social {
|
||||||
|
|
||||||
dt {
|
dt {
|
||||||
display: inline;
|
display: inline;
|
||||||
margin: 0.5em 0.25em 0.5em 0;
|
margin-top: 0.5em;
|
||||||
|
.ltr-margin-right(0.25em);
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
.ltr-margin-left(0);
|
||||||
padding: 0;
|
padding: 0;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
@ -571,7 +576,7 @@ article[data-vim-selected].category-social {
|
||||||
|
|
||||||
#linkto_preferences {
|
#linkto_preferences {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 10px;
|
.ltr-right(1.8rem);
|
||||||
top: 2.2rem;
|
top: 2.2rem;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
border: 0;
|
border: 0;
|
||||||
|
@ -608,7 +613,7 @@ article[data-vim-selected].category-social {
|
||||||
background: var(--color-backtotop-background);
|
background: var(--color-backtotop-background);
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 8rem;
|
bottom: 8rem;
|
||||||
left: @results-width + @results-offset + (0.5 * @results-gap - 1.2em);
|
.ltr-left(@results-width + @results-offset + (0.5 * @results-gap - 1.2em));
|
||||||
transition: opacity 0.5s;
|
transition: opacity 0.5s;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
.rounded-corners;
|
.rounded-corners;
|
||||||
|
@ -632,9 +637,7 @@ article[data-vim-selected].category-social {
|
||||||
}
|
}
|
||||||
|
|
||||||
@media screen and (max-width: @tablet) {
|
@media screen and (max-width: @tablet) {
|
||||||
#main_preferences,
|
.page_with_header {
|
||||||
#main_about,
|
|
||||||
#main_stats {
|
|
||||||
margin: 2rem 0.5rem;
|
margin: 2rem 0.5rem;
|
||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
@ -647,9 +650,12 @@ article[data-vim-selected].category-social {
|
||||||
clear: both;
|
clear: both;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
float: left;
|
.ltr-float-left();
|
||||||
max-width: 10em;
|
max-width: 10em;
|
||||||
margin: 0.5em 0.5em 0.5em 0;
|
margin-top: 0.5em;
|
||||||
|
.ltr-margin-right(0.5em);
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
.ltr-margin-left(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -690,7 +696,7 @@ article[data-vim-selected].category-social {
|
||||||
}
|
}
|
||||||
|
|
||||||
.engines {
|
.engines {
|
||||||
float: right;
|
.ltr-float-right();
|
||||||
padding: 0 0 3px 0;
|
padding: 0 0 3px 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -750,12 +756,12 @@ article[data-vim-selected].category-social {
|
||||||
}
|
}
|
||||||
|
|
||||||
#backToTop {
|
#backToTop {
|
||||||
left: auto;
|
.ltr-left(auto);
|
||||||
right: 1rem;
|
.ltr-right(1rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#pagination {
|
#pagination {
|
||||||
margin-right: 4rem;
|
.ltr-margin-right(4rem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -767,12 +773,12 @@ article[data-vim-selected].category-social {
|
||||||
|
|
||||||
#linkto_preferences {
|
#linkto_preferences {
|
||||||
top: 0.8rem;
|
top: 0.8rem;
|
||||||
right: 0.7rem;
|
.ltr-right(0.7rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#main_index #linkto_preferences {
|
#main_index #linkto_preferences {
|
||||||
top: 0.5rem;
|
top: 0.5rem;
|
||||||
right: 0.5rem;
|
.ltr-right(0.5rem);
|
||||||
}
|
}
|
||||||
|
|
||||||
#results {
|
#results {
|
||||||
|
|
|
@ -125,11 +125,11 @@ div.selectable_url {
|
||||||
padding: 1rem;
|
padding: 1rem;
|
||||||
margin: 0 0 1em 0;
|
margin: 0 0 1em 0;
|
||||||
border: 1px solid var(--color-toolkit-dialog-border);
|
border: 1px solid var(--color-toolkit-dialog-border);
|
||||||
text-align: left;
|
.ltr-text-align-left();
|
||||||
.rounded-corners;
|
.rounded-corners;
|
||||||
|
|
||||||
.close {
|
.close {
|
||||||
float: right;
|
.ltr-float-right();
|
||||||
position: relative;
|
position: relative;
|
||||||
top: -3px;
|
top: -3px;
|
||||||
color: inherit;
|
color: inherit;
|
||||||
|
@ -156,6 +156,10 @@ div.selectable_url {
|
||||||
|
|
||||||
td {
|
td {
|
||||||
padding: 0 1em 0 0;
|
padding: 0 1em 0 0;
|
||||||
|
padding-top: 0;
|
||||||
|
.ltr-padding-right(1rem);
|
||||||
|
padding-bottom: 0;
|
||||||
|
.ltr-padding-left(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
h4 {
|
h4 {
|
||||||
|
@ -301,7 +305,10 @@ html body .tabs > input:checked {
|
||||||
/* -- select -- */
|
/* -- select -- */
|
||||||
select {
|
select {
|
||||||
height: 2.4rem;
|
height: 2.4rem;
|
||||||
margin: 0 1rem 0 0;
|
margin-top: 0;
|
||||||
|
.ltr-margin-right(1rem);
|
||||||
|
margin-bottom: 0;
|
||||||
|
.ltr-margin-left(0);
|
||||||
padding: 0.2rem !important;
|
padding: 0.2rem !important;
|
||||||
color: var(--color-search-font);
|
color: var(--color-search-font);
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
|
|
|
@ -1,102 +0,0 @@
|
||||||
<div{% if rtl %} dir="ltr"{% endif %}>
|
|
||||||
<h1>About <a href="{{ url_for('index') }}">searxng</a></h1>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
SearXNG is a fork from the well-known <a href="https://github.com/searx/searx">searx</a>
|
|
||||||
<a href="https://en.wikipedia.org/wiki/Metasearch_engine"> metasearch engine</a>,
|
|
||||||
aggregating the results of other <a href="{{ url_for('preferences') }}">search engines</a>
|
|
||||||
while not storing information about its users.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<p>More about SearXNG ...</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="{{ searx_git_url }}">SearXNG sources</a></li>
|
|
||||||
<li><a href="https://weblate.bubu1.eu/projects/searxng/">weblate</a></li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<hr />
|
|
||||||
|
|
||||||
<h2>Why use it?</h2>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li>
|
|
||||||
SearXNG may not offer you as personalised results as Google, but it doesn't
|
|
||||||
generate a profile about you.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
SearXNG doesn't care about what you search for, never shares anything with a
|
|
||||||
third party, and it can't be used to compromise you.
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
SearXNG is free software, the code is 100% open and you can help to make
|
|
||||||
it better. See more on <a href="{{ searx_git_url
|
|
||||||
}}">SearXNG sources</a>.
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
If you do care about privacy, want to be a conscious user, or otherwise
|
|
||||||
believe in digital freedom, make SearXNG your default search engine or run
|
|
||||||
it on your own server
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>Technical details - How does it work?</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
SearXNG is a <a href="https://en.wikipedia.org/wiki/Metasearch_engine">metasearch engine</a>,
|
|
||||||
inspired by the <a href="https://beniz.github.io/seeks/">seeks project</a>.
|
|
||||||
|
|
||||||
It provides basic privacy by mixing your queries with searches on other
|
|
||||||
platforms without storing search data. Queries are made using a POST request
|
|
||||||
on every browser (except Chromium-based browsers*). Therefore they show up
|
|
||||||
in neither our logs, nor your url history. In the case of Chromium-based
|
|
||||||
browser users there is an exception: searx uses the search bar to perform GET
|
|
||||||
requests.
|
|
||||||
|
|
||||||
SearXNG can be added to your browser's search bar; moreover, it can be set as
|
|
||||||
the default search engine.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2 id='add to browser'>How to set as the default search engine?</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
SearXNG supports <a href="https://github.com/dewitt/opensearch/blob/master/opensearch-1-1-draft-6.md">OpenSearch</a>.
|
|
||||||
For more information on changing your default search engine, see your browser's documentation:
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
<li><a href="https://support.mozilla.org/en-US/kb/add-or-remove-search-engine-firefox">Firefox</a></li>
|
|
||||||
<li><a href="https://support.microsoft.com/en-us/help/4028574/microsoft-edge-change-the-default-search-engine">Microsoft Edge</a></li>
|
|
||||||
<li>Chromium-based browsers <a href="https://www.chromium.org/tab-to-search">only add websites that the user navigates to without a path.</a>
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
<h2>Where to find anonymous usage statistics of this instance ?</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
<a href="{{ url_for('stats') }}">Stats page</a> contains some useful data about the engines used.
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>How can I make it my own?</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
SearXNG appreciates your concern regarding logs, so take the code from
|
|
||||||
the <a href="{{ searx_git_url }}">SearXNG project</a> and
|
|
||||||
run it yourself!
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
Add your instance to this <a href="{{ get_setting('brand.public_instances') }}"> list of
|
|
||||||
public instances</a> to help other people reclaim their privacy and make the
|
|
||||||
Internet freer! The more decentralized the Internet is, the more freedom we
|
|
||||||
have!
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<h2>Where are the docs & code of this instance?</h2>
|
|
||||||
|
|
||||||
<p>
|
|
||||||
See the <a href="{{ get_setting('brand.docs_url') }}">SearXNG docs</a>
|
|
||||||
and <a href="{{ searx_git_url }}">SearXNG sources</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
{% include "__common__/aboutextend.html" ignore missing %}
|
|
|
@ -1,5 +1,6 @@
|
||||||
{% extends "oscar/base.html" %}
|
{% extends "oscar/base.html" %}
|
||||||
{% block title %}{{ _('about') }} - {% endblock %}
|
{% block title %}{{ _('about') }} - {% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% include '__common__/about.html' %}
|
{{ help.about | safe }}
|
||||||
|
{% include "__common__/aboutextend.html" ignore missing %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
{% extends 'simple/base.html' %}
|
{% extends 'simple/page_with_header.html' %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% include '__common__/about.html' %}
|
{{ help.about | safe }}
|
||||||
|
{% include "__common__/aboutextend.html" ignore missing %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -35,7 +35,7 @@
|
||||||
<link rel="icon" href="{{ url_for('static', filename='img/favicon.svg') }}" type="image/svg+xml">
|
<link rel="icon" href="{{ url_for('static', filename='img/favicon.svg') }}" type="image/svg+xml">
|
||||||
</head>
|
</head>
|
||||||
<body class="{{ endpoint }}_endpoint" >
|
<body class="{{ endpoint }}_endpoint" >
|
||||||
<main id="main_{{ self._TemplateReference__context.name|replace("simple/", "")|replace(".html", "") }}">
|
<main id="main_{{ self._TemplateReference__context.name|replace("simple/", "")|replace(".html", "") }}" class="{{body_class}}">
|
||||||
{% if errors %}
|
{% if errors %}
|
||||||
<div class="dialog-error" role="alert">
|
<div class="dialog-error" role="alert">
|
||||||
<a href="#" class="close" aria-label="close" title="close">×</a>
|
<a href="#" class="close" aria-label="close" title="close">×</a>
|
||||||
|
@ -47,6 +47,12 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
{% block linkto_preferences %}
|
||||||
|
{% from 'simple/icons.html' import icon_big %}
|
||||||
|
<nav id="linkto_preferences"><a href="{{ url_for('preferences') }}" aria-label="{{ _('preferences') }}">{{ icon_big('menu-outline') }}</a></nav>
|
||||||
|
{% endblock %}
|
||||||
|
{% block header %}
|
||||||
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
'chevron-up-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M112 328l144-144 144 144"/></svg>',
|
'chevron-up-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M112 328l144-144 144 144"/></svg>',
|
||||||
'chevron-right':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M184 112l144 144-144 144"/></svg>',
|
'chevron-right':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M184 112l144 144-144 144"/></svg>',
|
||||||
'chevron-left':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M328 112L184 256l144 144"/></svg>',
|
'chevron-left':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="48" d="M328 112L184 256l144 144"/></svg>',
|
||||||
'menu-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32" d="M80 160h352M80 256h352M80 352h352"/></svg>',
|
'menu-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path d="M262.29 192.31a64 64 0 1057.4 57.4 64.13 64.13 0 00-57.4-57.4zM416.39 256a154.34 154.34 0 01-1.53 20.79l45.21 35.46a10.81 10.81 0 012.45 13.75l-42.77 74a10.81 10.81 0 01-13.14 4.59l-44.9-18.08a16.11 16.11 0 00-15.17 1.75A164.48 164.48 0 01325 400.8a15.94 15.94 0 00-8.82 12.14l-6.73 47.89a11.08 11.08 0 01-10.68 9.17h-85.54a11.11 11.11 0 01-10.69-8.87l-6.72-47.82a16.07 16.07 0 00-9-12.22 155.3 155.3 0 01-21.46-12.57 16 16 0 00-15.11-1.71l-44.89 18.07a10.81 10.81 0 01-13.14-4.58l-42.77-74a10.8 10.8 0 012.45-13.75l38.21-30a16.05 16.05 0 006-14.08c-.36-4.17-.58-8.33-.58-12.5s.21-8.27.58-12.35a16 16 0 00-6.07-13.94l-38.19-30A10.81 10.81 0 0149.48 186l42.77-74a10.81 10.81 0 0113.14-4.59l44.9 18.08a16.11 16.11 0 0015.17-1.75A164.48 164.48 0 01187 111.2a15.94 15.94 0 008.82-12.14l6.73-47.89A11.08 11.08 0 01213.23 42h85.54a11.11 11.11 0 0110.69 8.87l6.72 47.82a16.07 16.07 0 009 12.22 155.3 155.3 0 0121.46 12.57 16 16 0 0015.11 1.71l44.89-18.07a10.81 10.81 0 0113.14 4.58l42.77 74a10.8 10.8 0 01-2.45 13.75l-38.21 30a16.05 16.05 0 00-6.05 14.08c.33 4.14.55 8.3.55 12.47z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/></svg>',
|
||||||
'ellipsis-vertical-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><circle cx="256" cy="256" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><circle cx="256" cy="416" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><circle cx="256" cy="96" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/></svg>',
|
'ellipsis-vertical-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><circle cx="256" cy="256" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><circle cx="256" cy="416" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><circle cx="256" cy="96" r="32" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/></svg>',
|
||||||
'magnet-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path d="M421.83 293.82A144 144 0 00218.18 90.17M353.94 225.94a48 48 0 00-67.88-67.88" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32" d="M192 464v-48M90.18 421.82l33.94-33.94M48 320h48"/><path d="M286.06 158.06L172.92 271.19a32 32 0 01-45.25 0L105 248.57a32 32 0 010-45.26L218.18 90.17M421.83 293.82L308.69 407a32 32 0 01-45.26 0l-22.62-22.63a32 32 0 010-45.26l113.13-113.17M139.6 169.98l67.88 67.89M275.36 305.75l67.89 67.88" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32"/></svg>',
|
'magnet-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path d="M421.83 293.82A144 144 0 00218.18 90.17M353.94 225.94a48 48 0 00-67.88-67.88" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="32" d="M192 464v-48M90.18 421.82l33.94-33.94M48 320h48"/><path d="M286.06 158.06L172.92 271.19a32 32 0 01-45.25 0L105 248.57a32 32 0 010-45.26L218.18 90.17M421.83 293.82L308.69 407a32 32 0 01-45.26 0l-22.62-22.63a32 32 0 010-45.26l113.13-113.17M139.6 169.98l67.88 67.89M275.36 305.75l67.89 67.88" fill="none" stroke="currentColor" stroke-linejoin="round" stroke-width="32"/></svg>',
|
||||||
'globe-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path d="M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path d="M256 48c-58.07 0-112.67 93.13-112.67 208S197.93 464 256 464s112.67-93.13 112.67-208S314.07 48 256 48z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path d="M117.33 117.33c38.24 27.15 86.38 43.34 138.67 43.34s100.43-16.19 138.67-43.34M394.67 394.67c-38.24-27.15-86.38-43.34-138.67-43.34s-100.43 16.19-138.67 43.34" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><path fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32" d="M256 48v416M464 256H48"/></svg>',
|
'globe-outline':'<svg class="ionicon" viewBox="0 0 512 512" aria-hidden="true"><path d="M256 48C141.13 48 48 141.13 48 256s93.13 208 208 208 208-93.13 208-208S370.87 48 256 48z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path d="M256 48c-58.07 0-112.67 93.13-112.67 208S197.93 464 256 464s112.67-93.13 112.67-208S314.07 48 256 48z" fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32"/><path d="M117.33 117.33c38.24 27.15 86.38 43.34 138.67 43.34s100.43-16.19 138.67-43.34M394.67 394.67c-38.24-27.15-86.38-43.34-138.67-43.34s-100.43 16.19-138.67 43.34" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32"/><path fill="none" stroke="currentColor" stroke-miterlimit="10" stroke-width="32" d="M256 48v416M464 256H48"/></svg>',
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
<link rel="preload" href="{{ url_for('static', filename='img/searxng.png') }}" as="image" />
|
<link rel="preload" href="{{ url_for('static', filename='img/searxng.png') }}" as="image" />
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<nav id="linkto_preferences"><a href="{{ url_for('preferences') }}">{{ icon_big('menu-outline') }}</a></nav>
|
|
||||||
<div class="index">
|
<div class="index">
|
||||||
<div class="title"><h1>SearXNG</h1></div>
|
<div class="title"><h1>SearXNG</h1></div>
|
||||||
{% include 'simple/simple_search.html' %}
|
{% include 'simple/simple_search.html' %}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
{% from 'simple/icons.html' import icon_small %}
|
||||||
|
|
||||||
<!-- Draw favicon -->
|
<!-- Draw favicon -->
|
||||||
{% macro draw_favicon(favicon) -%}
|
{% macro draw_favicon(favicon) -%}
|
||||||
<img width="14" height="14" class="favicon" src="{{ url_for('static', filename='themes/simple/img/icons/' + favicon + '.png') }}" alt="{{ favicon }}">
|
<img width="14" height="14" class="favicon" src="{{ url_for('static', filename='themes/simple/img/icons/' + favicon + '.png') }}" alt="{{ favicon }}">
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{% set body_class = "page_with_header" %}
|
||||||
|
{% extends "simple/base.html" %}
|
||||||
|
{% block header %}
|
||||||
|
<a href="{{ url_for('index') }}"><img class="logo" src="{{ url_for('static', filename='img/searxng.png') }}" alt="SearXNG"></a>
|
||||||
|
{% endblock %}
|
|
@ -1,7 +1,7 @@
|
||||||
{% from 'simple/macros.html' import tabs_open, tabs_close, tab_header, tab_footer, checkbox_onoff, checkbox %}
|
{% from 'simple/macros.html' import tabs_open, tabs_close, tab_header, tab_footer, checkbox_onoff, checkbox %}
|
||||||
{% from 'simple/icons.html' import icon_big %}
|
{% from 'simple/icons.html' import icon_big %}
|
||||||
|
|
||||||
{% extends "simple/base.html" %}
|
{% extends "simple/page_with_header.html" %}
|
||||||
|
|
||||||
{%- macro plugin_preferences(section) -%}
|
{%- macro plugin_preferences(section) -%}
|
||||||
{%- for plugin in plugins -%}
|
{%- for plugin in plugins -%}
|
||||||
|
@ -94,11 +94,9 @@
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
{% block head %} {% endblock %}
|
{% block head %} {% endblock %}
|
||||||
|
{% block linkto_preferences %}{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<h1>{{ _('Preferences') }}</h1>
|
||||||
<a href="{{ url_for('index') }}"><h1><span>SearXNG</span></h1></a>
|
|
||||||
|
|
||||||
<h2>{{ _('Preferences') }}</h2>
|
|
||||||
|
|
||||||
<form id="search_form" method="post" action="{{ url_for('preferences') }}">
|
<form id="search_form" method="post" action="{{ url_for('preferences') }}">
|
||||||
|
|
||||||
|
@ -401,9 +399,9 @@
|
||||||
{{ _("These cookies serve your sole convenience, we don't use these cookies to track you.") }}
|
{{ _("These cookies serve your sole convenience, we don't use these cookies to track you.") }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<input type="submit" value="{{ _('save') }}" />
|
<input type="submit" value="{{ _('Save') }}" />
|
||||||
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('clear_cookies') }}">{{ _('Reset defaults') }}</a></div>
|
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('clear_cookies') }}">{{ _('Reset defaults') }}</a></div>
|
||||||
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('index') }}">{{ _('back') }}</a></div>
|
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('index') }}">{{ _('Back') }}</a></div>
|
||||||
|
|
||||||
</form>
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
{% block title %}{% if query_in_title %}{{- q|e }} - {% endif %}{% endblock %}
|
{% block title %}{% if query_in_title %}{{- q|e }} - {% endif %}{% endblock %}
|
||||||
{% block meta %}<link rel="alternate" type="application/rss+xml" title="Searx search: {{ q|e }}" href="{{ url_for('search', _external=True) }}?q={{ q|urlencode }}&categories={{ selected_categories|join(",") | replace(' ','+') }}&pageno={{ pageno }}&time_range={{ time_range }}&language={{ current_language }}&safesearch={{ safesearch }}&format=rss">{% endblock %}
|
{% block meta %}<link rel="alternate" type="application/rss+xml" title="Searx search: {{ q|e }}" href="{{ url_for('search', _external=True) }}?q={{ q|urlencode }}&categories={{ selected_categories|join(",") | replace(' ','+') }}&pageno={{ pageno }}&time_range={{ time_range }}&language={{ current_language }}&safesearch={{ safesearch }}&format=rss">{% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<nav id="linkto_preferences"><a href="{{ url_for('preferences') }}">{{ icon_big('menu-outline') }}</a></nav>
|
|
||||||
{% include 'simple/search.html' %}
|
{% include 'simple/search.html' %}
|
||||||
|
|
||||||
{% if results and results|map(attribute='template')|unique|list|count == 1 %}
|
{% if results and results|map(attribute='template')|unique|list|count == 1 %}
|
||||||
|
@ -162,7 +161,7 @@
|
||||||
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
|
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
|
||||||
<input type="hidden" name="theme" value="{{ theme }}" >
|
<input type="hidden" name="theme" value="{{ theme }}" >
|
||||||
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
|
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
|
||||||
<button type="submit">{{ icon_small('chevron-left') }} {{ _('previous page') }}</button>
|
<button type="submit">{{ icon_small('chevron-left') }} {{ _('Previous page') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -179,7 +178,7 @@
|
||||||
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
|
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
|
||||||
<input type="hidden" name="theme" value="{{ theme }}" >
|
<input type="hidden" name="theme" value="{{ theme }}" >
|
||||||
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
|
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
|
||||||
<button type="submit">{{ _('next page') }} {{ icon_small('chevron-right') }}</button>
|
<button type="submit">{{ _('Next page') }} {{ icon_small('chevron-right') }}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{% from 'simple/icons.html' import icon_big %}
|
{% from 'simple/icons.html' import icon_big %}
|
||||||
{% from '__common__/new_issue.html' import new_issue with context %}
|
{% from '__common__/new_issue.html' import new_issue with context %}
|
||||||
|
|
||||||
{% extends "simple/base.html" %}
|
{% extends "simple/page_with_header.html" %}
|
||||||
|
|
||||||
{%- macro th_sort(column_order, column_name) -%}
|
{%- macro th_sort(column_order, column_name) -%}
|
||||||
{% if selected_engine_name %}
|
{% if selected_engine_name %}
|
||||||
|
@ -15,10 +15,7 @@
|
||||||
|
|
||||||
{% block head %} {% endblock %}
|
{% block head %} {% endblock %}
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
<h1>{% if selected_engine_name %}<a href="{{ url_for('stats') }}">{% endif %}{{ _('Engine stats') }}{% if selected_engine_name %}</a> - {{ selected_engine_name }}{% endif %}</h1>
|
||||||
<a href="{{ url_for('index') }}"><h1><span>SearXNG</span></h1></a>
|
|
||||||
|
|
||||||
<h2>{% if selected_engine_name %}<a href="{{ url_for('stats') }}">{% endif %}{{ _('Engine stats') }}{% if selected_engine_name %}</a> - {{ selected_engine_name }}{% endif %}</h2>
|
|
||||||
|
|
||||||
{% if not engine_stats.get('time') %}
|
{% if not engine_stats.get('time') %}
|
||||||
{{ _('There is currently no data available. ') }}
|
{{ _('There is currently no data available. ') }}
|
||||||
|
|
Binary file not shown.
|
@ -8,187 +8,188 @@
|
||||||
# d506c013dc1b502e7a53f91ebcbf8f29_985b4b3, 2017-2018
|
# d506c013dc1b502e7a53f91ebcbf8f29_985b4b3, 2017-2018
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2021-12-31 07:17+0000\n"
|
"PO-Revision-Date: 2022-01-28 07:16+0000\n"
|
||||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
|
"Language-Team: Arabic <https://weblate.bubu1.eu/projects/searxng/searxng/ar/>"
|
||||||
|
"\n"
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
"Language-Team: Arabic "
|
|
||||||
"<https://weblate.bubu1.eu/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"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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 4.10.1\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "ملفات"
|
msgstr "ملفات"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "الرئيسية"
|
msgstr "الرئيسية"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "موسيقى"
|
msgstr "موسيقى"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "شبكات التواصل الإجتماعي"
|
msgstr "شبكات التواصل الإجتماعي"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "صور"
|
msgstr "صور"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "فيديوهات"
|
msgstr "فيديوهات"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "علوم و تكنولوجيا"
|
msgstr "علوم و تكنولوجيا"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "أخبار"
|
msgstr "أخبار"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "خرائط"
|
msgstr "خرائط"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr "onions"
|
msgstr "onions"
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "علوم"
|
msgstr "علوم"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr "تلقائي"
|
msgstr "تلقائي"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr "فاتح"
|
msgstr "فاتح"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr "مظلم"
|
msgstr "مظلم"
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr "نفذ الوقت"
|
msgstr "نفذ الوقت"
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr "خطأ في بروتوكول HTTP"
|
msgstr "خطأ في بروتوكول HTTP"
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr "خطأ في الشبكة"
|
msgstr "خطأ في الشبكة"
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr "تعطل غير متوقع"
|
msgstr "تعطل غير متوقع"
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr "خطأ HTTP"
|
msgstr "خطأ HTTP"
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr "خطأ في اتصال HTTP"
|
msgstr "خطأ في اتصال HTTP"
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr "خطأ في وكيل البروكسي"
|
msgstr "خطأ في وكيل البروكسي"
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr "الكثير من الطلبات"
|
msgstr "الكثير من الطلبات"
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr "خطأ في API الخادم"
|
msgstr "خطأ في API الخادم"
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "تعذر العثور على عناصر"
|
msgstr "تعذر العثور على عناصر"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr "المصدر"
|
msgstr "المصدر"
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "إنّ الإعدادات خاطئة، يرجى تعديل خياراتك"
|
msgstr "إنّ الإعدادات خاطئة، يرجى تعديل خياراتك"
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "إعدادات غير صالحة"
|
msgstr "إعدادات غير صالحة"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "خطأ في البحث"
|
msgstr "خطأ في البحث"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "قبل دقائق"
|
msgstr "قبل دقائق"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "قبل {hours} ساعات، {minutes} دقائق"
|
msgstr "قبل {hours} ساعات، {minutes} دقائق"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr "معلق"
|
msgstr "معلق"
|
||||||
|
|
||||||
|
@ -389,13 +390,13 @@ msgstr "ملف تورنت"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "النسخة المخبأة"
|
msgstr "النسخة المخبأة"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr "النفاذ عبر البروكسي"
|
msgstr "النفاذ عبر البروكسي"
|
||||||
|
|
||||||
|
@ -523,7 +524,6 @@ msgstr "القوائم الإفتراضية"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "لغة البحث"
|
msgstr "لغة البحث"
|
||||||
|
|
||||||
|
@ -611,12 +611,12 @@ msgstr "يقوم بتغيير لغة واجهة البحث"
|
||||||
#: searx/templates/oscar/preferences.html:210
|
#: searx/templates/oscar/preferences.html:210
|
||||||
#: searx/templates/simple/preferences.html:197
|
#: searx/templates/simple/preferences.html:197
|
||||||
msgid "Theme"
|
msgid "Theme"
|
||||||
msgstr ""
|
msgstr "السمة"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:211
|
#: searx/templates/oscar/preferences.html:211
|
||||||
#: searx/templates/simple/preferences.html:205
|
#: searx/templates/simple/preferences.html:205
|
||||||
msgid "Change SearXNG layout"
|
msgid "Change SearXNG layout"
|
||||||
msgstr ""
|
msgstr "تغيير مظهر سيركس"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:222
|
#: searx/templates/oscar/preferences.html:222
|
||||||
#: searx/templates/oscar/preferences.html:228
|
#: searx/templates/oscar/preferences.html:228
|
||||||
|
@ -660,10 +660,11 @@ msgstr "عرض روابط نتائج البحث في ألسنة جديدة لل
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "الطريقة"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -678,7 +679,7 @@ msgstr "وكيل بروكسي الصور"
|
||||||
#: searx/templates/oscar/preferences.html:274
|
#: searx/templates/oscar/preferences.html:274
|
||||||
#: searx/templates/simple/preferences.html:256
|
#: searx/templates/simple/preferences.html:256
|
||||||
msgid "Proxying image results through SearXNG"
|
msgid "Proxying image results through SearXNG"
|
||||||
msgstr ""
|
msgstr "تمرير نتائج البحث عن الصور عبر بروكسي SearXNG"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:277
|
#: searx/templates/oscar/preferences.html:277
|
||||||
#: searx/templates/oscar/preferences.html:288
|
#: searx/templates/oscar/preferences.html:288
|
||||||
|
@ -717,7 +718,7 @@ msgstr "تعطيل الكل"
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -852,12 +853,10 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "حفظ"
|
msgstr "حفظ"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "العودة"
|
msgstr "العودة"
|
||||||
|
|
||||||
|
@ -901,13 +900,11 @@ msgstr "حاول البحث عن :"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "الصفحة التالية"
|
msgstr "الصفحة التالية"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "الصفحة السابقة"
|
msgstr "الصفحة السابقة"
|
||||||
|
|
||||||
|
@ -986,7 +983,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/result_templates/files.html:35
|
#: searx/templates/oscar/result_templates/files.html:35
|
||||||
#: searx/templates/oscar/stats.html:126 searx/templates/simple/stats.html:125
|
#: searx/templates/oscar/stats.html:126 searx/templates/simple/stats.html:125
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr ""
|
msgstr "اسم الملف"
|
||||||
|
|
||||||
#: searx/templates/oscar/stats.html:127 searx/templates/simple/stats.html:126
|
#: searx/templates/oscar/stats.html:127 searx/templates/simple/stats.html:126
|
||||||
msgid "Function"
|
msgid "Function"
|
||||||
|
@ -1040,7 +1037,7 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/messages/first_time.html:7
|
#: searx/templates/oscar/messages/first_time.html:7
|
||||||
msgid "It look like you are using SearXNG first time."
|
msgid "It look like you are using SearXNG first time."
|
||||||
msgstr ""
|
msgstr "يظهر أنك تستخدم محرك سيركس لأول مرة."
|
||||||
|
|
||||||
#: searx/templates/oscar/messages/no_cookies.html:3
|
#: searx/templates/oscar/messages/no_cookies.html:3
|
||||||
msgid "Information!"
|
msgid "Information!"
|
||||||
|
@ -1064,6 +1061,8 @@ msgstr "لم تتمكن المحركات من العثور على أية نتي
|
||||||
#: searx/templates/simple/messages/no_results.html:15
|
#: searx/templates/simple/messages/no_results.html:15
|
||||||
msgid "Please, try again later or find another SearXNG instance."
|
msgid "Please, try again later or find another SearXNG instance."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"يرجى إعادة المحاولة لاحقًا. إن كنت في عجلة من أمرك، ندعوك إلى البحث عن مثيل "
|
||||||
|
"خادم آخر لمحرك سيركس."
|
||||||
|
|
||||||
#: searx/templates/oscar/messages/no_results.html:17
|
#: searx/templates/oscar/messages/no_results.html:17
|
||||||
#: searx/templates/simple/messages/no_results.html:20
|
#: searx/templates/simple/messages/no_results.html:20
|
||||||
|
@ -1239,10 +1238,26 @@ msgstr "محركات البحث المُستخدَمة حاليًا"
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "يدعم اللغة المختارة"
|
msgstr "يدعم اللغة المختارة"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr "حفظ"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr "الخلف"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "الإجابات"
|
msgstr "الإجابات"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr "الصفحة السابقة"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "الصفحة التالية"
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1379,3 +1394,11 @@ msgstr "محرك"
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "الطريقة"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
Binary file not shown.
|
@ -9,7 +9,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2021-12-10 07:17+0000\n"
|
"PO-Revision-Date: 2021-12-10 07:17+0000\n"
|
||||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language: bg\n"
|
"Language: bg\n"
|
||||||
|
@ -21,172 +21,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "файлове"
|
msgstr "файлове"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "общо"
|
msgstr "общо"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "музика"
|
msgstr "музика"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "социална мрежа"
|
msgstr "социална мрежа"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "изображения"
|
msgstr "изображения"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "видео"
|
msgstr "видео"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "IT"
|
msgstr "IT"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "новини"
|
msgstr "новини"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "карта"
|
msgstr "карта"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr "onions"
|
msgstr "onions"
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "наука"
|
msgstr "наука"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr "автоматичен"
|
msgstr "автоматичен"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr "светъл"
|
msgstr "светъл"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr "тъмен"
|
msgstr "тъмен"
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr "изчакване"
|
msgstr "изчакване"
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr "грешка при анализа"
|
msgstr "грешка при анализа"
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr "Грешка в протокола HTTP"
|
msgstr "Грешка в протокола HTTP"
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr "мрежова грешка"
|
msgstr "мрежова грешка"
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr "неочакван срив"
|
msgstr "неочакван срив"
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr "HTTP грешка"
|
msgstr "HTTP грешка"
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr "HTTP грешка във връзката"
|
msgstr "HTTP грешка във връзката"
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr "прокси грешка"
|
msgstr "прокси грешка"
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr "Кепча"
|
msgstr "Кепча"
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr "твърде много искания"
|
msgstr "твърде много искания"
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr "отказан достъп"
|
msgstr "отказан достъп"
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr "грешка в API на сървъра"
|
msgstr "грешка в API на сървъра"
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "Не е намерен артикул"
|
msgstr "Не е намерен артикул"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr "Източник"
|
msgstr "Източник"
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "Неправилни настройки, моля проверете предпочитанията си."
|
msgstr "Неправилни настройки, моля проверете предпочитанията си."
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "невалидни настройки"
|
msgstr "невалидни настройки"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "грешка при търсенето"
|
msgstr "грешка при търсенето"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "преди {minutes} минута(минути)"
|
msgstr "преди {minutes} минута(минути)"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "преди {hours} час(ове), {minutes} минута(минути)"
|
msgstr "преди {hours} час(ове), {minutes} минута(минути)"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr "преустановен"
|
msgstr "преустановен"
|
||||||
|
|
||||||
|
@ -396,13 +396,13 @@ msgstr "торент файл"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "кеширана"
|
msgstr "кеширана"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -530,7 +530,6 @@ msgstr "Първоначални категории"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Език на търсене"
|
msgstr "Език на търсене"
|
||||||
|
|
||||||
|
@ -667,10 +666,11 @@ msgstr "Отвори връзките в нов раздел."
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Метод"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -724,7 +724,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -863,12 +863,10 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "запази"
|
msgstr "запази"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "назад"
|
msgstr "назад"
|
||||||
|
|
||||||
|
@ -912,13 +910,11 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "следваща страница"
|
msgstr "следваща страница"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "предишна страница"
|
msgstr "предишна страница"
|
||||||
|
|
||||||
|
@ -1250,10 +1246,26 @@ msgstr "Използвани търсачки в момента"
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Поддържка на избраният език"
|
msgstr "Поддържка на избраният език"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Отговори"
|
msgstr "Отговори"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1390,3 +1402,12 @@ msgstr "Търсачка"
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Метод"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -9,7 +9,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2021-12-17 07:17+0000\n"
|
"PO-Revision-Date: 2021-12-17 07:17+0000\n"
|
||||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language: bo\n"
|
"Language: bo\n"
|
||||||
|
@ -21,172 +21,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "ཡིག་ཚགས།"
|
msgstr "ཡིག་ཚགས།"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "དྲ་སྦྲེལ།"
|
msgstr "དྲ་སྦྲེལ།"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "རོལ་མོ།"
|
msgstr "རོལ་མོ།"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "སྤྱི་འབྲེལ།"
|
msgstr "སྤྱི་འབྲེལ།"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "པར་རིས།"
|
msgstr "པར་རིས།"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "བརྙན་ཟློས།"
|
msgstr "བརྙན་ཟློས།"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "ཆ་འཕྲིན་ལག་རྩལ།"
|
msgstr "ཆ་འཕྲིན་ལག་རྩལ།"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "གསར་འགྱུར།"
|
msgstr "གསར་འགྱུར།"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "ས་བཀྲ།"
|
msgstr "ས་བཀྲ།"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "ཚན་རིག"
|
msgstr "ཚན་རིག"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "རྣམ་གྲངས་གང་ཡང་རྙེད་རྒྱུ་མ་བྱུང་།"
|
msgstr "རྣམ་གྲངས་གང་ཡང་རྙེད་རྒྱུ་མ་བྱུང་།"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།ཁྱེད་ཀྱིས་གདམ་ཀ་ལ་བཅོས་སྒྲིག་གཏོང་རོགས།"
|
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།ཁྱེད་ཀྱིས་གདམ་ཀ་ལ་བཅོས་སྒྲིག་གཏོང་རོགས།"
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།"
|
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "འཚོལ་བཤེར་ལ་ནོར་འཁྲུལ་བྱུང་།"
|
msgstr "འཚོལ་བཤེར་ལ་ནོར་འཁྲུལ་བྱུང་།"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "སྐར་མ་ {minutes} སྔོན་ལ།"
|
msgstr "སྐར་མ་ {minutes} སྔོན་ལ།"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "ཆུ་ཚོད་ {hours} དང་སྐར་མ {minutes} སྔོན་ལ།"
|
msgstr "ཆུ་ཚོད་ {hours} དང་སྐར་མ {minutes} སྔོན་ལ།"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -391,13 +391,13 @@ msgstr "ས་བོན་ཡིག་ཆ།"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "འདྲ་བཤུས་རྒྱབ་ཚར།"
|
msgstr "འདྲ་བཤུས་རྒྱབ་ཚར།"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr "མངག་བཅོལ་བྱེད་ཟིན།"
|
msgstr "མངག་བཅོལ་བྱེད་ཟིན།"
|
||||||
|
|
||||||
|
@ -525,7 +525,6 @@ msgstr "གཞི་བཞག་གི་རིགས།"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "འཚོལ་བཤེར་ནང་དོན་མཚོན་བྱེད་ཀྱི་སྐད་རིགས།"
|
msgstr "འཚོལ་བཤེར་ནང་དོན་མཚོན་བྱེད་ཀྱི་སྐད་རིགས།"
|
||||||
|
|
||||||
|
@ -662,10 +661,11 @@ msgstr "ཤོག་ངོས་གསར་བ་ཞིག་ནས་དྲ་
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "ཐབས་ཤེས།"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -719,7 +719,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -854,12 +854,10 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "གསོག་འཇོག"
|
msgstr "གསོག་འཇོག"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "ཕྱིར་ལོག"
|
msgstr "ཕྱིར་ལོག"
|
||||||
|
|
||||||
|
@ -903,13 +901,11 @@ msgstr "འཚོལ་བཤེར་ནང་དོན་ནི།"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "དྲ་ངོས་གཞུག་མ།"
|
msgstr "དྲ་ངོས་གཞུག་མ།"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "དྲ་ངོས་སྔོན་མ།"
|
msgstr "དྲ་ངོས་སྔོན་མ།"
|
||||||
|
|
||||||
|
@ -1241,10 +1237,26 @@ msgstr "ཉེ་ལམ་སྤྱད་ཟིན་པའི་འཚོལ་
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "རྒྱབ་སྐྱོར་ཐོབ་པའི་སྐད་རིགས་གདམ་གསེས།"
|
msgstr "རྒྱབ་སྐྱོར་ཐོབ་པའི་སྐད་རིགས་གདམ་གསེས།"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "ལན།"
|
msgstr "ལན།"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1385,3 +1397,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "ཐབས་ཤེས།"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -10,7 +10,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2021-11-03 08:06+0000\n"
|
"PO-Revision-Date: 2021-11-03 08:06+0000\n"
|
||||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language: ca\n"
|
"Language: ca\n"
|
||||||
|
@ -22,172 +22,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "fitxers"
|
msgstr "fitxers"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "general"
|
msgstr "general"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "música"
|
msgstr "música"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "xarxes socials"
|
msgstr "xarxes socials"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "imatges"
|
msgstr "imatges"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "vídeos"
|
msgstr "vídeos"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "informàtica"
|
msgstr "informàtica"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "notícies"
|
msgstr "notícies"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "mapa"
|
msgstr "mapa"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "ciència"
|
msgstr "ciència"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "No s'ha trobat cap element"
|
msgstr "No s'ha trobat cap element"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "La configuració no és vàlida, editeu-la"
|
msgstr "La configuració no és vàlida, editeu-la"
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "La configuració no és vàlida"
|
msgstr "La configuració no és vàlida"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "error en la cerca"
|
msgstr "error en la cerca"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "fa {minutes} minuts"
|
msgstr "fa {minutes} minuts"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "fa {hours} hores i {minutes} minuts"
|
msgstr "fa {hours} hores i {minutes} minuts"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -399,13 +399,13 @@ msgstr "fitxer torrent"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "en memòria cau"
|
msgstr "en memòria cau"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr "en servidor intermediari"
|
msgstr "en servidor intermediari"
|
||||||
|
|
||||||
|
@ -533,7 +533,6 @@ msgstr "Categories predeterminades"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Llengua de cerca"
|
msgstr "Llengua de cerca"
|
||||||
|
|
||||||
|
@ -672,10 +671,11 @@ msgstr "Obre els enllaços de resultats en una pestanya nova"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Mètode"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -732,7 +732,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -874,12 +874,10 @@ msgstr ""
|
||||||
"resultats."
|
"resultats."
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "desa"
|
msgstr "desa"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "enrere"
|
msgstr "enrere"
|
||||||
|
|
||||||
|
@ -923,13 +921,11 @@ msgstr "Proveu a cercar:"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "pàgina següent"
|
msgstr "pàgina següent"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "pàgina anterior"
|
msgstr "pàgina anterior"
|
||||||
|
|
||||||
|
@ -1261,10 +1257,26 @@ msgstr "Motors de cerca usats actualment"
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Suporta la llengua seleccionada"
|
msgstr "Suporta la llengua seleccionada"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Respostes"
|
msgstr "Respostes"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1408,3 +1420,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Mètode"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -11,8 +11,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2021-12-31 07:17+0000\n"
|
"PO-Revision-Date: 2022-01-23 20:00+0000\n"
|
||||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"Language-Team: Czech "
|
"Language-Team: Czech "
|
||||||
|
@ -24,172 +24,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "soubory"
|
msgstr "soubory"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "obecné"
|
msgstr "obecné"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "hudba"
|
msgstr "hudba"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "sociální media"
|
msgstr "sociální media"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "obrázky"
|
msgstr "obrázky"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "videa"
|
msgstr "videa"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "IT"
|
msgstr "IT"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "zprávy"
|
msgstr "zprávy"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "mapa"
|
msgstr "mapa"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr "cibule"
|
msgstr "cibule"
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "věda"
|
msgstr "věda"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr "aplikace"
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr "světlý"
|
msgstr "světlý"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr "tmavý"
|
msgstr "tmavý"
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr "chyba HTTP protokolu"
|
msgstr "chyba HTTP protokolu"
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr "síťová chyba"
|
msgstr "síťová chyba"
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr "nečekaná chyba"
|
msgstr "nečekaná chyba"
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr "chyba HTTP"
|
msgstr "chyba HTTP"
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr "přístup odepřen"
|
msgstr "přístup odepřen"
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "Nic nenalezeno"
|
msgstr "Nic nenalezeno"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr "zdroj"
|
msgstr "zdroj"
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "Neplatné nastavení, upravte své předvolby"
|
msgstr "Neplatné nastavení, upravte své předvolby"
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "Neplatné nastavení"
|
msgstr "Neplatné nastavení"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "chyba vyhledávání"
|
msgstr "chyba vyhledávání"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "před {minutes} minutami"
|
msgstr "před {minutes} minutami"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "před {hours} hodinami, {minutes} minutami"
|
msgstr "před {hours} hodinami, {minutes} minutami"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -399,13 +399,13 @@ msgstr "soubor torrentu"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "archivovaná verze"
|
msgstr "archivovaná verze"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr "přes proxy"
|
msgstr "přes proxy"
|
||||||
|
|
||||||
|
@ -533,7 +533,6 @@ msgstr "Základní kategorie"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Jazyk hledání"
|
msgstr "Jazyk hledání"
|
||||||
|
|
||||||
|
@ -672,10 +671,11 @@ msgstr "Otevírat výsledky na novém panelu prohlížeče"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Dotazovací metoda"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -732,7 +732,7 @@ msgstr "Zakázat vše"
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -873,12 +873,10 @@ msgstr ""
|
||||||
"prozrazením dat při kliknutí na výsledky hledání."
|
"prozrazením dat při kliknutí na výsledky hledání."
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "uložit"
|
msgstr "uložit"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "zpět"
|
msgstr "zpět"
|
||||||
|
|
||||||
|
@ -922,13 +920,11 @@ msgstr "Zkuste vyhledat:"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "další stránka"
|
msgstr "další stránka"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "předchozí stránka"
|
msgstr "předchozí stránka"
|
||||||
|
|
||||||
|
@ -1260,10 +1256,26 @@ msgstr "Aktuálně používané vyhledávače"
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Podporuje vybraný jazyk"
|
msgstr "Podporuje vybraný jazyk"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Odpovědi"
|
msgstr "Odpovědi"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1406,3 +1418,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Dotazovací metoda"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -8,12 +8,12 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2020-07-09 13:10+0000\n"
|
"PO-Revision-Date: 2022-01-19 22:16+0000\n"
|
||||||
"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language: cy\n"
|
"Language: cy\n"
|
||||||
"Language-Team: Welsh "
|
"Language-Team: Welsh "
|
||||||
"(http://www.transifex.com/asciimoo/searx/language/cy/)\n"
|
"<https://weblate.bubu1.eu/projects/searxng/searxng/cy/>\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n "
|
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n "
|
||||||
"!= 11) ? 2 : 3\n"
|
"!= 11) ? 2 : 3\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
@ -21,172 +21,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "ffeiliau"
|
msgstr "ffeiliau"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "cyffredinol"
|
msgstr "cyffredinol"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "cerddoriaeth"
|
msgstr "cerddoriaeth"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "cyfryngau cymdeithasol"
|
msgstr "cyfryngau cymdeithasol"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "delweddau"
|
msgstr "delweddau"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "fideos"
|
msgstr "fideos"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "Technoleg"
|
msgstr "Technoleg"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "newyddion"
|
msgstr "newyddion"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "map"
|
msgstr "map"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr ""
|
msgstr "winwns"
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "gwyddoniaeth"
|
msgstr "gwyddoniaeth"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr ""
|
msgstr "tywyll"
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr "gwall dosrannu"
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "Ni chanfuwyd eitem"
|
msgstr "Ni chanfuwyd eitem"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "Gosodiadau annilys. Addasa dy ddewisiadau."
|
msgstr "Gosodiadau annilys. Addasa dy ddewisiadau."
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "Gosodiadau annilys"
|
msgstr "Gosodiadau annilys"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "gwall chwilio"
|
msgstr "gwall chwilio"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "{minutes} munud yn ôl"
|
msgstr "{minutes} munud yn ôl"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "{hours} awr, {minutes} munud yn ôl"
|
msgstr "{hours} awr, {minutes} munud yn ôl"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -387,13 +387,13 @@ msgstr "ffeil torrent"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -521,7 +521,6 @@ msgstr "Categorïau arferol"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Iaith chwilio"
|
msgstr "Iaith chwilio"
|
||||||
|
|
||||||
|
@ -658,10 +657,11 @@ msgstr "Agor dolenni canlyniadau mewn tabiau newydd yn y porwr"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Dull"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -715,7 +715,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -850,12 +850,10 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "cadw"
|
msgstr "cadw"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "nôl"
|
msgstr "nôl"
|
||||||
|
|
||||||
|
@ -899,13 +897,11 @@ msgstr "Rho gynnig ar chwilio am:"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "tudalen nesaf"
|
msgstr "tudalen nesaf"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "tudalen ddiwethaf"
|
msgstr "tudalen ddiwethaf"
|
||||||
|
|
||||||
|
@ -1083,7 +1079,7 @@ msgstr "Da iawn!"
|
||||||
|
|
||||||
#: searx/templates/oscar/messages/save_settings_successfull.html:8
|
#: searx/templates/oscar/messages/save_settings_successfull.html:8
|
||||||
msgid "Settings saved successfully."
|
msgid "Settings saved successfully."
|
||||||
msgstr "Cadwyd y gosodiadau yn iawn!"
|
msgstr "Cadwyd y gosodiadau yn iawn."
|
||||||
|
|
||||||
#: searx/templates/oscar/messages/unknow_error.html:7
|
#: searx/templates/oscar/messages/unknow_error.html:7
|
||||||
msgid "Oh snap!"
|
msgid "Oh snap!"
|
||||||
|
@ -1237,10 +1233,26 @@ msgstr ""
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Cefnogir yr iaith a ddewiswyd"
|
msgstr "Cefnogir yr iaith a ddewiswyd"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Atebion"
|
msgstr "Atebion"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1382,3 +1394,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Dull"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -9,9 +9,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2021-12-31 07:17+0000\n"
|
"PO-Revision-Date: 2022-01-23 20:00+0000\n"
|
||||||
"Last-Translator: Frederik From <frederikfrom@pm.me>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
"Language-Team: Danish "
|
"Language-Team: Danish "
|
||||||
"<https://weblate.bubu1.eu/projects/searxng/searxng/da/>\n"
|
"<https://weblate.bubu1.eu/projects/searxng/searxng/da/>\n"
|
||||||
|
@ -21,174 +21,174 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "filer"
|
msgstr "filer"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "generelt"
|
msgstr "generelt"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "musik"
|
msgstr "musik"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "sociale medier"
|
msgstr "sociale medier"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "billeder"
|
msgstr "billeder"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "videoer"
|
msgstr "videoer"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "it"
|
msgstr "it"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "nyheder"
|
msgstr "nyheder"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "kort"
|
msgstr "kort"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr "onion-links"
|
msgstr "onion-links"
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "videnskab"
|
msgstr "videnskab"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr "ordbøger"
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr "spørgsmål og svar"
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr "automatisk"
|
msgstr "automatisk"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr "lys"
|
msgstr "lys"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr "mørk"
|
msgstr "mørk"
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr "udløbstid"
|
msgstr "udløbstid"
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr "fortolkningsfejl"
|
msgstr "fortolkningsfejl"
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr "HTTP-protokolfejl"
|
msgstr "HTTP-protokolfejl"
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr "netværksfejl"
|
msgstr "netværksfejl"
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr "uventet nedbrud"
|
msgstr "uventet nedbrud"
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr "HTTP-fejl"
|
msgstr "HTTP-fejl"
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr "HTTP-tilkoblingsfejl"
|
msgstr "HTTP-tilkoblingsfejl"
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr "proxyfejl"
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr "CAPTCHA"
|
msgstr "CAPTCHA"
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr "for mange forespørgsler"
|
msgstr "for mange forespørgsler"
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr "adgang nægtet"
|
msgstr "adgang nægtet"
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr "server-API-fejl"
|
msgstr "server-API-fejl"
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "Intet fundet"
|
msgstr "Intet fundet"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr "Kilde"
|
msgstr "Kilde"
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "Ugyldige indstillinger, redigér venligst dine valg"
|
msgstr "Ugyldige indstillinger, redigér venligst dine valg"
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "Ugyldig indstilling"
|
msgstr "Ugyldig indstilling"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "søgefejl"
|
msgstr "søgefejl"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "for {minutes} minut(ter) siden"
|
msgstr "for {minutes} minut(ter) siden"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "for {hours} time(r) og {minutes} minut(ter) siden"
|
msgstr "for {hours} time(r) og {minutes} minut(ter) siden"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr "Suspenderet"
|
||||||
|
|
||||||
#: searx/answerers/random/answerer.py:67
|
#: searx/answerers/random/answerer.py:67
|
||||||
msgid "Random value generator"
|
msgid "Random value generator"
|
||||||
|
@ -397,13 +397,13 @@ msgstr "torrent-fil"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "cached"
|
msgstr "cached"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr "viderestillet"
|
msgstr "viderestillet"
|
||||||
|
|
||||||
|
@ -418,7 +418,7 @@ msgstr "Tillad"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:139
|
#: searx/templates/oscar/macros.html:139
|
||||||
msgid "broken"
|
msgid "broken"
|
||||||
msgstr ""
|
msgstr "defekt"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:141
|
#: searx/templates/oscar/macros.html:141
|
||||||
msgid "supported"
|
msgid "supported"
|
||||||
|
@ -482,7 +482,7 @@ msgstr "P95"
|
||||||
#: searx/templates/oscar/preferences.html:68
|
#: searx/templates/oscar/preferences.html:68
|
||||||
#: searx/templates/simple/preferences.html:83
|
#: searx/templates/simple/preferences.html:83
|
||||||
msgid "Failed checker test(s): "
|
msgid "Failed checker test(s): "
|
||||||
msgstr ""
|
msgstr "Fejlet checkertest(s): "
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:96
|
#: searx/templates/oscar/preferences.html:96
|
||||||
#: searx/templates/simple/preferences.html:101
|
#: searx/templates/simple/preferences.html:101
|
||||||
|
@ -498,7 +498,7 @@ msgstr "Generelt"
|
||||||
#: searx/templates/oscar/preferences.html:102
|
#: searx/templates/oscar/preferences.html:102
|
||||||
#: searx/templates/oscar/preferences.html:193
|
#: searx/templates/oscar/preferences.html:193
|
||||||
msgid "User Interface"
|
msgid "User Interface"
|
||||||
msgstr ""
|
msgstr "Bruger Interface"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:103
|
#: searx/templates/oscar/preferences.html:103
|
||||||
#: searx/templates/oscar/preferences.html:257
|
#: searx/templates/oscar/preferences.html:257
|
||||||
|
@ -515,7 +515,7 @@ msgstr "Søgemaskiner"
|
||||||
#: searx/templates/oscar/preferences.html:105
|
#: searx/templates/oscar/preferences.html:105
|
||||||
#: searx/templates/simple/preferences.html:329
|
#: searx/templates/simple/preferences.html:329
|
||||||
msgid "Special Queries"
|
msgid "Special Queries"
|
||||||
msgstr ""
|
msgstr "Specielle Forespørgsler"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:106
|
#: searx/templates/oscar/preferences.html:106
|
||||||
#: searx/templates/oscar/preferences.html:454
|
#: searx/templates/oscar/preferences.html:454
|
||||||
|
@ -531,7 +531,6 @@ msgstr "Standardkategorier"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Søgesprog"
|
msgstr "Søgesprog"
|
||||||
|
|
||||||
|
@ -626,7 +625,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:211
|
#: searx/templates/oscar/preferences.html:211
|
||||||
#: searx/templates/simple/preferences.html:205
|
#: searx/templates/simple/preferences.html:205
|
||||||
msgid "Change SearXNG layout"
|
msgid "Change SearXNG layout"
|
||||||
msgstr ""
|
msgstr "Ændr SearXNG layout"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:222
|
#: searx/templates/oscar/preferences.html:222
|
||||||
#: searx/templates/oscar/preferences.html:228
|
#: searx/templates/oscar/preferences.html:228
|
||||||
|
@ -640,11 +639,11 @@ msgstr "Stil"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:231
|
#: searx/templates/oscar/preferences.html:231
|
||||||
msgid "Show advanced settings"
|
msgid "Show advanced settings"
|
||||||
msgstr ""
|
msgstr "Vis avancerede indstillinger"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:232
|
#: searx/templates/oscar/preferences.html:232
|
||||||
msgid "Show advanced settings panel in the home page by default"
|
msgid "Show advanced settings panel in the home page by default"
|
||||||
msgstr ""
|
msgstr "Vis avancerede indstillinger panelet på forsiden som standardindstilling"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:235
|
#: searx/templates/oscar/preferences.html:235
|
||||||
#: searx/templates/oscar/preferences.html:245
|
#: searx/templates/oscar/preferences.html:245
|
||||||
|
@ -670,10 +669,11 @@ msgstr "Åben resultat-link i en ny browser-tab"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Metode"
|
msgstr "HTTP-metode"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -691,7 +691,7 @@ msgstr "Billede-proxy"
|
||||||
#: searx/templates/oscar/preferences.html:274
|
#: searx/templates/oscar/preferences.html:274
|
||||||
#: searx/templates/simple/preferences.html:256
|
#: searx/templates/simple/preferences.html:256
|
||||||
msgid "Proxying image results through SearXNG"
|
msgid "Proxying image results through SearXNG"
|
||||||
msgstr ""
|
msgstr "Bearbejder billedresulter gennem SearXNG"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:277
|
#: searx/templates/oscar/preferences.html:277
|
||||||
#: searx/templates/oscar/preferences.html:288
|
#: searx/templates/oscar/preferences.html:288
|
||||||
|
@ -721,7 +721,7 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:315
|
#: searx/templates/oscar/preferences.html:315
|
||||||
msgid "Allow all"
|
msgid "Allow all"
|
||||||
msgstr ""
|
msgstr "Tillad alle"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:316
|
#: searx/templates/oscar/preferences.html:316
|
||||||
msgid "Disable all"
|
msgid "Disable all"
|
||||||
|
@ -730,7 +730,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -766,7 +766,7 @@ msgstr "Tidsinterval"
|
||||||
#: searx/templates/simple/preferences.html:291
|
#: searx/templates/simple/preferences.html:291
|
||||||
#: searx/templates/simple/stats.html:31
|
#: searx/templates/simple/stats.html:31
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr ""
|
msgstr "Svartid"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:340
|
#: searx/templates/oscar/preferences.html:340
|
||||||
#: searx/templates/oscar/preferences.html:344
|
#: searx/templates/oscar/preferences.html:344
|
||||||
|
@ -872,12 +872,10 @@ msgstr ""
|
||||||
"resultatet."
|
"resultatet."
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "gem"
|
msgstr "gem"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "tilbage"
|
msgstr "tilbage"
|
||||||
|
|
||||||
|
@ -921,13 +919,11 @@ msgstr "Prøv at søge efter:"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "næste side"
|
msgstr "næste side"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "forrige side"
|
msgstr "forrige side"
|
||||||
|
|
||||||
|
@ -1259,10 +1255,26 @@ msgstr "Pt. anvendte søgemaskiner"
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Undstøtter valgte sprog"
|
msgstr "Undstøtter valgte sprog"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Svar"
|
msgstr "Svar"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1400,3 +1412,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Metode"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -21,8 +21,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2022-01-07 07:17+0000\n"
|
"PO-Revision-Date: 2022-01-28 07:16+0000\n"
|
||||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||||
"Language-Team: German <https://weblate.bubu1.eu/projects/searxng/searxng/de/>"
|
"Language-Team: German <https://weblate.bubu1.eu/projects/searxng/searxng/de/>"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -34,172 +34,172 @@ msgstr ""
|
||||||
"X-Generator: Weblate 4.10.1\n"
|
"X-Generator: Weblate 4.10.1\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "Dateien"
|
msgstr "Dateien"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "Allgemein"
|
msgstr "Allgemein"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "Musik"
|
msgstr "Musik"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "Soziale Medien"
|
msgstr "Soziale Medien"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "Bilder"
|
msgstr "Bilder"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr "Videos"
|
msgstr "Videos"
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr "IT"
|
msgstr "IT"
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "Neuigkeiten"
|
msgstr "Neuigkeiten"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "Karte"
|
msgstr "Karte"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr "Onions"
|
msgstr "Onions"
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "Wissenschaft"
|
msgstr "Wissenschaft"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr "Apps"
|
msgstr "Apps"
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr "Lexika"
|
msgstr "Lexika"
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr "Songtexte"
|
msgstr "Songtexte"
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr "Pakete"
|
msgstr "Pakete"
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr "Q&A"
|
msgstr "Q&A"
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr "Repositories"
|
msgstr "Repositories"
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr "Software Wikis"
|
msgstr "Software Wikis"
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr "WEB"
|
msgstr "WEB"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr "auto"
|
msgstr "auto"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr "hell"
|
msgstr "hell"
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr "dunkel"
|
msgstr "dunkel"
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr "Timeout"
|
msgstr "Timeout"
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr "Fehler beim Parsen"
|
msgstr "Fehler beim Parsen"
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr "HTTP-Protokollfehler"
|
msgstr "HTTP-Protokollfehler"
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr "Netzwerkfehler"
|
msgstr "Netzwerkfehler"
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr "unerwarteter Absturz"
|
msgstr "unerwarteter Absturz"
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr "HTTP-Fehler"
|
msgstr "HTTP-Fehler"
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr "HTTP-Verbindungsfehler"
|
msgstr "HTTP-Verbindungsfehler"
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr "Proxy-Fehler"
|
msgstr "Proxy-Fehler"
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr "CAPTCHA"
|
msgstr "CAPTCHA"
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr "zu viele Anfragen"
|
msgstr "zu viele Anfragen"
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr "Zugriff verweigert"
|
msgstr "Zugriff verweigert"
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr "Server-API-Fehler"
|
msgstr "Server-API-Fehler"
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr "Keine Einträge gefunden"
|
msgstr "Keine Einträge gefunden"
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr "Quelle"
|
msgstr "Quelle"
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr "Ungültige Einstellungen. Bitte diese überprüfen"
|
msgstr "Ungültige Einstellungen. Bitte diese überprüfen"
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr "Ungültige Einstellungen"
|
msgstr "Ungültige Einstellungen"
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "Suchfehler"
|
msgstr "Suchfehler"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "vor {minutes} Minute(n)"
|
msgstr "vor {minutes} Minute(n)"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "vor {hours} Stunde(n), {minutes} Minute(n)"
|
msgstr "vor {hours} Stunde(n), {minutes} Minute(n)"
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr "Ausgesetzt"
|
msgstr "Ausgesetzt"
|
||||||
|
|
||||||
|
@ -414,13 +414,13 @@ msgstr "Torrent"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr "Im Cache"
|
msgstr "Im Cache"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr "proxy"
|
msgstr "proxy"
|
||||||
|
|
||||||
|
@ -548,7 +548,6 @@ msgstr "Standardkategorien"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Suchsprache"
|
msgstr "Suchsprache"
|
||||||
|
|
||||||
|
@ -689,10 +688,11 @@ msgstr "Links in einem neuen Browser-Tab öffnen"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Methode"
|
msgstr "HTTP Methode"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -751,11 +751,11 @@ msgstr "Alle deaktivieren"
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Diese Registerkarte zeigt keine Suchergebnisse an, aber Sie können die hier "
|
"Auf dieser Registerkarte werden keine Suchergebnisse angezeigt, aber Sie "
|
||||||
"aufgelisteten Suchmaschinen über bangs (!) durchsuchen."
|
"können die hier aufgelisteten Suchmaschinen über bangs durchsuchen."
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:334
|
#: searx/templates/oscar/preferences.html:334
|
||||||
#: searx/templates/oscar/preferences.html:350
|
#: searx/templates/oscar/preferences.html:350
|
||||||
|
@ -897,12 +897,10 @@ msgstr ""
|
||||||
"ausgewählten Ergebnisseiten übermittelt werden."
|
"ausgewählten Ergebnisseiten übermittelt werden."
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "Speichern"
|
msgstr "Speichern"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "Zurück"
|
msgstr "Zurück"
|
||||||
|
|
||||||
|
@ -946,13 +944,11 @@ msgstr "Suche nach:"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "nächste Seite"
|
msgstr "nächste Seite"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "vorherige Seite"
|
msgstr "vorherige Seite"
|
||||||
|
|
||||||
|
@ -1287,10 +1283,26 @@ msgstr "Aktuell benutzte Suchmaschinen"
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Unterstützt die ausgewählten Sprachen"
|
msgstr "Unterstützt die ausgewählten Sprachen"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr "Speichern"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr "Zurück"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Antworten"
|
msgstr "Antworten"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr "Vorherige Seite"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr "Nächste Seite"
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1431,3 +1443,16 @@ msgstr "Suchmaschine"
|
||||||
#~ " contains your query. Your browser "
|
#~ " contains your query. Your browser "
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Methode"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "Diese Registerkarte zeigt keine Suchergebnisse"
|
||||||
|
#~ " an, aber Sie können die hier "
|
||||||
|
#~ "aufgelisteten Suchmaschinen über bangs (!) "
|
||||||
|
#~ "durchsuchen."
|
||||||
|
|
Binary file not shown.
|
@ -9,7 +9,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2020-07-09 13:10+0000\n"
|
"PO-Revision-Date: 2020-07-09 13:10+0000\n"
|
||||||
"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
|
"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
|
||||||
"Language: el_GR\n"
|
"Language: el_GR\n"
|
||||||
|
@ -21,172 +21,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr "αρχεία"
|
msgstr "αρχεία"
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr "γενικά"
|
msgstr "γενικά"
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr "μουσική"
|
msgstr "μουσική"
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr "κοινωνικά δίκτυα"
|
msgstr "κοινωνικά δίκτυα"
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr "εικόνες"
|
msgstr "εικόνες"
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr "νέα"
|
msgstr "νέα"
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr "χάρτης"
|
msgstr "χάρτης"
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr "επιστήμη"
|
msgstr "επιστήμη"
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr "λάθος αναζήτησης"
|
msgstr "λάθος αναζήτησης"
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "{minutes} λεπτά πριν"
|
msgstr "{minutes} λεπτά πριν"
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -391,13 +391,13 @@ msgstr "αρχείο torrent"
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -525,7 +525,6 @@ msgstr "Προεπιλεγμένες κατηγορίες"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr "Γλώσσα αναζήτησης"
|
msgstr "Γλώσσα αναζήτησης"
|
||||||
|
|
||||||
|
@ -662,10 +661,11 @@ msgstr "Άνοιξε τους συνδέσμους των αποτελεσμάτ
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr "Μέθοδος"
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -719,7 +719,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -854,12 +854,10 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr "αποθήκευση"
|
msgstr "αποθήκευση"
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr "πίσω"
|
msgstr "πίσω"
|
||||||
|
|
||||||
|
@ -903,13 +901,11 @@ msgstr "Δοκιμάστε αναζήτηση για:"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr "επόμενη σελίδα"
|
msgstr "επόμενη σελίδα"
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr "προηγούμενη σελίδα"
|
msgstr "προηγούμενη σελίδα"
|
||||||
|
|
||||||
|
@ -1241,10 +1237,26 @@ msgstr "Μηχανές αναζήτησης που χρησιμοποιούντ
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Υποστηρίζει την επιλεγμένη γλώσσα"
|
msgstr "Υποστηρίζει την επιλεγμένη γλώσσα"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Απαντήσεις"
|
msgstr "Απαντήσεις"
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1378,3 +1390,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr "Μέθοδος"
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||||
"PO-Revision-Date: 2014-01-30 15:22+0100\n"
|
"PO-Revision-Date: 2014-01-30 15:22+0100\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
|
@ -18,172 +18,172 @@ msgstr ""
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 2.9.1\n"
|
"Generated-By: Babel 2.9.1\n"
|
||||||
|
|
||||||
#: searx/webapp.py:165
|
#: searx/webapp.py:169
|
||||||
msgid "files"
|
msgid "files"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:166
|
#: searx/webapp.py:170
|
||||||
msgid "general"
|
msgid "general"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:167
|
#: searx/webapp.py:171
|
||||||
msgid "music"
|
msgid "music"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:168
|
#: searx/webapp.py:172
|
||||||
msgid "social media"
|
msgid "social media"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:169
|
#: searx/webapp.py:173
|
||||||
msgid "images"
|
msgid "images"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:170
|
#: searx/webapp.py:174
|
||||||
msgid "videos"
|
msgid "videos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:171
|
#: searx/webapp.py:175
|
||||||
msgid "it"
|
msgid "it"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:172
|
#: searx/webapp.py:176
|
||||||
msgid "news"
|
msgid "news"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:173
|
#: searx/webapp.py:177
|
||||||
msgid "map"
|
msgid "map"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:174
|
#: searx/webapp.py:178
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:175
|
#: searx/webapp.py:179
|
||||||
msgid "science"
|
msgid "science"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:177
|
#: searx/webapp.py:181
|
||||||
msgid "apps"
|
msgid "apps"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:178
|
#: searx/webapp.py:182
|
||||||
msgid "dictionaries"
|
msgid "dictionaries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:179
|
#: searx/webapp.py:183
|
||||||
msgid "lyrics"
|
msgid "lyrics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:180
|
#: searx/webapp.py:184
|
||||||
msgid "packages"
|
msgid "packages"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:181
|
#: searx/webapp.py:185
|
||||||
msgid "q&a"
|
msgid "q&a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:182
|
#: searx/webapp.py:186
|
||||||
msgid "repos"
|
msgid "repos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:183
|
#: searx/webapp.py:187
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:184
|
#: searx/webapp.py:188
|
||||||
msgid "web"
|
msgid "web"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "light"
|
msgid "light"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:189
|
#: searx/webapp.py:193
|
||||||
msgid "dark"
|
msgid "dark"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:192
|
#: searx/webapp.py:196
|
||||||
msgid "timeout"
|
msgid "timeout"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:193
|
#: searx/webapp.py:197
|
||||||
msgid "parsing error"
|
msgid "parsing error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:194
|
#: searx/webapp.py:198
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:195
|
#: searx/webapp.py:199
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:197
|
#: searx/webapp.py:201
|
||||||
msgid "unexpected crash"
|
msgid "unexpected crash"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:204
|
#: searx/webapp.py:208
|
||||||
msgid "HTTP error"
|
msgid "HTTP error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:205
|
#: searx/webapp.py:209
|
||||||
msgid "HTTP connection error"
|
msgid "HTTP connection error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:211
|
#: searx/webapp.py:215
|
||||||
msgid "proxy error"
|
msgid "proxy error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:212
|
#: searx/webapp.py:216
|
||||||
msgid "CAPTCHA"
|
msgid "CAPTCHA"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:213
|
#: searx/webapp.py:217
|
||||||
msgid "too many requests"
|
msgid "too many requests"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:214
|
#: searx/webapp.py:218
|
||||||
msgid "access denied"
|
msgid "access denied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:215
|
#: searx/webapp.py:219
|
||||||
msgid "server API error"
|
msgid "server API error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:402
|
#: searx/webapp.py:421
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/engines/qwant.py:212
|
#: searx/engines/qwant.py:212
|
||||||
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:404
|
#: searx/templates/simple/result_templates/images.html:23 searx/webapp.py:423
|
||||||
msgid "Source"
|
msgid "Source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:515 searx/webapp.py:925
|
#: searx/webapp.py:534 searx/webapp.py:941
|
||||||
msgid "Invalid settings, please edit your preferences"
|
msgid "Invalid settings, please edit your preferences"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:531
|
#: searx/webapp.py:550
|
||||||
msgid "Invalid settings"
|
msgid "Invalid settings"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:608 searx/webapp.py:683
|
#: searx/webapp.py:626 searx/webapp.py:701
|
||||||
msgid "search error"
|
msgid "search error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:726
|
#: searx/webapp.py:744
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:728
|
#: searx/webapp.py:746
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/webapp.py:846
|
#: searx/webapp.py:862
|
||||||
msgid "Suspended"
|
msgid "Suspended"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -384,13 +384,13 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
#: searx/templates/oscar/macros.html:37 searx/templates/oscar/macros.html:39
|
||||||
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
#: searx/templates/oscar/macros.html:73 searx/templates/oscar/macros.html:75
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "cached"
|
msgid "cached"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
#: searx/templates/oscar/macros.html:43 searx/templates/oscar/macros.html:59
|
||||||
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
#: searx/templates/oscar/macros.html:79 searx/templates/oscar/macros.html:93
|
||||||
#: searx/templates/simple/macros.html:41
|
#: searx/templates/simple/macros.html:43
|
||||||
msgid "proxied"
|
msgid "proxied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -518,7 +518,6 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:133
|
#: searx/templates/oscar/preferences.html:133
|
||||||
#: searx/templates/simple/preferences.html:117
|
#: searx/templates/simple/preferences.html:117
|
||||||
#: searx/templates/simple/preferences.html:244
|
|
||||||
msgid "Search language"
|
msgid "Search language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -655,10 +654,11 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:262
|
#: searx/templates/oscar/preferences.html:262
|
||||||
#: searx/templates/simple/preferences.html:237
|
#: searx/templates/simple/preferences.html:237
|
||||||
msgid "Method"
|
msgid "HTTP Method"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:263
|
#: searx/templates/oscar/preferences.html:263
|
||||||
|
#: searx/templates/simple/preferences.html:244
|
||||||
msgid ""
|
msgid ""
|
||||||
"Change how forms are submited, <a "
|
"Change how forms are submited, <a "
|
||||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||||
|
@ -712,7 +712,7 @@ msgstr ""
|
||||||
#: searx/templates/oscar/preferences.html:325
|
#: searx/templates/oscar/preferences.html:325
|
||||||
#: searx/templates/simple/preferences.html:280
|
#: searx/templates/simple/preferences.html:280
|
||||||
msgid ""
|
msgid ""
|
||||||
"This tab does not show up for search results but you can search the "
|
"This tab does not show up for search results, but you can search the "
|
||||||
"engines listed here via bangs."
|
"engines listed here via bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -847,12 +847,10 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:492
|
#: searx/templates/oscar/preferences.html:492
|
||||||
#: searx/templates/simple/preferences.html:404
|
|
||||||
msgid "save"
|
msgid "save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/preferences.html:493
|
#: searx/templates/oscar/preferences.html:493
|
||||||
#: searx/templates/simple/preferences.html:406
|
|
||||||
msgid "back"
|
msgid "back"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -896,13 +894,11 @@ msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:162
|
#: searx/templates/oscar/results.html:162
|
||||||
#: searx/templates/oscar/results.html:187
|
#: searx/templates/oscar/results.html:187
|
||||||
#: searx/templates/simple/results.html:182
|
|
||||||
msgid "next page"
|
msgid "next page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/oscar/results.html:169
|
#: searx/templates/oscar/results.html:169
|
||||||
#: searx/templates/oscar/results.html:180
|
#: searx/templates/oscar/results.html:180
|
||||||
#: searx/templates/simple/results.html:165
|
|
||||||
msgid "previous page"
|
msgid "previous page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1232,10 +1228,26 @@ msgstr ""
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:404
|
||||||
|
msgid "Save"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences.html:406
|
||||||
|
msgid "Back"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:24
|
#: searx/templates/simple/results.html:24
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:165
|
||||||
|
msgid "Previous page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/results.html:182
|
||||||
|
msgid "Next page"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/search.html:9
|
#: searx/templates/simple/search.html:9
|
||||||
#: searx/templates/simple/simple_search.html:5
|
#: searx/templates/simple/simple_search.html:5
|
||||||
msgid "clear"
|
msgid "clear"
|
||||||
|
@ -1379,3 +1391,12 @@ msgstr ""
|
||||||
#~ "can record this title."
|
#~ "can record this title."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid "Method"
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
#~ msgid ""
|
||||||
|
#~ "This tab does not show up for "
|
||||||
|
#~ "search results but you can search "
|
||||||
|
#~ "the engines listed here via bangs."
|
||||||
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue