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"
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -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/
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								SECURITY.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								SECURITY.md
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										75
									
								
								docs/admin/installation-switch2ng.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								docs/admin/installation-switch2ng.rst
									
									
									
									
									
										Normal file
									
								
							@ -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.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										9
									
								
								docs/src/searx.engines.tineye.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								docs/src/searx.engines.tineye.rst
									
									
									
									
									
										Normal file
									
								
							@ -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/
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										6
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "dependencies": {
 | 
				
			||||||
 | 
					    "eslint": "^8.7.0",
 | 
				
			||||||
 | 
					    "pyright": "^1.1.215"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										10
									
								
								pyrightconfig-ci.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								pyrightconfig-ci.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					    "venvPath": "local",
 | 
				
			||||||
 | 
					    "venv": "py3",
 | 
				
			||||||
 | 
					    "include": [
 | 
				
			||||||
 | 
					        "searx",
 | 
				
			||||||
 | 
					        "searxng_extra",
 | 
				
			||||||
 | 
					        "tests"
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "typeCheckingMode": "off"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										9
									
								
								pyrightconfig.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								pyrightconfig.json
									
									
									
									
									
										Normal file
									
								
							@ -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))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										103
									
								
								searx/engines/tineye.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								searx/engines/tineye.py
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										71
									
								
								searx/help/about.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								searx/help/about.md
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										42
									
								
								searx/search/processors/online_url_search.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								searx/search/processors/online_url_search.py
									
									
									
									
									
										Normal file
									
								
							@ -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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								searx/static/themes/oscar/js/searxng.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								searx/static/themes/oscar/js/searxng.min.js
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@ -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
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								searx/static/themes/simple/css/searxng-rtl.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								searx/static/themes/simple/css/searxng-rtl.min.css
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								searx/static/themes/simple/css/searxng.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								searx/static/themes/simple/css/searxng.min.css
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							@ -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',
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								searx/static/themes/simple/js/searxng.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								searx/static/themes/simple/js/searxng.min.js
									
									
									
									
										vendored
									
									
								
							
										
											Binary file not shown.
										
									
								
							@ -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 {
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										69
									
								
								searx/static/themes/simple/src/less/style-ltr.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								searx/static/themes/simple/src/less/style-ltr.less
									
									
									
									
									
										Normal file
									
								
							@ -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 }}">
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										5
									
								
								searx/templates/simple/page_with_header.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								searx/templates/simple/page_with_header.html
									
									
									
									
									
										Normal file
									
								
							@ -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
	
	Block a user