mirror of
https://github.com/searxng/searxng
synced 2024-01-01 18:24:07 +00:00
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'
|
||||
;; 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::
|
||||
;;
|
||||
;; (global-set-key [f6] 'flycheck-mode)
|
||||
@ -99,12 +103,19 @@
|
||||
;; use nodejs from the (local) NVM environment (see nvm-dir)
|
||||
(nvm-use-for-buffer)
|
||||
(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)
|
||||
))))
|
||||
|
||||
(python-mode
|
||||
. ((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
|
||||
(list (expand-file-name "bin/virtualenv" python-shell-virtualenv-root)
|
||||
;;"--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
|
||||
@ -16,3 +16,6 @@ dist/
|
||||
local/
|
||||
gh-pages/
|
||||
*.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.%,%,$@))"
|
||||
|
||||
PHONY += test ci.test test.shell
|
||||
ci.test: test.yamllint test.black test.pylint test.unit test.robot
|
||||
test: test.yamllint test.black test.pylint test.unit test.robot test.shell
|
||||
ci.test: test.yamllint test.black test.pyright test.pylint test.unit test.robot test.rst
|
||||
test: test.yamllint test.black test.pyright test.pylint test.unit test.robot test.rst test.shell
|
||||
test.shell:
|
||||
$(Q)shellcheck -x -s dash \
|
||||
dockerfiles/docker-entrypoint.sh
|
||||
@ -86,7 +86,7 @@ MANAGE += py.build py.clean
|
||||
MANAGE += pyenv pyenv.install pyenv.uninstall
|
||||
MANAGE += pypi.upload pypi.upload.test
|
||||
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 += static.build.commit static.build.drop static.build.restore
|
||||
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
|
||||
|
||||
----
|
||||
|
||||
.. figure:: https://raw.githubusercontent.com/searxng/searxng/master/src/brand/searxng.svg
|
||||
:target: https://docs.searxng.org/
|
||||
:alt: SearXNG
|
||||
:width: 100%
|
||||
: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 homepage|
|
||||
|SearXNG wiki|
|
||||
@ -15,16 +25,11 @@
|
||||
|weblate|
|
||||
|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
|
||||
.. _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
|
||||
.. _homepage: https://docs.searxng.org/
|
||||
.. _metasearch engine: https://en.wikipedia.org/wiki/Metasearch_engine
|
||||
@ -58,26 +63,76 @@ our homepage_.
|
||||
: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>`_
|
||||
* `exhaustive changelog <https://github.com/searxng/searxng/wiki/Changes-from-version-1.0.0>`_
|
||||
Come join us if you have questions or just want to chat about SearXNG.
|
||||
|
||||
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
|
||||
|
||||
|
||||
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
|
||||
""""""""""""
|
||||
============
|
||||
|
||||
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
|
||||
: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-connector-python: https://pypi.org/project/mysql-connector-python
|
||||
|
||||
.. sidebar:: info
|
||||
|
||||
- :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
|
||||
engine, you must install the package ``mysql-connector-python``.
|
||||
|
@ -12,6 +12,7 @@ Administrator documentation
|
||||
installation-nginx
|
||||
installation-apache
|
||||
installation-docker
|
||||
installation-switch2ng
|
||||
update-searxng
|
||||
engines/index
|
||||
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
|
||||
============
|
||||
|
||||
.. sidebar:: info
|
||||
|
||||
:ref:`installation switch2ng`
|
||||
|
||||
*You're spoilt for choice*, choose your preferred method of installation.
|
||||
|
||||
- :ref:`installation docker`
|
||||
|
@ -3,7 +3,6 @@
|
||||
|
||||
import sys, os
|
||||
from pallets_sphinx_themes import ProjectLink
|
||||
from flask import Flask
|
||||
|
||||
from searx import get_setting
|
||||
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
|
||||
@ -42,12 +41,12 @@ import searx.engines
|
||||
import searx.plugins
|
||||
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'] = ''
|
||||
from searx.webapp import application
|
||||
import searx.webapp
|
||||
|
||||
searx.engines.load_engines(searx.settings['engines'])
|
||||
searx.plugins.initialize(application)
|
||||
|
||||
jinja_contexts = {
|
||||
'searx': {
|
||||
|
@ -238,10 +238,10 @@ and ``test.robot``. You can run tests selective, e.g.::
|
||||
...
|
||||
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
|
||||
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
|
||||
source "$(dirname "${BASH_SOURCE[0]}")/utils/lib_redis.sh"
|
||||
|
||||
PATH="${REPO_ROOT}/node_modules/.bin:${PATH}"
|
||||
|
||||
# config
|
||||
|
||||
PYOBJECTS="searx"
|
||||
@ -46,6 +48,10 @@ while IFS= read -r line; do
|
||||
YAMLLINT_FILES+=("$line")
|
||||
done <<< "$(git ls-files './tests/*.yml' './searx/*.yml' './utils/templates/etc/searxng/*.yml')"
|
||||
|
||||
RST_FILES=(
|
||||
'README.rst'
|
||||
)
|
||||
|
||||
PYLINT_SEARXNG_DISABLE_OPTION="\
|
||||
I,C,R,\
|
||||
W0105,W0212,W0511,W0603,W0613,W0621,W0702,W0703,W1401,\
|
||||
@ -99,10 +105,12 @@ format.:
|
||||
test.:
|
||||
yamllint : lint YAML files (YAMLLINT_FILES)
|
||||
pylint : lint PYLINT_FILES, searx/engines, searx & tests
|
||||
pyright : static type check of python sources
|
||||
black : check black code format
|
||||
unit : run unit tests
|
||||
coverage : run unit tests with coverage
|
||||
robot : run robot test
|
||||
rst : test .rst files incl. README.rst
|
||||
clean : clean intermediate test stuff
|
||||
themes.:
|
||||
all : build all themes
|
||||
@ -553,6 +561,12 @@ node.env() {
|
||||
dump_return $?
|
||||
}
|
||||
|
||||
node.env.devtools() {
|
||||
nodejs.ensure
|
||||
build_msg INSTALL "package.json: developer and CI tools"
|
||||
npm install
|
||||
}
|
||||
|
||||
node.clean() {
|
||||
if ! required_commands npm 2>/dev/null; then
|
||||
build_msg CLEAN "npm is not installed / ignore npm dependencies"
|
||||
@ -677,6 +691,20 @@ test.pylint() {
|
||||
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() {
|
||||
build_msg TEST "[black] \$BLACK_TARGETS"
|
||||
pyenv.cmd black --check --diff "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
|
||||
@ -707,6 +735,13 @@ test.robot() {
|
||||
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() {
|
||||
build_msg CLEAN "test stuff"
|
||||
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
|
||||
twine==3.7.1
|
||||
Pallets-Sphinx-Themes==2.0.2
|
||||
Sphinx==4.3.2
|
||||
Sphinx==4.4.0
|
||||
sphinx-issues==3.0.1
|
||||
sphinx-jinja==1.4.0
|
||||
sphinx-tabs==3.2.0
|
||||
|
@ -13,3 +13,6 @@ uvloop==0.16.0
|
||||
httpx-socks[asyncio]==0.7.2
|
||||
langdetect==1.0.9
|
||||
setproctitle==1.2.2
|
||||
redis==4.1.2
|
||||
mistletoe==0.8.1
|
||||
typing_extensions==4.0.1
|
||||
|
@ -1,33 +1,23 @@
|
||||
'''
|
||||
searx is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""This module implements functions needed for the autocompleter.
|
||||
|
||||
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 urllib.parse import urlencode
|
||||
|
||||
from lxml import etree
|
||||
from httpx import HTTPError
|
||||
|
||||
|
||||
from searx import settings
|
||||
from searx.data import ENGINES_LANGUAGES
|
||||
from searx.network import get as http_get
|
||||
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):
|
||||
if 'timeout' not in kwargs:
|
||||
@ -36,7 +26,26 @@ def 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
|
||||
autocomplete_url = 'https://lookup.dbpedia.org/api/search.asmx/KeywordSearch?'
|
||||
|
||||
@ -51,7 +60,7 @@ def dbpedia(query, lang):
|
||||
return results
|
||||
|
||||
|
||||
def duckduckgo(query, lang):
|
||||
def duckduckgo(query, _lang):
|
||||
# duckduckgo autocompleter
|
||||
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]
|
||||
|
||||
|
||||
def swisscows(query, lang):
|
||||
def swisscows(query, _lang):
|
||||
# swisscows autocompleter
|
||||
url = 'https://swisscows.ch/api/suggest?{query}&itemsCount=5'
|
||||
|
||||
@ -128,6 +137,7 @@ backends = {
|
||||
'swisscows': swisscows,
|
||||
'qwant': qwant,
|
||||
'wikipedia': wikipedia,
|
||||
'brave': brave,
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ def ahmia_blacklist_loader():
|
||||
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()
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -827,6 +827,7 @@
|
||||
"CNY"
|
||||
],
|
||||
"רנמינבי": "CNY",
|
||||
"zsenminpi": "CNY",
|
||||
"renminbi cinese": "CNY",
|
||||
"人民元": "CNY",
|
||||
"juanis": "CNY",
|
||||
@ -992,7 +993,7 @@
|
||||
"džibučio frankas": "DJF",
|
||||
"djiboutiaanse frank": "DJF",
|
||||
"frank dżibuti": "DJF",
|
||||
"franco do djibouti": "DJF",
|
||||
"franco do jibuti": "DJF",
|
||||
"франк джибути": "DJF",
|
||||
"џибутски франак": "DJF",
|
||||
"djiboutisk franc": "DJF",
|
||||
@ -2324,11 +2325,10 @@
|
||||
"mazedonischer denar": "MKD",
|
||||
"macedonian denar": "MKD",
|
||||
"makedona denaro": "MKD",
|
||||
"denar normacedonio": "MKD",
|
||||
"denar macedonio": "MKD",
|
||||
"põhja makedoonia denaar": "MKD",
|
||||
"pohjois makedonian denaari": "MKD",
|
||||
"denar macédonien": "MKD",
|
||||
"denar macedonio": "MKD",
|
||||
"דינר מקדוני": "MKD",
|
||||
"makedonski denar": "MKD",
|
||||
"macedón dénár": "MKD",
|
||||
@ -4849,6 +4849,7 @@
|
||||
"belarus rubel": "BYN",
|
||||
"br": "BYN",
|
||||
"nuevo rublo bierlorruso": "BYN",
|
||||
"зайчик": "BYN",
|
||||
"білоруський рубль": "BYN",
|
||||
"Bz$": "BZD",
|
||||
"bz$": "BZD",
|
||||
@ -5060,7 +5061,6 @@
|
||||
"יואן": "CNY",
|
||||
"יואן סיני": "CNY",
|
||||
"kínai jüan": "CNY",
|
||||
"zsenminpi": "CNY",
|
||||
"yuan cinese": "CNY",
|
||||
"人民幣": "CNY",
|
||||
"中国元": "CNY",
|
||||
@ -5223,10 +5223,10 @@
|
||||
"המטבע של ג'יבוטי": "DJF",
|
||||
"franco di gibuti": "DJF",
|
||||
"djiboutische frank": "DJF",
|
||||
"franco do jibuti": "DJF",
|
||||
"franco djibutiano": "DJF",
|
||||
"franco djibutiense": "DJF",
|
||||
"franco do djibuti": "DJF",
|
||||
"franco do djibouti": "DJF",
|
||||
"franco jibutiano": "DJF",
|
||||
"franco jibutiense": "DJF",
|
||||
"валюта джибути": "DJF",
|
||||
@ -6383,6 +6383,8 @@
|
||||
"M": "LSL",
|
||||
"lisente": "LSL",
|
||||
"loti lesothan": "LSL",
|
||||
"לוטי": "LSL",
|
||||
"לוטי לסוטו": "LSL",
|
||||
"loti del lesotho": "LSL",
|
||||
"レソト・ロチ": "LSL",
|
||||
"валюта лесото": "LSL",
|
||||
@ -6494,15 +6496,12 @@
|
||||
"dinar normacedoni": "MKD",
|
||||
"makedonský dinár": "MKD",
|
||||
"makedonsk denar": "MKD",
|
||||
"nordmazedonischer denar": "MKD",
|
||||
"denari": "MKD",
|
||||
"mkd": "MKD",
|
||||
"north macedonian denar": "MKD",
|
||||
"makedonia denaro": "MKD",
|
||||
"dinar macedonio": "MKD",
|
||||
"makedoonia denaar": "MKD",
|
||||
"makedonian denaari": "MKD",
|
||||
"dinar macédonien": "MKD",
|
||||
"denar macedone": "MKD",
|
||||
"denaro macedone": "MKD",
|
||||
"マケドニア・ディナール": "MKD",
|
||||
@ -7031,8 +7030,6 @@
|
||||
"питкэрнский доллар": "PND",
|
||||
"غواراني": "PYG",
|
||||
"₲": "PYG",
|
||||
"paraguajský guarani": "PYG",
|
||||
"paraguajský guaraní": "PYG",
|
||||
"paraguayský guarani": "PYG",
|
||||
"pyg": "PYG",
|
||||
"paraguayan guarani": "PYG",
|
||||
@ -8052,9 +8049,9 @@
|
||||
"unitate monetară europeană": "XEU",
|
||||
"европейская валютная единица": "XEU",
|
||||
"europeiska valutaenhet": "XEU",
|
||||
"xmr": "XMR",
|
||||
"mo": "XMR",
|
||||
"bitmonero": "XMR",
|
||||
"mo": "XMR",
|
||||
"xmr": "XMR",
|
||||
"فرنك س ف ا غرب أفريقيا": "XOF",
|
||||
"F": "XOF",
|
||||
"xof": "XOF",
|
||||
@ -8124,6 +8121,7 @@
|
||||
"единая система региональных взаиморасчетов": "XSU",
|
||||
"единая система региональных взаиморасчётов": "XSU",
|
||||
"rial del iemen del nord": "YER",
|
||||
"nord jemena rialo": "YER",
|
||||
"rial nord yéménite": "YER",
|
||||
"észak jemeni riál": "YER",
|
||||
"北イエメン・リアル": "YER",
|
||||
@ -8155,6 +8153,7 @@
|
||||
"R": "ZAR",
|
||||
"rand de sud àfrica": "ZAR",
|
||||
"rand sud africà": "ZAR",
|
||||
"rand de affrica": "ZAR",
|
||||
"rando": "ZAR",
|
||||
"sud afrika rando": "ZAR",
|
||||
"zar": "ZAR",
|
||||
@ -8753,7 +8752,7 @@
|
||||
"sv": "Burundisk franc",
|
||||
"ta": "புரூண்டி பிராங்க்",
|
||||
"tr": "Burundi frangı",
|
||||
"uk": "Бурундійський франк",
|
||||
"uk": "бурундійський франк",
|
||||
"he": "פרנק בורונדי",
|
||||
"ro": "franc burundez"
|
||||
},
|
||||
@ -10965,7 +10964,7 @@
|
||||
"nl": "Sri Lankaanse roepie",
|
||||
"pl": "Rupia lankijska",
|
||||
"pt": "rúpia do Sri Lanka",
|
||||
"ru": "Ланкийская рупия",
|
||||
"ru": "ланкийская рупия",
|
||||
"sr": "шриланчанска рупија",
|
||||
"sv": "Lankesisk rupie",
|
||||
"ta": "இலங்கை ரூபாய்",
|
||||
@ -11031,7 +11030,8 @@
|
||||
"sr": "лесотски лоти",
|
||||
"sv": "Lesothisk Loti",
|
||||
"tr": "Loti",
|
||||
"uk": "Лоті"
|
||||
"uk": "Лоті",
|
||||
"he": "לוטי"
|
||||
},
|
||||
"LYD": {
|
||||
"ar": "دينار ليبي",
|
||||
@ -11186,13 +11186,13 @@
|
||||
"ca": "denar",
|
||||
"cs": "Makedonský denár",
|
||||
"da": "Makedonske denarer",
|
||||
"de": "nordmazedonischer Denar",
|
||||
"en": "denar",
|
||||
"de": "mazedonischer Denar",
|
||||
"en": "Macedonian denar",
|
||||
"eo": "makedona denaro",
|
||||
"es": "denar macedonio",
|
||||
"et": "Makedoonia denaar",
|
||||
"fi": "Makedonian denaari",
|
||||
"fr": "dinar macédonien",
|
||||
"fr": "denar macédonien",
|
||||
"gl": "Dinar macedonio",
|
||||
"he": "דינר מקדוני",
|
||||
"hr": "Makedonski denar",
|
||||
@ -11980,7 +11980,7 @@
|
||||
"PYG": {
|
||||
"ar": "غواراني باراغواي",
|
||||
"ca": "guaraní",
|
||||
"cs": "Paraguayský guaraní",
|
||||
"cs": "paraguayský guaraní",
|
||||
"de": "Paraguayischer Guaraní",
|
||||
"en": "Paraguayan guaraní",
|
||||
"eo": "paragvaja gvaranio",
|
||||
@ -13662,7 +13662,8 @@
|
||||
"sr": "јужноафрички ранд",
|
||||
"sv": "Rand",
|
||||
"tr": "Güney Afrika randı",
|
||||
"uk": "Ранд"
|
||||
"uk": "Ранд",
|
||||
"cy": "Rand De Affrica"
|
||||
},
|
||||
"ZMW": {
|
||||
"ar": "كواشا زامبية",
|
||||
|
@ -1,11 +1,12 @@
|
||||
{
|
||||
"versions": [
|
||||
"96.0.3",
|
||||
"96.0.2",
|
||||
"96.0.1",
|
||||
"96.0",
|
||||
"95.0.2",
|
||||
"95.0.1",
|
||||
"95.0",
|
||||
"94.0.2",
|
||||
"94.0.1",
|
||||
"94.0"
|
||||
"95.0"
|
||||
],
|
||||
"os": [
|
||||
"Windows NT 10.0; Win64; x64",
|
||||
|
@ -211,6 +211,7 @@
|
||||
"Q1104069": "$",
|
||||
"Q11061003": "μm²",
|
||||
"Q11061005": "nm²",
|
||||
"Q110742003": "dppx",
|
||||
"Q1131660": "st",
|
||||
"Q1137675": "cr",
|
||||
"Q1140444": "Zb",
|
||||
|
@ -42,6 +42,7 @@ ENGINE_DEFAULT_ARGS = {
|
||||
"safesearch": False,
|
||||
"time_range_support": False,
|
||||
"enable_http": False,
|
||||
"using_tor_proxy": False,
|
||||
"display_error_messages": True,
|
||||
"tokens": [],
|
||||
"about": {},
|
||||
@ -230,8 +231,8 @@ def set_language_attributes(engine: Engine):
|
||||
)
|
||||
|
||||
|
||||
def update_attributes_for_tor(engine):
|
||||
if settings['outgoing'].get('using_tor_proxy') and hasattr(engine, 'onion_url'):
|
||||
def update_attributes_for_tor(engine: Engine) -> bool:
|
||||
if using_tor_proxy(engine) and hasattr(engine, 'onion_url'):
|
||||
engine.search_url = engine.onion_url + getattr(engine, 'search_path', '')
|
||||
engine.timeout += settings['outgoing'].get('extra_proxy_timeout', 0)
|
||||
|
||||
@ -249,13 +250,18 @@ def is_missing_required_attributes(engine):
|
||||
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):
|
||||
# check if engine is inactive
|
||||
if engine.inactive is True:
|
||||
return False
|
||||
|
||||
# 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 True
|
||||
|
@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""
|
||||
currency convert (DuckDuckGo)
|
||||
# lint: pylint
|
||||
"""Currency convert (DuckDuckGo)
|
||||
"""
|
||||
|
||||
import json
|
||||
@ -13,18 +13,19 @@ about = {
|
||||
"use_official_api": False,
|
||||
"require_api_key": False,
|
||||
"results": 'JSONP',
|
||||
"description": "Service from DuckDuckGo.",
|
||||
}
|
||||
|
||||
engine_type = 'online_currency'
|
||||
categories = []
|
||||
url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}'
|
||||
base_url = 'https://duckduckgo.com/js/spice/currency/1/{0}/{1}'
|
||||
weight = 100
|
||||
|
||||
https_support = True
|
||||
|
||||
|
||||
def request(query, params):
|
||||
params['url'] = url.format(params['from'], params['to'])
|
||||
def request(_query, params):
|
||||
params['url'] = base_url.format(params['from'], params['to'])
|
||||
return params
|
||||
|
||||
|
||||
@ -34,7 +35,7 @@ def response(resp):
|
||||
results = []
|
||||
try:
|
||||
conversion_rate = float(json.loads(json_resp)['conversion']['converted-amount'])
|
||||
except:
|
||||
except ValueError:
|
||||
return results
|
||||
answer = '{0} {1} = {2} {3}, 1 {1} ({5}) = {4} {3} ({6})'.format(
|
||||
resp.search_params['amount'],
|
||||
|
@ -111,8 +111,9 @@ filter_mapping = {0: 'off', 1: 'medium', 2: 'high'}
|
||||
# specific xpath variables
|
||||
# ------------------------
|
||||
|
||||
# google results are grouped into <div class="g" ../>
|
||||
results_xpath = '//div[@class="g"]'
|
||||
# google results are grouped into <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
|
||||
g_section_with_header = './g-section-with-header'
|
||||
@ -124,8 +125,8 @@ title_xpath = './/h3[1]'
|
||||
# href=...>
|
||||
href_xpath = './/div[@class="yuRUbf"]//a/@href'
|
||||
|
||||
# in the result group there is <div class="IsZvec" ../> containing he *content*
|
||||
content_xpath = './/div[@class="IsZvec"]'
|
||||
# in the result group there is <div class="VwiC3b ..." ../> containing the *content*
|
||||
content_xpath = './/div[contains(@class, "VwiC3b")]'
|
||||
|
||||
# Suggestions are links placed in a *card-section*, we extract only the text
|
||||
# from the links not the links itself.
|
||||
@ -336,7 +337,12 @@ def response(resp):
|
||||
logger.error(e, exc_info=True)
|
||||
|
||||
# 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*
|
||||
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)
|
||||
if title_tag is None:
|
||||
# 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
|
||||
title = extract_text(title_tag)
|
||||
url = eval_xpath_getindex(result, href_xpath, 0, None)
|
||||
if url is None:
|
||||
continue
|
||||
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})
|
||||
|
||||
except Exception as e: # pylint: disable=broad-except
|
||||
logger.error(e, exc_info=True)
|
||||
# from lxml import etree
|
||||
# logger.debug(etree.tostring(result, pretty_print=True))
|
||||
# import pdb
|
||||
# pdb.set_trace()
|
||||
continue
|
||||
|
||||
# parse suggestion
|
||||
|
@ -3,12 +3,10 @@
|
||||
INA (Videos)
|
||||
"""
|
||||
|
||||
from json import loads
|
||||
from html import unescape
|
||||
from urllib.parse import urlencode
|
||||
from lxml import html
|
||||
from dateutil import parser
|
||||
from searx.utils import extract_text
|
||||
from searx.utils import extract_text, eval_xpath, eval_xpath_list, eval_xpath_getindex
|
||||
|
||||
# about
|
||||
about = {
|
||||
@ -24,25 +22,24 @@ about = {
|
||||
# engine dependent config
|
||||
categories = ['videos']
|
||||
paging = True
|
||||
page_size = 48
|
||||
page_size = 12
|
||||
|
||||
# search-url
|
||||
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
|
||||
results_xpath = '//div[contains(@class,"search-results--list")]//div[@class="media-body"]'
|
||||
results_xpath = '//div[@id="searchHits"]/div'
|
||||
url_xpath = './/a/@href'
|
||||
title_xpath = './/h3[@class="h3--title media-heading"]'
|
||||
thumbnail_xpath = './/img/@src'
|
||||
publishedDate_xpath = './/span[@class="broadcast"]'
|
||||
content_xpath = './/p[@class="media-body__summary"]'
|
||||
title_xpath = './/div[contains(@class,"title-bloc-small")]'
|
||||
content_xpath = './/div[contains(@class,"sous-titre-fonction")]'
|
||||
thumbnail_xpath = './/img/@data-src'
|
||||
publishedDate_xpath = './/div[contains(@class,"dateAgenda")]'
|
||||
|
||||
|
||||
# do search-request
|
||||
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
|
||||
|
||||
|
||||
@ -51,26 +48,17 @@ def response(resp):
|
||||
results = []
|
||||
|
||||
# we get html in a JSON container...
|
||||
response = loads(resp.text)
|
||||
dom = html.fromstring(response)
|
||||
dom = html.fromstring(resp.text)
|
||||
|
||||
# parse results
|
||||
for result in dom.xpath(results_xpath):
|
||||
videoid = result.xpath(url_xpath)[0]
|
||||
url = base_url + videoid
|
||||
title = unescape(extract_text(result.xpath(title_xpath)))
|
||||
try:
|
||||
thumbnail = extract_text(result.xpath(thumbnail_xpath)[0])
|
||||
except:
|
||||
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))
|
||||
for result in eval_xpath_list(dom, results_xpath):
|
||||
url_relative = eval_xpath_getindex(result, url_xpath, 0)
|
||||
url = base_url + url_relative
|
||||
title = unescape(extract_text(eval_xpath(result, title_xpath)))
|
||||
thumbnail = extract_text(eval_xpath(result, thumbnail_xpath))
|
||||
content = extract_text(eval_xpath(result, publishedDate_xpath)) + extract_text(
|
||||
eval_xpath(result, content_xpath)
|
||||
)
|
||||
|
||||
# append result
|
||||
results.append(
|
||||
@ -79,7 +67,6 @@ def response(resp):
|
||||
'title': title,
|
||||
'content': content,
|
||||
'template': 'videos.html',
|
||||
'publishedDate': publishedDate,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
@ -11,6 +11,7 @@ import mysql.connector # pylint: disable=import-error
|
||||
engine_type = 'offline'
|
||||
auth_plugin = 'caching_sha2_password'
|
||||
host = "127.0.0.1"
|
||||
port = 3306
|
||||
database = ""
|
||||
username = ""
|
||||
password = ""
|
||||
@ -35,6 +36,7 @@ def init(engine_settings):
|
||||
user=username,
|
||||
password=password,
|
||||
host=host,
|
||||
port=port,
|
||||
auth_plugin=auth_plugin,
|
||||
)
|
||||
|
||||
|
@ -1,16 +1,28 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
"""
|
||||
Startpage (Web)
|
||||
# lint: pylint
|
||||
"""Startpage (Web)
|
||||
|
||||
"""
|
||||
|
||||
from lxml import html
|
||||
from dateutil import parser
|
||||
from datetime import datetime, timedelta
|
||||
import re
|
||||
from time import time
|
||||
|
||||
from urllib.parse import urlencode
|
||||
from unicodedata import normalize, combining
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from dateutil import parser
|
||||
from lxml import html
|
||||
from babel import Locale
|
||||
from babel.localedata import locale_identifiers
|
||||
|
||||
from searx.network import get
|
||||
from searx.utils import extract_text, eval_xpath, match_language
|
||||
from searx.exceptions import (
|
||||
SearxEngineResponseException,
|
||||
SearxEngineCaptchaException,
|
||||
)
|
||||
|
||||
|
||||
# about
|
||||
about = {
|
||||
@ -33,7 +45,7 @@ supported_languages_url = 'https://www.startpage.com/do/settings'
|
||||
|
||||
# search-url
|
||||
base_url = 'https://startpage.com/'
|
||||
search_url = base_url + 'do/search'
|
||||
search_url = base_url + 'sp/search?'
|
||||
|
||||
# specific xpath variables
|
||||
# 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"]'
|
||||
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
|
||||
def request(query, params):
|
||||
|
||||
params['url'] = search_url
|
||||
params['method'] = 'POST'
|
||||
params['data'] = {
|
||||
# pylint: disable=line-too-long
|
||||
# The format string from Startpage's FFox add-on [1]::
|
||||
#
|
||||
# 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,
|
||||
'page': params['pageno'],
|
||||
'cat': 'web',
|
||||
'cmd': 'process_search',
|
||||
'engine0': 'v1all',
|
||||
# 'pl': 'ext-ff',
|
||||
# 'extVersion': '1.3.0',
|
||||
# 'abp': "-1",
|
||||
'sc': get_sc_code(params['headers']),
|
||||
}
|
||||
|
||||
# set language if specified
|
||||
@ -61,9 +129,10 @@ def request(query, params):
|
||||
lang_code = match_language(params['language'], supported_languages, fallback=None)
|
||||
if lang_code:
|
||||
language_name = supported_languages[lang_code]['alias']
|
||||
params['data']['language'] = language_name
|
||||
params['data']['lui'] = language_name
|
||||
args['language'] = language_name
|
||||
args['lui'] = language_name
|
||||
|
||||
params['url'] = search_url + urlencode(args)
|
||||
return params
|
||||
|
||||
|
||||
@ -134,10 +203,11 @@ def response(resp):
|
||||
|
||||
# get supported languages from their site
|
||||
def _fetch_supported_languages(resp):
|
||||
# startpage's language selector is a mess
|
||||
# each option has a displayed name and a value, either of which may represent the language name
|
||||
# in the native script, the language name in English, an English transliteration of the native name,
|
||||
# the English name of the writing script used by the language, or occasionally something else entirely.
|
||||
# startpage's language selector is a mess each option has a displayed name
|
||||
# and a value, either of which may represent the language name in the native
|
||||
# script, the language name in English, an English transliteration of the
|
||||
# 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
|
||||
language_names = {
|
||||
@ -151,7 +221,15 @@ def _fetch_supported_languages(resp):
|
||||
}
|
||||
|
||||
# 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
|
||||
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):
|
||||
supported_languages[lang_code] = {'alias': sp_option_value}
|
||||
elif isinstance(lang_code, list):
|
||||
for lc in lang_code:
|
||||
supported_languages[lc] = {'alias': sp_option_value}
|
||||
for _lc in lang_code:
|
||||
supported_languages[_lc] = {'alias': sp_option_value}
|
||||
else:
|
||||
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
|
||||
"""
|
||||
1x (Images)
|
||||
# lint: pylint
|
||||
"""1x (Images)
|
||||
|
||||
"""
|
||||
|
||||
from lxml import html, etree
|
||||
from urllib.parse import urlencode, urljoin
|
||||
from lxml import html, etree
|
||||
|
||||
from searx.utils import extract_text, eval_xpath_list, eval_xpath_getindex
|
||||
|
||||
# about
|
||||
@ -38,13 +40,14 @@ def request(query, params):
|
||||
def response(resp):
|
||||
results = []
|
||||
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')
|
||||
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'))
|
||||
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
|
||||
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):
|
||||
pass
|
||||
|
||||
@ -35,7 +38,7 @@ class SearxParameterException(SearxException):
|
||||
class SearxSettingsException(SearxException):
|
||||
"""Error while loading the settings"""
|
||||
|
||||
def __init__(self, message, filename):
|
||||
def __init__(self, message: Union[str, Exception], filename: Optional[str]):
|
||||
super().__init__(message)
|
||||
self.message = message
|
||||
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 threading
|
||||
import concurrent.futures
|
||||
from queue import SimpleQueue
|
||||
from types import MethodType
|
||||
from timeit import default_timer
|
||||
from typing import Iterable, Tuple
|
||||
|
||||
import httpx
|
||||
import anyio
|
||||
import h2.exceptions
|
||||
|
||||
from .network import get_network, initialize, check_network_configuration
|
||||
from .client import get_loop
|
||||
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()
|
||||
"""Thread-local data is data for thread specific values."""
|
||||
@ -210,7 +188,7 @@ def _close_response_method(self):
|
||||
continue
|
||||
|
||||
|
||||
def stream(method, url, **kwargs):
|
||||
def stream(method, url, **kwargs) -> Tuple[httpx.Response, Iterable[bytes]]:
|
||||
"""Replace httpx.stream.
|
||||
|
||||
Usage:
|
||||
|
@ -4,7 +4,9 @@
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
from ssl import SSLContext
|
||||
import threading
|
||||
from typing import Any, Dict
|
||||
|
||||
import httpx
|
||||
from httpx_socks import AsyncProxyTransport
|
||||
@ -23,7 +25,7 @@ else:
|
||||
|
||||
logger = logger.getChild('searx.network.client')
|
||||
LOOP = None
|
||||
SSLCONTEXTS = {}
|
||||
SSLCONTEXTS: Dict[Any, SSLContext] = {}
|
||||
TRANSPORT_KWARGS = {
|
||||
'trust_env': False,
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import atexit
|
||||
import asyncio
|
||||
import ipaddress
|
||||
from itertools import cycle
|
||||
from typing import Dict
|
||||
|
||||
import httpx
|
||||
|
||||
@ -16,7 +17,7 @@ from .client import new_client, get_loop, AsyncHTTPTransportNoHttp
|
||||
|
||||
logger = logger.getChild('network')
|
||||
DEFAULT_NAME = '__DEFAULT__'
|
||||
NETWORKS = {}
|
||||
NETWORKS: Dict[str, 'Network'] = {}
|
||||
# requests compatibility when reading proxy settings from settings.yml
|
||||
PROXY_PATTERN_MAPPING = {
|
||||
'http': 'http://',
|
||||
@ -166,13 +167,14 @@ class Network:
|
||||
for transport in client._mounts.values(): # pylint: disable=protected-access
|
||||
if isinstance(transport, AsyncHTTPTransportNoHttp):
|
||||
continue
|
||||
if not getattr(transport, '_rdns', False):
|
||||
result = False
|
||||
break
|
||||
else:
|
||||
response = await client.get('https://check.torproject.org/api/ip')
|
||||
if not response.json()['IsTor']:
|
||||
result = False
|
||||
if getattr(transport, "_pool") and getattr(
|
||||
transport._pool, "_rdns", False # pylint: disable=protected-access
|
||||
):
|
||||
continue
|
||||
return False
|
||||
response = await client.get("https://check.torproject.org/api/ip", timeout=10)
|
||||
if not response.json()["IsTor"]:
|
||||
result = False
|
||||
Network._TOR_CHECK_RESULT[proxies] = result
|
||||
return result
|
||||
|
||||
|
@ -10,7 +10,7 @@ from os.path import abspath, basename, dirname, exists, join
|
||||
from shutil import copyfile
|
||||
from pkgutil import iter_modules
|
||||
from logging import getLogger
|
||||
from typing import List
|
||||
from typing import List, Tuple
|
||||
|
||||
from searx import logger, settings
|
||||
|
||||
@ -22,6 +22,9 @@ class Plugin: # pylint: disable=too-few-public-methods
|
||||
name: str
|
||||
description: str
|
||||
default_on: bool
|
||||
js_dependencies: Tuple[str]
|
||||
css_dependencies: Tuple[str]
|
||||
preference_section: str
|
||||
|
||||
|
||||
logger = logger.getChild("plugins")
|
||||
|
@ -2,7 +2,9 @@ import re
|
||||
from collections import defaultdict
|
||||
from operator import itemgetter
|
||||
from threading import RLock
|
||||
from typing import List, NamedTuple, Set
|
||||
from urllib.parse import urlparse, unquote
|
||||
|
||||
from searx import logger
|
||||
from searx.engines import engines
|
||||
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'])
|
||||
|
||||
|
||||
class Timing(NamedTuple):
|
||||
engine: str
|
||||
total: float
|
||||
load: float
|
||||
|
||||
|
||||
class UnresponsiveEngine(NamedTuple):
|
||||
engine: str
|
||||
error_type: str
|
||||
suspended: bool
|
||||
|
||||
|
||||
class ResultContainer:
|
||||
"""docstring for ResultContainer"""
|
||||
|
||||
@ -168,8 +182,8 @@ class ResultContainer:
|
||||
self.engine_data = defaultdict(dict)
|
||||
self._closed = False
|
||||
self.paging = False
|
||||
self.unresponsive_engines = set()
|
||||
self.timings = []
|
||||
self.unresponsive_engines: Set[UnresponsiveEngine] = set()
|
||||
self.timings: List[Timing] = []
|
||||
self.redirect_url = None
|
||||
self.on_result = lambda _: True
|
||||
self._lock = RLock()
|
||||
@ -401,17 +415,12 @@ class ResultContainer:
|
||||
return 0
|
||||
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:
|
||||
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):
|
||||
timing = {
|
||||
'engine': engines[engine_name].shortcut,
|
||||
'total': engine_time,
|
||||
'load': page_load_time,
|
||||
}
|
||||
self.timings.append(timing)
|
||||
def add_timing(self, engine_name: str, engine_time: float, page_load_time: float):
|
||||
self.timings.append(Timing(engine_name, total=engine_time, load=page_load_time))
|
||||
|
||||
def get_timings(self):
|
||||
return self.timings
|
||||
|
@ -1,6 +1,7 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
# pylint: disable=missing-module-docstring
|
||||
# pyright: strict
|
||||
|
||||
import json
|
||||
import random
|
||||
@ -8,6 +9,8 @@ import time
|
||||
import threading
|
||||
import os
|
||||
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.exceptions import SearxSettingsException
|
||||
@ -20,17 +23,58 @@ CHECKER_RESULT = 'CHECKER_RESULT'
|
||||
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):
|
||||
every = (every, every)
|
||||
return (every, every)
|
||||
|
||||
if (
|
||||
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[1], int)
|
||||
):
|
||||
raise SearxSettingsException(error_msg, None)
|
||||
return every
|
||||
return (every[0], every[1])
|
||||
|
||||
|
||||
def _get_every():
|
||||
@ -38,25 +82,27 @@ def _get_every():
|
||||
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)
|
||||
if serialized_result is not None:
|
||||
return json.loads(serialized_result)
|
||||
return {'status': 'unknown'}
|
||||
|
||||
|
||||
def _set_result(result, include_timestamp=True):
|
||||
if include_timestamp:
|
||||
result['timestamp'] = int(time.time() / 3600) * 3600
|
||||
def _set_result(result: CheckerResult):
|
||||
storage.set_str(CHECKER_RESULT, json.dumps(result))
|
||||
|
||||
|
||||
def _timestamp():
|
||||
return int(time.time() / 3600) * 3600
|
||||
|
||||
|
||||
def run():
|
||||
if not running.acquire(blocking=False): # pylint: disable=consider-using-with
|
||||
return
|
||||
try:
|
||||
logger.info('Starting checker')
|
||||
result = {'status': 'ok', 'engines': {}}
|
||||
result: CheckerOk = {'status': 'ok', 'engines': {}, 'timestamp': _timestamp()}
|
||||
for name, processor in PROCESSORS.items():
|
||||
logger.debug('Checking %s engine', name)
|
||||
checker = Checker(processor)
|
||||
@ -69,7 +115,7 @@ def run():
|
||||
_set_result(result)
|
||||
logger.info('Check done')
|
||||
except Exception: # pylint: disable=broad-except
|
||||
_set_result({'status': 'error'})
|
||||
_set_result({'status': 'error', 'timestamp': _timestamp()})
|
||||
logger.exception('Error while running the checker')
|
||||
finally:
|
||||
running.release()
|
||||
@ -89,7 +135,7 @@ def _start_scheduling():
|
||||
run()
|
||||
|
||||
|
||||
def _signal_handler(_signum, _frame):
|
||||
def _signal_handler(_signum: int, _frame: Any):
|
||||
t = threading.Thread(target=run)
|
||||
t.daemon = True
|
||||
t.start()
|
||||
@ -102,7 +148,7 @@ def initialize():
|
||||
signal.signal(signal.SIGUSR1, _signal_handler)
|
||||
|
||||
# disabled by default
|
||||
_set_result({'status': 'disabled'}, include_timestamp=False)
|
||||
_set_result({'status': 'disabled'})
|
||||
|
||||
# special case when debug is activate
|
||||
if searx_debug and settings.get('checker', {}).get('off_when_debug', True):
|
||||
@ -116,7 +162,7 @@ def initialize():
|
||||
return
|
||||
|
||||
#
|
||||
_set_result({'status': 'unknown'}, include_timestamp=False)
|
||||
_set_result({'status': 'unknown'})
|
||||
|
||||
start_after = scheduling.get('start_after', (300, 1800))
|
||||
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:
|
||||
# use "image_proxy" (avoid HTTP/2)
|
||||
network.set_context_network_name('image_proxy')
|
||||
stream = network.stream(
|
||||
r, stream = network.stream(
|
||||
'GET',
|
||||
image_url,
|
||||
timeout=10.0,
|
||||
@ -91,7 +91,6 @@ def _download_and_check_if_image(image_url: str) -> bool:
|
||||
'Cache-Control': 'max-age=0',
|
||||
},
|
||||
)
|
||||
r = next(stream)
|
||||
r.close()
|
||||
if r.status_code == 200:
|
||||
is_image = r.headers.get('content-type', '').startswith('image/')
|
||||
|
@ -11,10 +11,12 @@ __all__ = [
|
||||
'OnlineProcessor',
|
||||
'OnlineDictionaryProcessor',
|
||||
'OnlineCurrencyProcessor',
|
||||
'OnlineUrlSearchProcessor',
|
||||
'PROCESSORS',
|
||||
]
|
||||
|
||||
import threading
|
||||
from typing import Dict
|
||||
|
||||
from searx import logger
|
||||
from searx import engines
|
||||
@ -23,16 +25,23 @@ from .online import OnlineProcessor
|
||||
from .offline import OfflineProcessor
|
||||
from .online_dictionary import OnlineDictionaryProcessor
|
||||
from .online_currency import OnlineCurrencyProcessor
|
||||
from .online_url_search import OnlineUrlSearchProcessor
|
||||
from .abstract import EngineProcessor
|
||||
|
||||
logger = logger.getChild('search.processors')
|
||||
PROCESSORS = {}
|
||||
PROCESSORS: Dict[str, EngineProcessor] = {}
|
||||
"""Cache request processores, stored by *engine-name* (:py:func:`initialize`)"""
|
||||
|
||||
|
||||
def get_processor_class(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:
|
||||
return c
|
||||
return None
|
||||
|
@ -8,6 +8,7 @@
|
||||
import threading
|
||||
from abc import abstractmethod, ABC
|
||||
from timeit import default_timer
|
||||
from typing import Dict, Union
|
||||
|
||||
from searx import settings, logger
|
||||
from searx.engines import engines
|
||||
@ -17,7 +18,7 @@ from searx.exceptions import SearxEngineAccessDeniedException, SearxEngineRespon
|
||||
from searx.utils import get_engine_from_settings
|
||||
|
||||
logger = logger.getChild('searx.search.processor')
|
||||
SUSPENDED_STATUS = {}
|
||||
SUSPENDED_STATUS: Dict[Union[int, str], 'SuspendedStatus'] = {}
|
||||
|
||||
|
||||
class SuspendedStatus:
|
||||
@ -61,7 +62,7 @@ class EngineProcessor(ABC):
|
||||
|
||||
__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_name = engine_name
|
||||
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
|
||||
disabled: true
|
||||
|
||||
- name: tineye
|
||||
engine: tineye
|
||||
shortcut: tin
|
||||
timeout: 9.0
|
||||
|
||||
- name: etymonline
|
||||
engine: xpath
|
||||
paging: true
|
||||
@ -777,11 +782,16 @@ engines:
|
||||
|
||||
- name: 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:
|
||||
- https://invidious.tube/
|
||||
- https://invidious.snopyta.org/
|
||||
- https://vid.puffyan.us/
|
||||
- https://invidious.kavin.rocks/
|
||||
- https://invidio.xamh.de/
|
||||
- https://inv.riverside.rocks/
|
||||
shortcut: iv
|
||||
timeout: 5.0
|
||||
timeout: 3.0
|
||||
disabled: true
|
||||
|
||||
- name: kickass
|
||||
@ -1455,7 +1465,7 @@ engines:
|
||||
# Or you can use the html non-stable engine, activated by default
|
||||
engine: wolframalpha_noapi
|
||||
timeout: 6.0
|
||||
categories: science
|
||||
categories: []
|
||||
|
||||
- name: dictzone
|
||||
engine: dictzone
|
||||
|
@ -20,6 +20,7 @@ A redis DB connect can be tested by::
|
||||
"""
|
||||
|
||||
import logging
|
||||
import redis
|
||||
from searx import get_setting
|
||||
|
||||
logger = logging.getLogger('searx.shared.redis')
|
||||
@ -28,8 +29,6 @@ _client = None
|
||||
|
||||
def client():
|
||||
global _client # pylint: disable=global-statement
|
||||
import redis # pylint: disable=import-error, import-outside-toplevel
|
||||
|
||||
if _client is None:
|
||||
# not thread safe: in the worst case scenario, two or more clients are
|
||||
# initialized only one is kept, the others are garbage collected.
|
||||
@ -38,8 +37,6 @@ def client():
|
||||
|
||||
|
||||
def init():
|
||||
import redis # pylint: disable=import-error, import-outside-toplevel
|
||||
|
||||
try:
|
||||
c = client()
|
||||
logger.info("connected redis DB --> %s", c.acl_whoami())
|
||||
|
@ -1,20 +1,22 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# pyright: strict
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Optional
|
||||
|
||||
|
||||
class SharedDict(ABC):
|
||||
@abstractmethod
|
||||
def get_int(self, key):
|
||||
def get_int(self, key: str) -> Optional[int]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def set_int(self, key, value):
|
||||
def set_int(self, key: str, value: int):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def get_str(self, key):
|
||||
def get_str(self, key: str) -> Optional[str]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def set_str(self, key, value):
|
||||
def set_str(self, key: str, value: str):
|
||||
pass
|
||||
|
@ -1,6 +1,7 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import threading
|
||||
from typing import Optional
|
||||
|
||||
from . import shared_abstract
|
||||
|
||||
@ -12,16 +13,16 @@ class SimpleSharedDict(shared_abstract.SharedDict):
|
||||
def __init__(self):
|
||||
self.d = {}
|
||||
|
||||
def get_int(self, key):
|
||||
def get_int(self, key: str) -> Optional[int]:
|
||||
return self.d.get(key, None)
|
||||
|
||||
def set_int(self, key, value):
|
||||
def set_int(self, key: str, value: int):
|
||||
self.d[key] = value
|
||||
|
||||
def get_str(self, key):
|
||||
def get_str(self, key: str) -> Optional[str]:
|
||||
return self.d.get(key, None)
|
||||
|
||||
def set_str(self, key, value):
|
||||
def set_str(self, key: str, value: str):
|
||||
self.d[key] = value
|
||||
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import time
|
||||
from typing import Optional
|
||||
import uwsgi # pylint: disable=E0401
|
||||
from . import shared_abstract
|
||||
|
||||
@ -9,25 +10,25 @@ _last_signal = 10
|
||||
|
||||
|
||||
class UwsgiCacheSharedDict(shared_abstract.SharedDict):
|
||||
def get_int(self, key):
|
||||
def get_int(self, key: str) -> Optional[int]:
|
||||
value = uwsgi.cache_get(key)
|
||||
if value is None:
|
||||
return value
|
||||
else:
|
||||
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')
|
||||
uwsgi.cache_update(key, b)
|
||||
|
||||
def get_str(self, key):
|
||||
def get_str(self, key: str) -> Optional[str]:
|
||||
value = uwsgi.cache_get(key)
|
||||
if value is None:
|
||||
return value
|
||||
else:
|
||||
return value.decode('utf-8')
|
||||
|
||||
def set_str(self, key, value):
|
||||
def set_str(self, key: str, value: str):
|
||||
b = value.encode('utf-8')
|
||||
uwsgi.cache_update(key, b)
|
||||
|
||||
|
8
searx/static/themes/oscar/js/searxng.min.js
vendored
8
searx/static/themes/oscar/js/searxng.min.js
vendored
@ -4,7 +4,7 @@
|
||||
* (C) Copyright Contributors to the searx project (2014 - 2021).
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
window.searxng=function(t){"use strict";t.getElementsByTagName("html")[0].className="js";var e=t.currentScript||(e=t.getElementsByTagName("script"))[e.length-1];return{autocompleter:"true"===e.getAttribute("data-autocompleter"),method:e.getAttribute("data-method"),translations:JSON.parse(e.getAttribute("data-translations"))}}(document),
|
||||
window.searxng=function(t){"use strict";t.getElementsByTagName("html")[0].className="js";t=t.currentScript||(t=t.getElementsByTagName("script"))[t.length-1];return{autocompleter:"true"===t.getAttribute("data-autocompleter"),method:t.getAttribute("data-method"),translations:JSON.parse(t.getAttribute("data-translations"))}}(document),
|
||||
/**
|
||||
* @license
|
||||
* (C) Copyright Contributors to the SearXNG project.
|
||||
@ -20,7 +20,7 @@ $(document).ready(function(){var t,a="";searxng.autocompleter&&((t=new Bloodhoun
|
||||
* (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
$(document).ready(function(){$("#q.autofocus").focus(),$("#clear_search").click(function(){document.getElementById("q").value=""}),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var t=$(this).data("btn-text-collapsed"),e=$(this).data("btn-text-not-collapsed");""!==t&&""!==e&&(new_html=$(this).hasClass("collapsed")?$(this).html().replace(t,e):$(this).html().replace(e,t),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var t="btn-"+$(this).data("btn-class"),e=$(this).data("btn-label-default"),a=$(this).data("btn-label-toggled");""!==a&&(new_html=$(this).hasClass("btn-default")?$(this).html().replace(e,a):$(this).html().replace(a,e),$(this).html(new_html)),$(this).toggleClass(t),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var t=$(this).data("target"),e=$(t+" > iframe"),t=e.attr("src");void 0!==t&&!1!==t||e.attr("src",e.data("src"))}),$(".btn-sm").dblclick(function(){var t="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(t),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(t),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))}),$(".nav-tabs").click(function(t){$(t.target).parents("ul").children().attr("aria-selected","false"),$(t.target).parent().attr("aria-selected","true")}),searxng.image_thumbnail_layout=new searxng.ImageLayout("#main_results","#main_results .result-images","img.img-thumbnail",15,3,200),searxng.image_thumbnail_layout.watch()}),
|
||||
$(document).ready(function(){$("#q.autofocus").focus(),$("#clear_search").click(function(){document.getElementById("q").value=""}),$(".select-all-on-click").click(function(){$(this).select()}),$(".btn-collapse").click(function(){var t=$(this).data("btn-text-collapsed"),e=$(this).data("btn-text-not-collapsed");""!==t&&""!==e&&(new_html=$(this).hasClass("collapsed")?$(this).html().replace(t,e):$(this).html().replace(e,t),$(this).html(new_html))}),$(".btn-toggle .btn").click(function(){var t="btn-"+$(this).data("btn-class"),e=$(this).data("btn-label-default"),a=$(this).data("btn-label-toggled");""!==a&&(new_html=$(this).hasClass("btn-default")?$(this).html().replace(e,a):$(this).html().replace(a,e),$(this).html(new_html)),$(this).toggleClass(t),$(this).toggleClass("btn-default")}),$(".media-loader").click(function(){var t=$(this).data("target"),t=$(t+" > iframe"),e=t.attr("src");void 0!==e&&!1!==e||t.attr("src",t.data("src"))}),$(".btn-sm").dblclick(function(){var t="btn-"+$(this).data("btn-class");$(this).hasClass("btn-default")?($(".btn-sm > input").attr("checked","checked"),$(".btn-sm > input").prop("checked",!0),$(".btn-sm").addClass(t),$(".btn-sm").addClass("active"),$(".btn-sm").removeClass("btn-default")):($(".btn-sm > input").attr("checked",""),$(".btn-sm > input").removeAttr("checked"),$(".btn-sm > input").checked=!1,$(".btn-sm").removeClass(t),$(".btn-sm").removeClass("active"),$(".btn-sm").addClass("btn-default"))}),$(".nav-tabs").click(function(t){$(t.target).parents("ul").children().attr("aria-selected","false"),$(t.target).parent().attr("aria-selected","true")}),searxng.image_thumbnail_layout=new searxng.ImageLayout("#main_results","#main_results .result-images","img.img-thumbnail",15,3,200),searxng.image_thumbnail_layout.watch()}),
|
||||
/**
|
||||
* @license
|
||||
* (C) Copyright Contributors to the SearXNG project.
|
||||
@ -35,7 +35,7 @@ window.addEventListener("load",function(){$(".infobox").each(function(){var t=$(
|
||||
* (C) 2014 by Thomas Pointhuber, <thomas.pointhuber@gmx.at>
|
||||
* SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
*/
|
||||
$(document).ready(function(){$(".searxng_init_map").on("click",function(t){var e=$(this).data("leaflet-target"),a=$(this).data("map-lon"),n=$(this).data("map-lat"),i=$(this).data("map-zoom"),s=$(this).data("map-boundingbox"),o=$(this).data("map-geojson");s&&(southWest=L.latLng(s[0],s[2]),northEast=L.latLng(s[1],s[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/css/images/";var r=L.map(e),e=new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});new L.TileLayer("https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'});setTimeout(function(){map_bounds?r.fitBounds(map_bounds,{maxZoom:17}):a&&n&&(i?r.setView(new L.LatLng(n,a),i):r.setView(new L.LatLng(n,a),8))},0),r.addLayer(e),L.control.layers({"OSM Mapnik":e}).addTo(r),o&&L.geoJson(o).addTo(r),$(this).off(t)})}),
|
||||
$(document).ready(function(){$(".searxng_init_map").on("click",function(t){var e=$(this).data("leaflet-target"),a=$(this).data("map-lon"),n=$(this).data("map-lat"),i=$(this).data("map-zoom"),s=$(this).data("map-boundingbox"),o=$(this).data("map-geojson"),r=(s&&(southWest=L.latLng(s[0],s[2]),northEast=L.latLng(s[1],s[3]),map_bounds=L.latLngBounds(southWest,northEast)),L.Icon.Default.imagePath="./static/themes/oscar/css/images/",L.map(e)),s=new L.TileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'}),e=(new L.TileLayer("https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png",{minZoom:1,maxZoom:19,attribution:'Wikimedia maps beta | Maps data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors'}),setTimeout(function(){map_bounds?r.fitBounds(map_bounds,{maxZoom:17}):a&&n&&(i?r.setView(new L.LatLng(n,a),i):r.setView(new L.LatLng(n,a),8))},0),r.addLayer(s),{"OSM Mapnik":s});L.control.layers(e).addTo(r),o&&L.geoJson(o).addTo(r),$(this).off(t)})}),
|
||||
/**
|
||||
* @license
|
||||
* (C) Copyright Contributors to the SearXNG project.
|
||||
@ -71,5 +71,5 @@ $(document).ready(function(){$("#allow-all-engines").click(function(){$(".onoffs
|
||||
* );
|
||||
* searxng.image_thumbnail_layout.watch();
|
||||
*/
|
||||
function(r,c){function t(t,e,a,n,i,s){this.container_selector=t,this.results_selector=e,this.img_selector=a,this.verticalMargin=n,this.horizontalMargin=i,this.maxHeight=s,this.isAlignDone=!0}t.prototype._getHeigth=function(t,e){for(var a,n=0,i=0;i<t.length;i++)0<(a=t[i]).naturalWidth&&0<a.naturalHeight?n+=a.naturalWidth/a.naturalHeight:n+=1;return(e-t.length*this.verticalMargin)/n},t.prototype._setSize=function(t,e){for(var a,n,i=t.length,s=0;s<i;s++)a=0<(n=t[s]).naturalWidth&&0<n.naturalHeight?e*n.naturalWidth/n.naturalHeight:e,n.style.width=a+"px",n.style.height=e+"px",n.style.marginLeft=this.horizontalMargin+"px",n.style.marginTop=this.horizontalMargin+"px",n.style.marginRight=this.verticalMargin-7+"px",n.style.marginBottom=this.verticalMargin-7+"px",(n=n.parentNode.parentNode).classList.contains("js")||n.classList.add("js")},t.prototype._alignImgs=function(t){for(var e,a,n,i,s=c.querySelector(this.container_selector),o=window.getComputedStyle(s),r=parseInt(o.getPropertyValue("padding-left"),10),o=parseInt(o.getPropertyValue("padding-right"),10),l=s.clientWidth-r-o;0<t.length;){for(e=!0,n=1;n<=t.length&&e;n++)a=t.slice(0,n),(i=this._getHeigth(a,l))<this.maxHeight&&(this._setSize(a,i),t=t.slice(n),e=!1);if(e){this._setSize(a,Math.min(this.maxHeight,i));break}}},t.prototype.align=function(){for(var t=c.querySelectorAll(this.results_selector),e=t.length,a=null,n=null,i=[],s=0;s<e;s++)(n=t[s]).previousElementSibling!==a&&0<i.length&&(this._alignImgs(i),i=[]),i.push(n.querySelector(this.img_selector)),a=n;0<i.length&&this._alignImgs(i)},t.prototype.watch=function(){var t,e,a=this,n=c.querySelectorAll(this.results_selector),i=n.length;function s(t){t.originalTarget.src=r.searxng.static_path+r.searxng.theme.img_load_error}function o(){a.isAlignDone&&(a.isAlignDone=!1,setTimeout(function(){a.align(),a.isAlignDone=!0},100))}for(r.addEventListener("pageshow",o),r.addEventListener("load",o),r.addEventListener("resize",o),t=0;t<i;t++)null!=(e=n[t].querySelector(this.img_selector))&&(e.addEventListener("load",o),e.addEventListener("error",o),r.searxng.theme.img_load_error&&e.addEventListener("error",s,{once:!0}))},r.searxng.ImageLayout=t}(window,document);
|
||||
function(r,c){function t(t,e,a,n,i,s){this.container_selector=t,this.results_selector=e,this.img_selector=a,this.verticalMargin=n,this.horizontalMargin=i,this.maxHeight=s,this.isAlignDone=!0}t.prototype._getHeigth=function(t,e){for(var a,n=0,i=0;i<t.length;i++)0<(a=t[i]).naturalWidth&&0<a.naturalHeight?n+=a.naturalWidth/a.naturalHeight:n+=1;return(e-t.length*this.verticalMargin)/n},t.prototype._setSize=function(t,e){for(var a,n,i=t.length,s=0;s<i;s++)n=0<(a=t[s]).naturalWidth&&0<a.naturalHeight?e*a.naturalWidth/a.naturalHeight:e,a.style.width=n+"px",a.style.height=e+"px",a.style.marginLeft=this.horizontalMargin+"px",a.style.marginTop=this.horizontalMargin+"px",a.style.marginRight=this.verticalMargin-7+"px",a.style.marginBottom=this.verticalMargin-7+"px",(n=a.parentNode.parentNode).classList.contains("js")||n.classList.add("js")},t.prototype._alignImgs=function(t){for(var e,a,n,i,s=c.querySelector(this.container_selector),o=window.getComputedStyle(s),r=parseInt(o.getPropertyValue("padding-left"),10),o=parseInt(o.getPropertyValue("padding-right"),10),l=s.clientWidth-r-o;0<t.length;){for(e=!0,n=1;n<=t.length&&e;n++)a=t.slice(0,n),(i=this._getHeigth(a,l))<this.maxHeight&&(this._setSize(a,i),t=t.slice(n),e=!1);if(e){this._setSize(a,Math.min(this.maxHeight,i));break}}},t.prototype.align=function(){for(var t=c.querySelectorAll(this.results_selector),e=t.length,a=null,n=null,i=[],s=0;s<e;s++)(n=t[s]).previousElementSibling!==a&&0<i.length&&(this._alignImgs(i),i=[]),i.push(n.querySelector(this.img_selector)),a=n;0<i.length&&this._alignImgs(i)},t.prototype.watch=function(){var t,e,a=this,n=c.querySelectorAll(this.results_selector),i=n.length;function s(t){t.originalTarget.src=r.searxng.static_path+r.searxng.theme.img_load_error}function o(){a.isAlignDone&&(a.isAlignDone=!1,setTimeout(function(){a.align(),a.isAlignDone=!0},100))}for(r.addEventListener("pageshow",o),r.addEventListener("load",o),r.addEventListener("resize",o),t=0;t<i;t++)null!=(e=n[t].querySelector(this.img_selector))&&(e.addEventListener("load",o),e.addEventListener("error",o),r.searxng.theme.img_load_error&&e.addEventListener("error",s,{once:!0}))},r.searxng.ImageLayout=t}(window,document);
|
||||
//# sourceMappingURL=searxng.min.js.map
|
File diff suppressed because one or more lines are too long
@ -1,3 +1,7 @@
|
||||
{
|
||||
"extends": "stylelint-config-standard"
|
||||
"extends": "stylelint-config-standard",
|
||||
"rules": {
|
||||
"declaration-empty-line-before": null,
|
||||
"no-invalid-position-at-import-rule": null
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -127,7 +127,7 @@ module.exports = function (grunt) {
|
||||
},
|
||||
files: [
|
||||
{
|
||||
src: ['src/less/style.less'],
|
||||
src: ['src/less/style-ltr.less'],
|
||||
dest: 'css/searxng.min.css',
|
||||
nonull: true,
|
||||
filter: file_exists,
|
||||
@ -177,7 +177,7 @@ module.exports = function (grunt) {
|
||||
'chevron-up-outline': 'node_modules/ionicons/dist/svg/chevron-up-outline.svg',
|
||||
'chevron-right': 'node_modules/ionicons/dist/svg/chevron-forward-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',
|
||||
'magnet-outline': 'node_modules/ionicons/dist/svg/magnet-outline.svg',
|
||||
'globe-outline': 'node_modules/ionicons/dist/svg/globe-outline.svg',
|
||||
|
2
searx/static/themes/simple/js/searxng.min.js
vendored
2
searx/static/themes/simple/js/searxng.min.js
vendored
File diff suppressed because one or more lines are too long
@ -4,7 +4,8 @@
|
||||
position: absolute;
|
||||
max-height: 0;
|
||||
overflow-y: hidden;
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
|
||||
.rounded-corners;
|
||||
|
||||
&:active,
|
||||
@ -24,7 +25,7 @@
|
||||
|
||||
> li {
|
||||
cursor: pointer;
|
||||
padding: 8px 0 8px 8px;
|
||||
padding: 0.5rem;
|
||||
|
||||
&.active,
|
||||
&:active,
|
||||
|
@ -3,8 +3,8 @@
|
||||
}
|
||||
|
||||
#main_results #results.only_template_images.image-detail-open #backToTop {
|
||||
left: 56.75rem !important;
|
||||
right: inherit;
|
||||
.ltr-left(56.75rem) !important;
|
||||
.ltr-right(inherit);
|
||||
}
|
||||
|
||||
article.result-images .detail {
|
||||
@ -15,8 +15,8 @@ article.result-images .detail {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
position: fixed;
|
||||
left: 60rem;
|
||||
right: 0;
|
||||
.ltr-left(60rem);
|
||||
.ltr-right(0);
|
||||
top: @search-height;
|
||||
transition: top 0.064s ease-in 0s;
|
||||
bottom: 0;
|
||||
@ -76,7 +76,7 @@ article.result-images .detail {
|
||||
h4,
|
||||
p,
|
||||
a {
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
}
|
||||
|
||||
p.result-content {
|
||||
@ -113,20 +113,23 @@ article.result-images .detail {
|
||||
|
||||
a.result-detail-close {
|
||||
top: 1rem;
|
||||
left: 1rem;
|
||||
.ltr-left(1rem);
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
a.result-detail-previous {
|
||||
top: 1rem;
|
||||
right: 6rem;
|
||||
.ltr-right(6rem);
|
||||
// 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 {
|
||||
top: 1rem;
|
||||
right: 2rem;
|
||||
.ltr-right(2rem);
|
||||
padding: 0.4rem;
|
||||
}
|
||||
|
||||
@ -186,7 +189,7 @@ article.result-images .detail {
|
||||
.loader {
|
||||
position: absolute;
|
||||
top: 1rem;
|
||||
right: 50%;
|
||||
.ltr-right(50%);
|
||||
border-top: 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);
|
||||
@ -205,7 +208,7 @@ article.result-images .detail {
|
||||
@media screen and (max-width: @tablet) {
|
||||
#results.image-detail-open article.result-images[data-vim-selected] .detail {
|
||||
top: 0;
|
||||
left: 0;
|
||||
.ltr-left(0);
|
||||
|
||||
a.result-images-source {
|
||||
display: flex;
|
||||
@ -219,7 +222,7 @@ article.result-images .detail {
|
||||
}
|
||||
|
||||
a.result-detail-next {
|
||||
right: 1rem;
|
||||
.ltr-right(1rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -227,7 +230,7 @@ article.result-images .detail {
|
||||
@media screen and (max-width: @phone) {
|
||||
#results.image-detail-open article.result-images[data-vim-selected] .detail {
|
||||
top: 0;
|
||||
left: 0;
|
||||
.ltr-left(0);
|
||||
padding: 1rem;
|
||||
|
||||
a.result-images-source img {
|
||||
@ -238,7 +241,7 @@ article.result-images .detail {
|
||||
|
||||
.result-images-labels p span {
|
||||
width: inherit;
|
||||
margin-right: 1rem;
|
||||
.ltr-margin-right(1rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,5 @@
|
||||
#main_index {
|
||||
margin-top: 26vh;
|
||||
|
||||
#linkto_preferences {
|
||||
right: 1.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
.index {
|
||||
|
@ -1,6 +1,6 @@
|
||||
#tab-contentquery table td,
|
||||
#tab-contentquery table th {
|
||||
text-align: left !important;
|
||||
.ltr-text-align-right() !important;
|
||||
height: 3rem;
|
||||
}
|
||||
|
||||
@ -18,20 +18,23 @@
|
||||
margin: 0;
|
||||
padding: 5px 0 0 0;
|
||||
display: block;
|
||||
float: left;
|
||||
.ltr-float-left();
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.value {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
float: left;
|
||||
.ltr-float-left();
|
||||
width: 15em;
|
||||
|
||||
select,
|
||||
input[type="text"] {
|
||||
font-size: inherit !important;
|
||||
margin: 0 1rem 0 0;
|
||||
margin-top: 0;
|
||||
.ltr-margin-right(1rem);
|
||||
margin-bottom: 0;
|
||||
.ltr-margin-left(0);
|
||||
}
|
||||
|
||||
select {
|
||||
@ -63,7 +66,7 @@
|
||||
.description {
|
||||
margin: 0;
|
||||
padding: 5px 0 0 0;
|
||||
float: left;
|
||||
.ltr-float-right();
|
||||
width: 50%;
|
||||
color: var(--color-settings-engine-description-font);
|
||||
font-size: 90%;
|
||||
@ -79,6 +82,7 @@
|
||||
|
||||
table.cookies {
|
||||
width: 100%;
|
||||
direction: ltr;
|
||||
|
||||
th,
|
||||
td {
|
||||
@ -106,7 +110,7 @@
|
||||
}
|
||||
|
||||
.category {
|
||||
margin-right: 0.5rem;
|
||||
.ltr-margin-right(0.5rem);
|
||||
|
||||
label {
|
||||
border: 2px solid transparent;
|
||||
@ -121,7 +125,7 @@
|
||||
|
||||
.name,
|
||||
.shortcut {
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
}
|
||||
|
||||
.preferences_back {
|
||||
@ -153,7 +157,7 @@
|
||||
th.name {
|
||||
.engine-tooltip {
|
||||
margin-top: 1.8rem;
|
||||
left: calc((100% - 85em) / 2 + 10em);
|
||||
.ltr-left(calc((100% - 85em) / 2 + 10em));
|
||||
max-width: 40rem;
|
||||
|
||||
.engine-description {
|
||||
@ -163,7 +167,7 @@
|
||||
}
|
||||
|
||||
.engine-group {
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
font-weight: normal;
|
||||
background: var(--color-settings-engine-group-background);
|
||||
}
|
||||
@ -175,6 +179,6 @@
|
||||
}
|
||||
|
||||
.engine-tooltip {
|
||||
left: 10em !important;
|
||||
.ltr-left(10em) !important;
|
||||
}
|
||||
}
|
||||
|
@ -8,7 +8,9 @@
|
||||
}
|
||||
|
||||
#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;
|
||||
background: var(--color-header-background);
|
||||
border-bottom: 1px solid var(--color-header-border);
|
||||
@ -24,7 +26,7 @@
|
||||
.category {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
margin-right: 1rem;
|
||||
.ltr-margin-right(1rem);
|
||||
padding: 0;
|
||||
|
||||
input {
|
||||
@ -127,11 +129,11 @@
|
||||
|
||||
#q {
|
||||
outline: medium none;
|
||||
padding-left: 12px;
|
||||
padding-right: 0 !important;
|
||||
border-right: none;
|
||||
.ltr-padding-left(12px);
|
||||
.ltr-padding-right(0) !important;
|
||||
.ltr-border-right(none);
|
||||
width: @search-width;
|
||||
border-radius: 10px 0 0 10px;
|
||||
.ltr-rounded-left-corners(10px);
|
||||
}
|
||||
|
||||
#q::-ms-clear,
|
||||
@ -140,8 +142,8 @@
|
||||
}
|
||||
|
||||
#send_search {
|
||||
border-left: none;
|
||||
border-radius: 0 10px 10px 0;
|
||||
.ltr-border-left(none);
|
||||
.ltr-rounded-right-corners(10px);
|
||||
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
@ -153,12 +155,15 @@
|
||||
.no-js #clear_search,
|
||||
.no-js #send_search {
|
||||
width: auto !important;
|
||||
border-left: 1px solid var(--color-search-border);
|
||||
.ltr-border-left(1px solid var(--color-search-border));
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.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 {
|
||||
background-color: inherit;
|
||||
@ -177,7 +182,10 @@
|
||||
}
|
||||
|
||||
.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 {
|
||||
@ -204,7 +212,7 @@
|
||||
|
||||
#categories {
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
overflow-x: scroll;
|
||||
overflow-y: hidden;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
@ -243,7 +251,7 @@
|
||||
|
||||
#main_results #q:placeholder-shown ~ #send_search {
|
||||
margin-right: 2.6rem;
|
||||
transition: margin-right 0.1s;
|
||||
transition: margin-right 0.1s; // FIX RTL
|
||||
}
|
||||
|
||||
.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";
|
||||
|
||||
#search_submit {
|
||||
left: 1px;
|
||||
right: auto;
|
||||
#q,
|
||||
#sidebar .infobox dt bdi {
|
||||
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;
|
||||
line-height: 1;
|
||||
text-decoration: inherit;
|
||||
.ltr-transform();
|
||||
}
|
||||
|
||||
.ion-icon-small {
|
||||
@ -78,9 +79,7 @@ main {
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
#main_preferences,
|
||||
#main_about,
|
||||
#main_stats {
|
||||
.page_with_header {
|
||||
margin: 2em auto;
|
||||
width: 85em;
|
||||
}
|
||||
@ -100,16 +99,8 @@ footer {
|
||||
}
|
||||
}
|
||||
|
||||
#main_preferences h1,
|
||||
#main_stats h1 {
|
||||
background: url('../img/searxng.png') no-repeat;
|
||||
background-size: contain;
|
||||
min-height: 40px;
|
||||
margin: 0 auto;
|
||||
|
||||
span {
|
||||
visibility: hidden;
|
||||
}
|
||||
.page_with_header .logo {
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
input[type="submit"],
|
||||
@ -139,8 +130,8 @@ a {
|
||||
|
||||
article[data-vim-selected] {
|
||||
background: var(--color-result-vim-selected);
|
||||
border-left: 0.2rem solid var(--color-result-vim-arrow);
|
||||
.rounded-right-corners;
|
||||
.ltr-border-left(0.2rem solid var(--color-result-vim-arrow));
|
||||
.ltr-rounded-right-corners(10px);
|
||||
}
|
||||
|
||||
article.result-images[data-vim-selected] {
|
||||
@ -166,7 +157,7 @@ article[data-vim-selected].category-social {
|
||||
.result {
|
||||
margin: @results-margin 0;
|
||||
padding: @result-padding;
|
||||
border-left: 0.2rem solid transparent;
|
||||
.ltr-border-left(0.2rem solid transparent);
|
||||
|
||||
h3 {
|
||||
font-size: 1.2rem;
|
||||
@ -264,15 +255,17 @@ article[data-vim-selected].category-social {
|
||||
|
||||
img {
|
||||
&.thumbnail {
|
||||
float: left;
|
||||
padding: 0.6rem 1rem 0 0;
|
||||
.ltr-float-left();
|
||||
padding-top: 0.6rem;
|
||||
.ltr-padding-right(1rem);
|
||||
width: 20rem;
|
||||
height: unset; // remove heigth value that was needed for lazy loading
|
||||
}
|
||||
|
||||
&.image {
|
||||
float: left;
|
||||
padding: 0.6rem 1rem 0 0;
|
||||
.ltr-float-left();
|
||||
padding-top: 0.6rem;
|
||||
.ltr-padding-right(1rem);
|
||||
width: 7rem;
|
||||
max-height: 7rem;
|
||||
object-fit: scale-down;
|
||||
@ -308,12 +301,15 @@ article[data-vim-selected].category-social {
|
||||
}
|
||||
|
||||
.engines {
|
||||
float: right;
|
||||
.ltr-float-right();
|
||||
color: var(--color-result-engines-font);
|
||||
|
||||
span {
|
||||
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;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
.ltr-right(0);
|
||||
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;
|
||||
background-color: var(--color-result-image-span-background-hover);
|
||||
font-size: 0.7em;
|
||||
@ -367,7 +366,7 @@ article[data-vim-selected].category-social {
|
||||
|
||||
.result-map {
|
||||
img.image {
|
||||
float: right !important;
|
||||
.ltr-float-right() !important;
|
||||
height: 100px !important;
|
||||
width: auto !important;
|
||||
}
|
||||
@ -382,12 +381,12 @@ article[data-vim-selected].category-social {
|
||||
font-weight: inherit;
|
||||
width: 17rem;
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
}
|
||||
|
||||
td {
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -397,7 +396,10 @@ article[data-vim-selected].category-social {
|
||||
}
|
||||
|
||||
#results {
|
||||
margin: 1rem 2rem 0 @results-offset;
|
||||
margin-top: 1rem;
|
||||
.ltr-margin-right(2rem);
|
||||
margin-bottom: 0;
|
||||
.ltr-margin-left(@results-offset);
|
||||
display: grid;
|
||||
grid-template-columns: @results-width 25rem;
|
||||
grid-template-rows: min-content min-content 1fr min-content;
|
||||
@ -533,7 +535,10 @@ article[data-vim-selected].category-social {
|
||||
|
||||
dt {
|
||||
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;
|
||||
font-weight: bold;
|
||||
}
|
||||
@ -571,7 +576,7 @@ article[data-vim-selected].category-social {
|
||||
|
||||
#linkto_preferences {
|
||||
position: absolute;
|
||||
right: 10px;
|
||||
.ltr-right(1.8rem);
|
||||
top: 2.2rem;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
@ -608,7 +613,7 @@ article[data-vim-selected].category-social {
|
||||
background: var(--color-backtotop-background);
|
||||
position: fixed;
|
||||
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;
|
||||
opacity: 0;
|
||||
.rounded-corners;
|
||||
@ -632,9 +637,7 @@ article[data-vim-selected].category-social {
|
||||
}
|
||||
|
||||
@media screen and (max-width: @tablet) {
|
||||
#main_preferences,
|
||||
#main_about,
|
||||
#main_stats {
|
||||
.page_with_header {
|
||||
margin: 2rem 0.5rem;
|
||||
width: auto;
|
||||
}
|
||||
@ -647,9 +650,12 @@ article[data-vim-selected].category-social {
|
||||
clear: both;
|
||||
|
||||
img {
|
||||
float: left;
|
||||
.ltr-float-left();
|
||||
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 {
|
||||
float: right;
|
||||
.ltr-float-right();
|
||||
padding: 0 0 3px 0;
|
||||
}
|
||||
}
|
||||
@ -750,12 +756,12 @@ article[data-vim-selected].category-social {
|
||||
}
|
||||
|
||||
#backToTop {
|
||||
left: auto;
|
||||
right: 1rem;
|
||||
.ltr-left(auto);
|
||||
.ltr-right(1rem);
|
||||
}
|
||||
|
||||
#pagination {
|
||||
margin-right: 4rem;
|
||||
.ltr-margin-right(4rem);
|
||||
}
|
||||
}
|
||||
|
||||
@ -767,12 +773,12 @@ article[data-vim-selected].category-social {
|
||||
|
||||
#linkto_preferences {
|
||||
top: 0.8rem;
|
||||
right: 0.7rem;
|
||||
.ltr-right(0.7rem);
|
||||
}
|
||||
|
||||
#main_index #linkto_preferences {
|
||||
top: 0.5rem;
|
||||
right: 0.5rem;
|
||||
.ltr-right(0.5rem);
|
||||
}
|
||||
|
||||
#results {
|
||||
|
@ -125,11 +125,11 @@ div.selectable_url {
|
||||
padding: 1rem;
|
||||
margin: 0 0 1em 0;
|
||||
border: 1px solid var(--color-toolkit-dialog-border);
|
||||
text-align: left;
|
||||
.ltr-text-align-left();
|
||||
.rounded-corners;
|
||||
|
||||
.close {
|
||||
float: right;
|
||||
.ltr-float-right();
|
||||
position: relative;
|
||||
top: -3px;
|
||||
color: inherit;
|
||||
@ -156,6 +156,10 @@ div.selectable_url {
|
||||
|
||||
td {
|
||||
padding: 0 1em 0 0;
|
||||
padding-top: 0;
|
||||
.ltr-padding-right(1rem);
|
||||
padding-bottom: 0;
|
||||
.ltr-padding-left(0);
|
||||
}
|
||||
|
||||
h4 {
|
||||
@ -301,7 +305,10 @@ html body .tabs > input:checked {
|
||||
/* -- select -- */
|
||||
select {
|
||||
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;
|
||||
color: var(--color-search-font);
|
||||
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" %}
|
||||
{% block title %}{{ _('about') }} - {% endblock %}
|
||||
{% block content %}
|
||||
{% include '__common__/about.html' %}
|
||||
{{ help.about | safe }}
|
||||
{% include "__common__/aboutextend.html" ignore missing %}
|
||||
{% endblock %}
|
||||
|
@ -1,4 +1,5 @@
|
||||
{% extends 'simple/base.html' %}
|
||||
{% extends 'simple/page_with_header.html' %}
|
||||
{% block content %}
|
||||
{% include '__common__/about.html' %}
|
||||
{{ help.about | safe }}
|
||||
{% include "__common__/aboutextend.html" ignore missing %}
|
||||
{% endblock %}
|
||||
|
@ -35,7 +35,7 @@
|
||||
<link rel="icon" href="{{ url_for('static', filename='img/favicon.svg') }}" type="image/svg+xml">
|
||||
</head>
|
||||
<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 %}
|
||||
<div class="dialog-error" role="alert">
|
||||
<a href="#" class="close" aria-label="close" title="close">×</a>
|
||||
@ -47,6 +47,12 @@
|
||||
</div>
|
||||
{% 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 %}
|
||||
{% endblock %}
|
||||
</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-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>',
|
||||
'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>',
|
||||
'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>',
|
||||
|
@ -4,7 +4,6 @@
|
||||
<link rel="preload" href="{{ url_for('static', filename='img/searxng.png') }}" as="image" />
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<nav id="linkto_preferences"><a href="{{ url_for('preferences') }}">{{ icon_big('menu-outline') }}</a></nav>
|
||||
<div class="index">
|
||||
<div class="title"><h1>SearXNG</h1></div>
|
||||
{% include 'simple/simple_search.html' %}
|
||||
|
@ -1,3 +1,5 @@
|
||||
{% from 'simple/icons.html' import icon_small %}
|
||||
|
||||
<!-- Draw 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 }}">
|
||||
|
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/icons.html' import icon_big %}
|
||||
|
||||
{% extends "simple/base.html" %}
|
||||
{% extends "simple/page_with_header.html" %}
|
||||
|
||||
{%- macro plugin_preferences(section) -%}
|
||||
{%- for plugin in plugins -%}
|
||||
@ -94,11 +94,9 @@
|
||||
{%- endmacro -%}
|
||||
|
||||
{% block head %} {% endblock %}
|
||||
{% block linkto_preferences %}{% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<a href="{{ url_for('index') }}"><h1><span>SearXNG</span></h1></a>
|
||||
|
||||
<h2>{{ _('Preferences') }}</h2>
|
||||
<h1>{{ _('Preferences') }}</h1>
|
||||
|
||||
<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.") }}
|
||||
</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('index') }}">{{ _('back') }}</a></div>
|
||||
<div class="{% if rtl %}left{% else %}right{% endif %} preferences_back"><a href="{{ url_for('index') }}">{{ _('Back') }}</a></div>
|
||||
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
@ -10,7 +10,6 @@
|
||||
{% 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 content %}
|
||||
<nav id="linkto_preferences"><a href="{{ url_for('preferences') }}">{{ icon_big('menu-outline') }}</a></nav>
|
||||
{% include 'simple/search.html' %}
|
||||
|
||||
{% 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="theme" value="{{ theme }}" >
|
||||
{% 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>
|
||||
</form>
|
||||
{% endif %}
|
||||
@ -179,7 +178,7 @@
|
||||
<input type="hidden" name="safesearch" value="{{ safesearch }}" >
|
||||
<input type="hidden" name="theme" value="{{ theme }}" >
|
||||
{% if timeout_limit %}<input type="hidden" name="timeout_limit" value="{{ timeout_limit|e }}" >{% endif %}
|
||||
<button type="submit">{{ _('next page') }} {{ icon_small('chevron-right') }}</button>
|
||||
<button type="submit">{{ _('Next page') }} {{ icon_small('chevron-right') }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</nav>
|
||||
|
@ -1,7 +1,7 @@
|
||||
{% from 'simple/icons.html' import icon_big %}
|
||||
{% 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) -%}
|
||||
{% if selected_engine_name %}
|
||||
@ -15,10 +15,7 @@
|
||||
|
||||
{% block head %} {% endblock %}
|
||||
{% block content %}
|
||||
|
||||
<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>
|
||||
<h1>{% if selected_engine_name %}<a href="{{ url_for('stats') }}">{% endif %}{{ _('Engine stats') }}{% if selected_engine_name %}</a> - {{ selected_engine_name }}{% endif %}</h1>
|
||||
|
||||
{% if not engine_stats.get('time') %}
|
||||
{{ _('There is currently no data available. ') }}
|
||||
|
Binary file not shown.
@ -8,187 +8,188 @@
|
||||
# d506c013dc1b502e7a53f91ebcbf8f29_985b4b3, 2017-2018
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
||||
"PO-Revision-Date: 2021-12-31 07:17+0000\n"
|
||||
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||
"PO-Revision-Date: 2022-01-28 07:16+0000\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-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"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
|
||||
"X-Generator: Weblate 4.10.1\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "ملفات"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "الرئيسية"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "موسيقى"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "شبكات التواصل الإجتماعي"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "صور"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "فيديوهات"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "علوم و تكنولوجيا"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "أخبار"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "خرائط"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr "onions"
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "علوم"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr "تلقائي"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr "فاتح"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr "مظلم"
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr "نفذ الوقت"
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "خطأ في بروتوكول HTTP"
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr "خطأ في الشبكة"
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr "تعطل غير متوقع"
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr "خطأ HTTP"
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr "خطأ في اتصال HTTP"
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr "خطأ في وكيل البروكسي"
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr "الكثير من الطلبات"
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr "خطأ في API الخادم"
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "تعذر العثور على عناصر"
|
||||
|
||||
#: 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"
|
||||
msgstr "المصدر"
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "إنّ الإعدادات خاطئة، يرجى تعديل خياراتك"
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "إعدادات غير صالحة"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "خطأ في البحث"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "قبل دقائق"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "قبل {hours} ساعات، {minutes} دقائق"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
msgstr "معلق"
|
||||
|
||||
@ -389,13 +390,13 @@ msgstr "ملف تورنت"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "النسخة المخبأة"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr "النفاذ عبر البروكسي"
|
||||
|
||||
@ -523,7 +524,6 @@ msgstr "القوائم الإفتراضية"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr "لغة البحث"
|
||||
|
||||
@ -611,12 +611,12 @@ msgstr "يقوم بتغيير لغة واجهة البحث"
|
||||
#: searx/templates/oscar/preferences.html:210
|
||||
#: searx/templates/simple/preferences.html:197
|
||||
msgid "Theme"
|
||||
msgstr ""
|
||||
msgstr "السمة"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:211
|
||||
#: searx/templates/simple/preferences.html:205
|
||||
msgid "Change SearXNG layout"
|
||||
msgstr ""
|
||||
msgstr "تغيير مظهر سيركس"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:222
|
||||
#: searx/templates/oscar/preferences.html:228
|
||||
@ -660,10 +660,11 @@ msgstr "عرض روابط نتائج البحث في ألسنة جديدة لل
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "الطريقة"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -678,7 +679,7 @@ msgstr "وكيل بروكسي الصور"
|
||||
#: searx/templates/oscar/preferences.html:274
|
||||
#: searx/templates/simple/preferences.html:256
|
||||
msgid "Proxying image results through SearXNG"
|
||||
msgstr ""
|
||||
msgstr "تمرير نتائج البحث عن الصور عبر بروكسي SearXNG"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:277
|
||||
#: searx/templates/oscar/preferences.html:288
|
||||
@ -717,7 +718,7 @@ msgstr "تعطيل الكل"
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -852,12 +853,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "حفظ"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "العودة"
|
||||
|
||||
@ -901,13 +900,11 @@ msgstr "حاول البحث عن :"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "الصفحة التالية"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "الصفحة السابقة"
|
||||
|
||||
@ -986,7 +983,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/result_templates/files.html:35
|
||||
#: searx/templates/oscar/stats.html:126 searx/templates/simple/stats.html:125
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
msgstr "اسم الملف"
|
||||
|
||||
#: searx/templates/oscar/stats.html:127 searx/templates/simple/stats.html:126
|
||||
msgid "Function"
|
||||
@ -1040,7 +1037,7 @@ msgstr ""
|
||||
|
||||
#: searx/templates/oscar/messages/first_time.html:7
|
||||
msgid "It look like you are using SearXNG first time."
|
||||
msgstr ""
|
||||
msgstr "يظهر أنك تستخدم محرك سيركس لأول مرة."
|
||||
|
||||
#: searx/templates/oscar/messages/no_cookies.html:3
|
||||
msgid "Information!"
|
||||
@ -1064,6 +1061,8 @@ msgstr "لم تتمكن المحركات من العثور على أية نتي
|
||||
#: searx/templates/simple/messages/no_results.html:15
|
||||
msgid "Please, try again later or find another SearXNG instance."
|
||||
msgstr ""
|
||||
"يرجى إعادة المحاولة لاحقًا. إن كنت في عجلة من أمرك، ندعوك إلى البحث عن مثيل "
|
||||
"خادم آخر لمحرك سيركس."
|
||||
|
||||
#: searx/templates/oscar/messages/no_results.html:17
|
||||
#: searx/templates/simple/messages/no_results.html:20
|
||||
@ -1239,10 +1238,26 @@ msgstr "محركات البحث المُستخدَمة حاليًا"
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1379,3 +1394,11 @@ msgstr "محرك"
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: bg\n"
|
||||
@ -21,172 +21,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "файлове"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "общо"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "музика"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "социална мрежа"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "изображения"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "видео"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "IT"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "новини"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "карта"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr "onions"
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "наука"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr "автоматичен"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr "светъл"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr "тъмен"
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr "изчакване"
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr "грешка при анализа"
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "Грешка в протокола HTTP"
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr "мрежова грешка"
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr "неочакван срив"
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr "HTTP грешка"
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr "HTTP грешка във връзката"
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr "прокси грешка"
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr "Кепча"
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr "твърде много искания"
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr "отказан достъп"
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr "грешка в API на сървъра"
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "Не е намерен артикул"
|
||||
|
||||
#: 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"
|
||||
msgstr "Източник"
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Неправилни настройки, моля проверете предпочитанията си."
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "невалидни настройки"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "грешка при търсенето"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "преди {minutes} минута(минути)"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "преди {hours} час(ове), {minutes} минута(минути)"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
msgstr "преустановен"
|
||||
|
||||
@ -396,13 +396,13 @@ msgstr "торент файл"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "кеширана"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr ""
|
||||
|
||||
@ -530,7 +530,6 @@ msgstr "Първоначални категории"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr "Език на търсене"
|
||||
|
||||
@ -667,10 +666,11 @@ msgstr "Отвори връзките в нов раздел."
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Метод"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -724,7 +724,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -863,12 +863,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "запази"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "назад"
|
||||
|
||||
@ -912,13 +910,11 @@ msgstr ""
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "следваща страница"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "предишна страница"
|
||||
|
||||
@ -1250,10 +1246,26 @@ msgstr "Използвани търсачки в момента"
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1390,3 +1402,12 @@ msgstr "Търсачка"
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: bo\n"
|
||||
@ -21,172 +21,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "ཡིག་ཚགས།"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "དྲ་སྦྲེལ།"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "རོལ་མོ།"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "སྤྱི་འབྲེལ།"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "པར་རིས།"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "བརྙན་ཟློས།"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "ཆ་འཕྲིན་ལག་རྩལ།"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "གསར་འགྱུར།"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "ས་བཀྲ།"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "ཚན་རིག"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "རྣམ་གྲངས་གང་ཡང་རྙེད་རྒྱུ་མ་བྱུང་།"
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།ཁྱེད་ཀྱིས་གདམ་ཀ་ལ་བཅོས་སྒྲིག་གཏོང་རོགས།"
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "འཚོལ་བཤེར་ལ་ནོར་འཁྲུལ་བྱུང་།"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "སྐར་མ་ {minutes} སྔོན་ལ།"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "ཆུ་ཚོད་ {hours} དང་སྐར་མ {minutes} སྔོན་ལ།"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
@ -391,13 +391,13 @@ msgstr "ས་བོན་ཡིག་ཆ།"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "འདྲ་བཤུས་རྒྱབ་ཚར།"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr "མངག་བཅོལ་བྱེད་ཟིན།"
|
||||
|
||||
@ -525,7 +525,6 @@ msgstr "གཞི་བཞག་གི་རིགས།"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr "འཚོལ་བཤེར་ནང་དོན་མཚོན་བྱེད་ཀྱི་སྐད་རིགས།"
|
||||
|
||||
@ -662,10 +661,11 @@ msgstr "ཤོག་ངོས་གསར་བ་ཞིག་ནས་དྲ་
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "ཐབས་ཤེས།"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -719,7 +719,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -854,12 +854,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "གསོག་འཇོག"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "ཕྱིར་ལོག"
|
||||
|
||||
@ -903,13 +901,11 @@ msgstr "འཚོལ་བཤེར་ནང་དོན་ནི།"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "དྲ་ངོས་གཞུག་མ།"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "དྲ་ངོས་སྔོན་མ།"
|
||||
|
||||
@ -1241,10 +1237,26 @@ msgstr "ཉེ་ལམ་སྤྱད་ཟིན་པའི་འཚོལ་
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1385,3 +1397,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: ca\n"
|
||||
@ -22,172 +22,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "fitxers"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "general"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "música"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "xarxes socials"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "imatges"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "vídeos"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "informàtica"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "notícies"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "mapa"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "ciència"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "No s'ha trobat cap element"
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "La configuració no és vàlida, editeu-la"
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
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"
|
||||
msgstr "error en la cerca"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "fa {minutes} minuts"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "fa {hours} hores i {minutes} minuts"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
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:73 searx/templates/oscar/macros.html:75
|
||||
#: searx/templates/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "en memòria cau"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr "en servidor intermediari"
|
||||
|
||||
@ -533,7 +533,6 @@ msgstr "Categories predeterminades"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
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/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Mètode"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -732,7 +732,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -874,12 +874,10 @@ msgstr ""
|
||||
"resultats."
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "desa"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "enrere"
|
||||
|
||||
@ -923,13 +921,11 @@ msgstr "Proveu a cercar:"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "pàgina següent"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "pàgina anterior"
|
||||
|
||||
@ -1261,10 +1257,26 @@ msgstr "Motors de cerca usats actualment"
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1408,3 +1420,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
||||
"PO-Revision-Date: 2021-12-31 07:17+0000\n"
|
||||
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||
"PO-Revision-Date: 2022-01-23 20:00+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: cs\n"
|
||||
"Language-Team: Czech "
|
||||
@ -24,172 +24,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "soubory"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "obecné"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "hudba"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "sociální media"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "obrázky"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "videa"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "IT"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "zprávy"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "mapa"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr "cibule"
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "věda"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
msgstr "aplikace"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr "světlý"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr "tmavý"
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "chyba HTTP protokolu"
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr "síťová chyba"
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr "nečekaná chyba"
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr "chyba HTTP"
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr "přístup odepřen"
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "Nic nenalezeno"
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr "Neplatné nastavení, upravte své předvolby"
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "Neplatné nastavení"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "chyba vyhledávání"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "před {minutes} minutami"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "před {hours} hodinami, {minutes} minutami"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
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:73 searx/templates/oscar/macros.html:75
|
||||
#: searx/templates/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "archivovaná verze"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr "přes proxy"
|
||||
|
||||
@ -533,7 +533,6 @@ msgstr "Základní kategorie"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
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/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Dotazovací metoda"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"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/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -873,12 +873,10 @@ msgstr ""
|
||||
"prozrazením dat při kliknutí na výsledky hledání."
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "uložit"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "zpět"
|
||||
|
||||
@ -922,13 +920,11 @@ msgstr "Zkuste vyhledat:"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "další stránka"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "předchozí stránka"
|
||||
|
||||
@ -1260,10 +1256,26 @@ msgstr "Aktuálně používané vyhledávače"
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1406,3 +1418,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
||||
"PO-Revision-Date: 2020-07-09 13:10+0000\n"
|
||||
"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||
"PO-Revision-Date: 2022-01-19 22:16+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: cy\n"
|
||||
"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 "
|
||||
"!= 11) ? 2 : 3\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -21,172 +21,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "ffeiliau"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "cyffredinol"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "cerddoriaeth"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "cyfryngau cymdeithasol"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "delweddau"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "fideos"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "Technoleg"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "newyddion"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "map"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr ""
|
||||
msgstr "winwns"
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "gwyddoniaeth"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr ""
|
||||
msgstr "tywyll"
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
msgstr "gwall dosrannu"
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "Ni chanfuwyd eitem"
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Gosodiadau annilys. Addasa dy ddewisiadau."
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "Gosodiadau annilys"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "gwall chwilio"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "{minutes} munud yn ôl"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "{hours} awr, {minutes} munud yn ôl"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
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:73 searx/templates/oscar/macros.html:75
|
||||
#: searx/templates/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr ""
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr ""
|
||||
|
||||
@ -521,7 +521,6 @@ msgstr "Categorïau arferol"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
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/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Dull"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -715,7 +715,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -850,12 +850,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "cadw"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "nôl"
|
||||
|
||||
@ -899,13 +897,11 @@ msgstr "Rho gynnig ar chwilio am:"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "tudalen nesaf"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "tudalen ddiwethaf"
|
||||
|
||||
@ -1083,7 +1079,7 @@ msgstr "Da iawn!"
|
||||
|
||||
#: searx/templates/oscar/messages/save_settings_successfull.html:8
|
||||
msgid "Settings saved successfully."
|
||||
msgstr "Cadwyd y gosodiadau yn iawn!"
|
||||
msgstr "Cadwyd y gosodiadau yn iawn."
|
||||
|
||||
#: searx/templates/oscar/messages/unknow_error.html:7
|
||||
msgid "Oh snap!"
|
||||
@ -1237,10 +1233,26 @@ msgstr ""
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1382,3 +1394,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
||||
"PO-Revision-Date: 2021-12-31 07:17+0000\n"
|
||||
"Last-Translator: Frederik From <frederikfrom@pm.me>\n"
|
||||
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||
"PO-Revision-Date: 2022-01-23 20:00+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: da\n"
|
||||
"Language-Team: Danish "
|
||||
"<https://weblate.bubu1.eu/projects/searxng/searxng/da/>\n"
|
||||
@ -21,174 +21,174 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "filer"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "generelt"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "musik"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "sociale medier"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "billeder"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "videoer"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "it"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "nyheder"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "kort"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr "onion-links"
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "videnskab"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
msgstr "ordbøger"
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
msgstr "spørgsmål og svar"
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr "automatisk"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr "lys"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr "mørk"
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr "udløbstid"
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr "fortolkningsfejl"
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "HTTP-protokolfejl"
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr "netværksfejl"
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr "uventet nedbrud"
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr "HTTP-fejl"
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr "HTTP-tilkoblingsfejl"
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
msgstr "proxyfejl"
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr "for mange forespørgsler"
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr "adgang nægtet"
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr "server-API-fejl"
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "Intet fundet"
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr "Ugyldige indstillinger, redigér venligst dine valg"
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "Ugyldig indstilling"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "søgefejl"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "for {minutes} minut(ter) siden"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "for {hours} time(r) og {minutes} minut(ter) siden"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
msgstr "Suspenderet"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
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:73 searx/templates/oscar/macros.html:75
|
||||
#: searx/templates/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "cached"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr "viderestillet"
|
||||
|
||||
@ -418,7 +418,7 @@ msgstr "Tillad"
|
||||
|
||||
#: searx/templates/oscar/macros.html:139
|
||||
msgid "broken"
|
||||
msgstr ""
|
||||
msgstr "defekt"
|
||||
|
||||
#: searx/templates/oscar/macros.html:141
|
||||
msgid "supported"
|
||||
@ -482,7 +482,7 @@ msgstr "P95"
|
||||
#: searx/templates/oscar/preferences.html:68
|
||||
#: searx/templates/simple/preferences.html:83
|
||||
msgid "Failed checker test(s): "
|
||||
msgstr ""
|
||||
msgstr "Fejlet checkertest(s): "
|
||||
|
||||
#: searx/templates/oscar/preferences.html:96
|
||||
#: searx/templates/simple/preferences.html:101
|
||||
@ -498,7 +498,7 @@ msgstr "Generelt"
|
||||
#: searx/templates/oscar/preferences.html:102
|
||||
#: searx/templates/oscar/preferences.html:193
|
||||
msgid "User Interface"
|
||||
msgstr ""
|
||||
msgstr "Bruger Interface"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:103
|
||||
#: searx/templates/oscar/preferences.html:257
|
||||
@ -515,7 +515,7 @@ msgstr "Søgemaskiner"
|
||||
#: searx/templates/oscar/preferences.html:105
|
||||
#: searx/templates/simple/preferences.html:329
|
||||
msgid "Special Queries"
|
||||
msgstr ""
|
||||
msgstr "Specielle Forespørgsler"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:106
|
||||
#: searx/templates/oscar/preferences.html:454
|
||||
@ -531,7 +531,6 @@ msgstr "Standardkategorier"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr "Søgesprog"
|
||||
|
||||
@ -626,7 +625,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:211
|
||||
#: searx/templates/simple/preferences.html:205
|
||||
msgid "Change SearXNG layout"
|
||||
msgstr ""
|
||||
msgstr "Ændr SearXNG layout"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:222
|
||||
#: searx/templates/oscar/preferences.html:228
|
||||
@ -640,11 +639,11 @@ msgstr "Stil"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:231
|
||||
msgid "Show advanced settings"
|
||||
msgstr ""
|
||||
msgstr "Vis avancerede indstillinger"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:232
|
||||
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:245
|
||||
@ -670,10 +669,11 @@ msgstr "Åben resultat-link i en ny browser-tab"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Metode"
|
||||
msgid "HTTP Method"
|
||||
msgstr "HTTP-metode"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"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/simple/preferences.html:256
|
||||
msgid "Proxying image results through SearXNG"
|
||||
msgstr ""
|
||||
msgstr "Bearbejder billedresulter gennem SearXNG"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:277
|
||||
#: searx/templates/oscar/preferences.html:288
|
||||
@ -721,7 +721,7 @@ msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:315
|
||||
msgid "Allow all"
|
||||
msgstr ""
|
||||
msgstr "Tillad alle"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:316
|
||||
msgid "Disable all"
|
||||
@ -730,7 +730,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -766,7 +766,7 @@ msgstr "Tidsinterval"
|
||||
#: searx/templates/simple/preferences.html:291
|
||||
#: searx/templates/simple/stats.html:31
|
||||
msgid "Response time"
|
||||
msgstr ""
|
||||
msgstr "Svartid"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:340
|
||||
#: searx/templates/oscar/preferences.html:344
|
||||
@ -872,12 +872,10 @@ msgstr ""
|
||||
"resultatet."
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "gem"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "tilbage"
|
||||
|
||||
@ -921,13 +919,11 @@ msgstr "Prøv at søge efter:"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "næste side"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "forrige side"
|
||||
|
||||
@ -1259,10 +1255,26 @@ msgstr "Pt. anvendte søgemaskiner"
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1400,3 +1412,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-01-06 08:25+0000\n"
|
||||
"PO-Revision-Date: 2022-01-07 07:17+0000\n"
|
||||
"POT-Creation-Date: 2022-01-26 17:14+0000\n"
|
||||
"PO-Revision-Date: 2022-01-28 07:16+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language-Team: German <https://weblate.bubu1.eu/projects/searxng/searxng/de/>"
|
||||
"\n"
|
||||
@ -34,172 +34,172 @@ msgstr ""
|
||||
"X-Generator: Weblate 4.10.1\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "Dateien"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "Allgemein"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "Musik"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "Soziale Medien"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "Bilder"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr "Videos"
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr "IT"
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "Neuigkeiten"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "Karte"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr "Onions"
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "Wissenschaft"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr "Apps"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr "Lexika"
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr "Songtexte"
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr "Pakete"
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr "Q&A"
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr "Repositories"
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr "Software Wikis"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr "WEB"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr "auto"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr "hell"
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr "dunkel"
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr "Timeout"
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr "Fehler beim Parsen"
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "HTTP-Protokollfehler"
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr "Netzwerkfehler"
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr "unerwarteter Absturz"
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr "HTTP-Fehler"
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr "HTTP-Verbindungsfehler"
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr "Proxy-Fehler"
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr "zu viele Anfragen"
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr "Zugriff verweigert"
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr "Server-API-Fehler"
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr "Keine Einträge gefunden"
|
||||
|
||||
#: 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"
|
||||
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"
|
||||
msgstr "Ungültige Einstellungen. Bitte diese überprüfen"
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr "Ungültige Einstellungen"
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "Suchfehler"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "vor {minutes} Minute(n)"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "vor {hours} Stunde(n), {minutes} Minute(n)"
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
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:73 searx/templates/oscar/macros.html:75
|
||||
#: searx/templates/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr "Im Cache"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr "proxy"
|
||||
|
||||
@ -548,7 +548,6 @@ msgstr "Standardkategorien"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr "Suchsprache"
|
||||
|
||||
@ -689,10 +688,11 @@ msgstr "Links in einem neuen Browser-Tab öffnen"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Methode"
|
||||
msgid "HTTP Method"
|
||||
msgstr "HTTP Methode"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"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/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
"Diese Registerkarte zeigt keine Suchergebnisse an, aber Sie können die hier "
|
||||
"aufgelisteten Suchmaschinen über bangs (!) durchsuchen."
|
||||
"Auf dieser Registerkarte werden keine Suchergebnisse angezeigt, aber Sie "
|
||||
"können die hier aufgelisteten Suchmaschinen über bangs durchsuchen."
|
||||
|
||||
#: searx/templates/oscar/preferences.html:334
|
||||
#: searx/templates/oscar/preferences.html:350
|
||||
@ -897,12 +897,10 @@ msgstr ""
|
||||
"ausgewählten Ergebnisseiten übermittelt werden."
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "Speichern"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "Zurück"
|
||||
|
||||
@ -946,13 +944,11 @@ msgstr "Suche nach:"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "nächste Seite"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "vorherige Seite"
|
||||
|
||||
@ -1287,10 +1283,26 @@ msgstr "Aktuell benutzte Suchmaschinen"
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1431,3 +1443,16 @@ msgstr "Suchmaschine"
|
||||
#~ " contains your query. Your browser "
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
|
||||
"Language: el_GR\n"
|
||||
@ -21,172 +21,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr "αρχεία"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr "γενικά"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr "μουσική"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr "κοινωνικά δίκτυα"
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr "εικόνες"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr "νέα"
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr "χάρτης"
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr "επιστήμη"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr "λάθος αναζήτησης"
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "{minutes} λεπτά πριν"
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
@ -391,13 +391,13 @@ msgstr "αρχείο torrent"
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr ""
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr ""
|
||||
|
||||
@ -525,7 +525,6 @@ msgstr "Προεπιλεγμένες κατηγορίες"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr "Γλώσσα αναζήτησης"
|
||||
|
||||
@ -662,10 +661,11 @@ msgstr "Άνοιξε τους συνδέσμους των αποτελεσμάτ
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgstr "Μέθοδος"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -719,7 +719,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -854,12 +854,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr "αποθήκευση"
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr "πίσω"
|
||||
|
||||
@ -903,13 +901,11 @@ msgstr "Δοκιμάστε αναζήτηση για:"
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr "επόμενη σελίδα"
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr "προηγούμενη σελίδα"
|
||||
|
||||
@ -1241,10 +1237,26 @@ msgstr "Μηχανές αναζήτησης που χρησιμοποιούντ
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1378,3 +1390,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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 ""
|
||||
"Project-Id-Version: PROJECT VERSION\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"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language: en\n"
|
||||
@ -18,172 +18,172 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 2.9.1\n"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:169
|
||||
msgid "files"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:170
|
||||
msgid "general"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:171
|
||||
msgid "music"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:172
|
||||
msgid "social media"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:169
|
||||
#: searx/webapp.py:173
|
||||
msgid "images"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:174
|
||||
msgid "videos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:171
|
||||
#: searx/webapp.py:175
|
||||
msgid "it"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:172
|
||||
#: searx/webapp.py:176
|
||||
msgid "news"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:173
|
||||
#: searx/webapp.py:177
|
||||
msgid "map"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:174
|
||||
#: searx/webapp.py:178
|
||||
msgid "onions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:175
|
||||
#: searx/webapp.py:179
|
||||
msgid "science"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:181
|
||||
msgid "apps"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:182
|
||||
msgid "dictionaries"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:179
|
||||
#: searx/webapp.py:183
|
||||
msgid "lyrics"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:180
|
||||
#: searx/webapp.py:184
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:181
|
||||
#: searx/webapp.py:185
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:182
|
||||
#: searx/webapp.py:186
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:183
|
||||
#: searx/webapp.py:187
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:188
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "light"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:189
|
||||
#: searx/webapp.py:193
|
||||
msgid "dark"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:192
|
||||
#: searx/webapp.py:196
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:193
|
||||
#: searx/webapp.py:197
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:194
|
||||
#: searx/webapp.py:198
|
||||
msgid "HTTP protocol error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:195
|
||||
#: searx/webapp.py:199
|
||||
msgid "network error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:197
|
||||
#: searx/webapp.py:201
|
||||
msgid "unexpected crash"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:204
|
||||
#: searx/webapp.py:208
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:205
|
||||
#: searx/webapp.py:209
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:211
|
||||
#: searx/webapp.py:215
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:212
|
||||
#: searx/webapp.py:216
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:213
|
||||
#: searx/webapp.py:217
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:214
|
||||
#: searx/webapp.py:218
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:215
|
||||
#: searx/webapp.py:219
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:402
|
||||
#: searx/webapp.py:421
|
||||
msgid "No item found"
|
||||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:515 searx/webapp.py:925
|
||||
#: searx/webapp.py:534 searx/webapp.py:941
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:531
|
||||
#: searx/webapp.py:550
|
||||
msgid "Invalid settings"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:608 searx/webapp.py:683
|
||||
#: searx/webapp.py:626 searx/webapp.py:701
|
||||
msgid "search error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:726
|
||||
#: searx/webapp.py:744
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:728
|
||||
#: searx/webapp.py:746
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:846
|
||||
#: searx/webapp.py:862
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
@ -384,13 +384,13 @@ msgstr ""
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "cached"
|
||||
msgstr ""
|
||||
|
||||
#: 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/simple/macros.html:41
|
||||
#: searx/templates/simple/macros.html:43
|
||||
msgid "proxied"
|
||||
msgstr ""
|
||||
|
||||
@ -518,7 +518,6 @@ msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:133
|
||||
#: searx/templates/simple/preferences.html:117
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid "Search language"
|
||||
msgstr ""
|
||||
|
||||
@ -655,10 +654,11 @@ msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:262
|
||||
#: searx/templates/simple/preferences.html:237
|
||||
msgid "Method"
|
||||
msgid "HTTP Method"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:263
|
||||
#: searx/templates/simple/preferences.html:244
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
@ -712,7 +712,7 @@ msgstr ""
|
||||
#: searx/templates/oscar/preferences.html:325
|
||||
#: searx/templates/simple/preferences.html:280
|
||||
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."
|
||||
msgstr ""
|
||||
|
||||
@ -847,12 +847,10 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:492
|
||||
#: searx/templates/simple/preferences.html:404
|
||||
msgid "save"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/preferences.html:493
|
||||
#: searx/templates/simple/preferences.html:406
|
||||
msgid "back"
|
||||
msgstr ""
|
||||
|
||||
@ -896,13 +894,11 @@ msgstr ""
|
||||
|
||||
#: searx/templates/oscar/results.html:162
|
||||
#: searx/templates/oscar/results.html:187
|
||||
#: searx/templates/simple/results.html:182
|
||||
msgid "next page"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/oscar/results.html:169
|
||||
#: searx/templates/oscar/results.html:180
|
||||
#: searx/templates/simple/results.html:165
|
||||
msgid "previous page"
|
||||
msgstr ""
|
||||
|
||||
@ -1232,10 +1228,26 @@ msgstr ""
|
||||
msgid "Supports selected language"
|
||||
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
|
||||
msgid "Answers"
|
||||
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/simple_search.html:5
|
||||
msgid "clear"
|
||||
@ -1379,3 +1391,12 @@ msgstr ""
|
||||
#~ "can record this title."
|
||||
#~ 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