mirror of
https://github.com/searxng/searxng.git
synced 2025-02-17 02:40:03 +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
|
||||
|
87
README.rst
87
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:
|
||||
|
||||
IRC: `#searxng on libera.chat <https://web.libera.chat/?channel=#searxng>`_ which is bridged to Matrix.
|
||||
* 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
|
||||
|
||||
|
||||
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,12 +167,13 @@ 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']:
|
||||
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)
|
||||
|
||||
|
BIN
searx/static/themes/oscar/js/searxng.min.js
vendored
BIN
searx/static/themes/oscar/js/searxng.min.js
vendored
Binary file not shown.
Binary file not shown.
@ -1,3 +1,7 @@
|
||||
{
|
||||
"extends": "stylelint-config-standard"
|
||||
"extends": "stylelint-config-standard",
|
||||
"rules": {
|
||||
"declaration-empty-line-before": null,
|
||||
"no-invalid-position-at-import-rule": null
|
||||
}
|
||||
}
|
||||
|
BIN
searx/static/themes/simple/css/searxng-rtl.min.css
vendored
BIN
searx/static/themes/simple/css/searxng-rtl.min.css
vendored
Binary file not shown.
Binary file not shown.
BIN
searx/static/themes/simple/css/searxng.min.css
vendored
BIN
searx/static/themes/simple/css/searxng.min.css
vendored
Binary file not shown.
Binary file not shown.
@ -127,7 +127,7 @@ module.exports = function (grunt) {
|
||||
},
|
||||
files: [
|
||||
{
|
||||
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',
|
||||
|
BIN
searx/static/themes/simple/js/searxng.min.js
vendored
BIN
searx/static/themes/simple/js/searxng.min.js
vendored
Binary file not shown.
@ -4,7 +4,8 @@
|
||||
position: absolute;
|
||||
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.
@ -10,185 +10,186 @@ 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-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