forked from Ponysearch/Ponysearch
Merge branch 'searxng:master' into master
This commit is contained in:
commit
9740ed836a
213 changed files with 18116 additions and 6228 deletions
|
@ -7,7 +7,7 @@
|
|||
;;
|
||||
;; If you get ``*** EPC Error ***`` (even after a jedi:install-server) in
|
||||
;; your emacs session, mostly you have jedi-mode enabled but the python
|
||||
;; enviroment is missed. The python environment has to be next to the
|
||||
;; environment is missed. The python environment has to be next to the
|
||||
;; ``<repo>/.dir-locals.el`` in::
|
||||
;;
|
||||
;; ./local/py3
|
||||
|
@ -64,10 +64,10 @@
|
|||
(setq-local python-environment-directory
|
||||
(expand-file-name "./local" prj-root))
|
||||
|
||||
;; to get in use of NVM enviroment, install https://github.com/rejeep/nvm.el
|
||||
;; to get in use of NVM environment, install https://github.com/rejeep/nvm.el
|
||||
(setq-local nvm-dir (expand-file-name "./.nvm" prj-root))
|
||||
|
||||
;; use 'py3' enviroment as default
|
||||
;; use 'py3' environment as default
|
||||
(setq-local python-environment-default-root-name
|
||||
"py3")
|
||||
|
||||
|
|
28
.github/workflows/security.yml
vendored
Normal file
28
.github/workflows/security.yml
vendored
Normal file
|
@ -0,0 +1,28 @@
|
|||
name: "Security checks"
|
||||
on:
|
||||
schedule:
|
||||
- cron: "42 05 * * *"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
dockers:
|
||||
name: Trivy ${{ matrix.image }}
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Run Trivy vulnerability scanner
|
||||
uses: aquasecurity/trivy-action@master
|
||||
with:
|
||||
image-ref: 'searxng/searxng:latest'
|
||||
ignore-unfixed: false
|
||||
vuln-type: 'os,library'
|
||||
severity: 'UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL'
|
||||
format: 'sarif'
|
||||
output: 'trivy-results.sarif'
|
||||
|
||||
- name: Upload Trivy scan results to GitHub Security tab
|
||||
uses: github/codeql-action/upload-sarif@v2
|
||||
with:
|
||||
sarif_file: 'trivy-results.sarif'
|
|
@ -323,7 +323,7 @@ Special thanks to `NLNet <https://nlnet.nl>`__ for sponsoring multiple features
|
|||
- Removed engines: faroo
|
||||
|
||||
Special thanks to `NLNet <https://nlnet.nl>`__ for sponsoring multiple features of this release.
|
||||
Special thanks to https://www.accessibility.nl/english for making accessibilty audit.
|
||||
Special thanks to https://www.accessibility.nl/english for making accessibility audit.
|
||||
|
||||
News
|
||||
~~~~
|
||||
|
|
|
@ -106,7 +106,7 @@ update_conf() {
|
|||
# There is a new version
|
||||
if [ "$FORCE_CONF_UPDATE" -ne 0 ]; then
|
||||
# Replace the current configuration
|
||||
printf '⚠️ Automaticaly update %s to the new version\n' "${CONF}"
|
||||
printf '⚠️ Automatically update %s to the new version\n' "${CONF}"
|
||||
if [ ! -f "${OLD_CONF}" ]; then
|
||||
printf 'The previous configuration is saved to %s\n' "${OLD_CONF}"
|
||||
mv "${CONF}" "${OLD_CONF}"
|
||||
|
|
|
@ -10,7 +10,7 @@ threads = 4
|
|||
# The right granted on the created socket
|
||||
chmod-socket = 666
|
||||
|
||||
# Plugin to use and interpretor config
|
||||
# Plugin to use and interpreter config
|
||||
single-interpreter = true
|
||||
master = true
|
||||
plugin = python3
|
||||
|
|
|
@ -25,7 +25,7 @@ place the templates at::
|
|||
|
||||
searx/templates/{theme_name}/result_templates/{template_name}
|
||||
|
||||
Futhermore, if you do not wish to expose these engines on a public instance, you
|
||||
Furthermore, if you do not wish to expose these engines on a public instance, you
|
||||
can still add them and limit the access by setting ``tokens`` as described in
|
||||
section :ref:`private engines`.
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ Example
|
|||
Scenario:
|
||||
|
||||
#. Recoll indexes a local filesystem mounted in ``/export/documents/reference``,
|
||||
#. the Recoll search inteface can be reached at https://recoll.example.org/ and
|
||||
#. the Recoll search interface can be reached at https://recoll.example.org/ and
|
||||
#. the contents of this filesystem can be reached though https://download.example.org/reference
|
||||
|
||||
.. code:: yaml
|
||||
|
|
|
@ -21,7 +21,7 @@ above are added to ``settings.yml`` just commented out, as you have to
|
|||
Please note that if you are not using HTTPS to access these engines, you have to enable
|
||||
HTTP requests by setting ``enable_http`` to ``True``.
|
||||
|
||||
Futhermore, if you do not want to expose these engines on a public instance, you
|
||||
Furthermore, if you do not want to expose these engines on a public instance, you
|
||||
can still add them and limit the access by setting ``tokens`` as described in
|
||||
section :ref:`private engines`.
|
||||
|
||||
|
|
|
@ -240,6 +240,7 @@ Global Settings
|
|||
query_in_title: false
|
||||
infinite_scroll: false
|
||||
center_alignment: false
|
||||
cache_url: https://web.archive.org/web/
|
||||
default_theme: simple
|
||||
theme_args:
|
||||
simple_style: auto
|
||||
|
@ -267,6 +268,15 @@ Global Settings
|
|||
side of the screen. This setting only affects the *desktop layout*
|
||||
(:origin:`min-width: @tablet <searx/static/themes/simple/src/less/definitions.less>`)
|
||||
|
||||
.. cache_url:
|
||||
|
||||
``cache_url`` : ``https://web.archive.org/web/``
|
||||
URL prefix of the internet archive or cache, don't forgett trailing slash (if
|
||||
needed). The default is https://web.archive.org/web/ alternatives are:
|
||||
|
||||
- https://webcache.googleusercontent.com/search?q=cache:
|
||||
- https://archive.today/
|
||||
|
||||
``default_theme`` :
|
||||
Name of the theme you want to use by default on your SearXNG instance.
|
||||
|
||||
|
@ -331,7 +341,7 @@ Communication with search engines.
|
|||
outgoing:
|
||||
request_timeout: 2.0 # default timeout in seconds, can be override by engine
|
||||
max_request_timeout: 10.0 # the maximum timeout in seconds
|
||||
useragent_suffix: "" # informations like an email address to the administrator
|
||||
useragent_suffix: "" # information like an email address to the administrator
|
||||
pool_connections: 100 # Maximum number of allowable connections, or null
|
||||
# for no limits. The default is 100.
|
||||
pool_maxsize: 10 # Number of allowable keep-alive connections, or null
|
||||
|
|
|
@ -145,7 +145,7 @@ engine, you must install the package ``mysql-connector-python``.
|
|||
|
||||
The authentication plugin is configurable by setting ``auth_plugin`` in the
|
||||
attributes. By default it is set to ``caching_sha2_password``. This is an
|
||||
example configuration for quering a MySQL server:
|
||||
example configuration for querying a MySQL server:
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ Engine File
|
|||
argument type information
|
||||
======================= =========== ========================================================
|
||||
categories list pages, in which the engine is working
|
||||
paging boolean support multible pages
|
||||
paging boolean support multiple pages
|
||||
time_range_support boolean support search time range
|
||||
engine_type str - ``online`` :ref:`[ref] <demo online engine>` by
|
||||
default, other possibles values are:
|
||||
|
@ -311,3 +311,92 @@ the parameter ``template`` must be set to the desired type.
|
|||
address.postcode postcode of object
|
||||
address.country country of object
|
||||
========================= =====================================================
|
||||
|
||||
.. _BibTeX format: https://www.bibtex.com/g/bibtex-format/
|
||||
.. _BibTeX field types: https://en.wikipedia.org/wiki/BibTeX#Field_types
|
||||
|
||||
.. list-table:: Parameter of the **paper** media type /
|
||||
see `BibTeX field types`_ and `BibTeX format`_
|
||||
:header-rows: 2
|
||||
:width: 100%
|
||||
|
||||
* - result-parameter
|
||||
- Python type
|
||||
- information
|
||||
|
||||
* - template
|
||||
- :py:class:`str`
|
||||
- is set to ``paper.html``
|
||||
|
||||
* - title
|
||||
- :py:class:`str`
|
||||
- title of the result
|
||||
|
||||
* - content
|
||||
- :py:class:`str`
|
||||
- abstract
|
||||
|
||||
* - comments
|
||||
- :py:class:`str`
|
||||
- free text display in italic below the content
|
||||
|
||||
* - tags
|
||||
- :py:class:`List <list>`\ [\ :py:class:`str`\ ]
|
||||
- free tag list
|
||||
|
||||
* - publishedDate
|
||||
- :py:class:`datetime <datetime.datetime>`
|
||||
- last publication date
|
||||
|
||||
* - type
|
||||
- :py:class:`str`
|
||||
- short description of medium type, e.g. *book*, *pdf* or *html* ...
|
||||
|
||||
* - authors
|
||||
- :py:class:`List <list>`\ [\ :py:class:`str`\ ]
|
||||
- list of authors of the work (authors with a "s")
|
||||
|
||||
* - editor
|
||||
- :py:class:`str`
|
||||
- list of editors of a book
|
||||
|
||||
* - publisher
|
||||
- :py:class:`str`
|
||||
- name of the publisher
|
||||
|
||||
* - journal
|
||||
- :py:class:`str`
|
||||
- name of the journal or magazine the article was
|
||||
published in
|
||||
|
||||
* - volume
|
||||
- :py:class:`str`
|
||||
- volume number
|
||||
|
||||
* - pages
|
||||
- :py:class:`str`
|
||||
- page range where the article is
|
||||
|
||||
* - number
|
||||
- :py:class:`str`
|
||||
- number of the report or the issue number for a journal article
|
||||
|
||||
* - doi
|
||||
- :py:class:`str`
|
||||
- DOI number (like ``10.1038/d41586-018-07848-2``)
|
||||
|
||||
* - issn
|
||||
- :py:class:`List <list>`\ [\ :py:class:`str`\ ]
|
||||
- ISSN number like ``1476-4687``
|
||||
|
||||
* - isbn
|
||||
- :py:class:`List <list>`\ [\ :py:class:`str`\ ]
|
||||
- ISBN number like ``9780201896831``
|
||||
|
||||
* - pdf_url
|
||||
- :py:class:`str`
|
||||
- URL to the full article, the PDF version
|
||||
|
||||
* - html_url
|
||||
- :py:class:`str`
|
||||
- URL to full article, HTML version
|
||||
|
|
|
@ -202,7 +202,7 @@ To debug services from filtron and morty analogous use:
|
|||
|
||||
Another point we have to notice is that the service (:ref:`SearXNG <searxng.sh>`
|
||||
runs under dedicated system user account with the same name (compare
|
||||
:ref:`create searxng user`). To get a shell from theses accounts, simply call:
|
||||
:ref:`create searxng user`). To get a shell from these accounts, simply call:
|
||||
|
||||
.. tabs::
|
||||
|
||||
|
@ -300,7 +300,7 @@ of the container:
|
|||
|
||||
Now we can develop as usual in the working tree of our desktop system. Every
|
||||
time the software was changed, you have to restart the SearXNG service (in the
|
||||
conatiner):
|
||||
container):
|
||||
|
||||
.. tabs::
|
||||
|
||||
|
@ -359,7 +359,7 @@ We build up a fully functional SearXNG suite in a archlinux container:
|
|||
$ sudo -H ./utils/lxc.sh install suite searxng-archlinux
|
||||
|
||||
To access HTTP from the desktop we installed nginx for the services inside the
|
||||
conatiner:
|
||||
container:
|
||||
|
||||
.. tabs::
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ generated and deployed at :docs:`github.io <.>`. For build prerequisites read
|
|||
:ref:`docs build`.
|
||||
|
||||
The source files of Searx's documentation are located at :origin:`docs`. Sphinx
|
||||
assumes source files to be encoded in UTF-8 by defaul. Run :ref:`make docs.live
|
||||
assumes source files to be encoded in UTF-8 by default. Run :ref:`make docs.live
|
||||
<make docs.live>` to build HTML while editing.
|
||||
|
||||
.. sidebar:: Further reading
|
||||
|
@ -227,13 +227,13 @@ To refer anchors use the `ref role`_ markup:
|
|||
|
||||
.. code:: reST
|
||||
|
||||
Visit chapter :ref:`reST anchor`. Or set hyperlink text manualy :ref:`foo
|
||||
Visit chapter :ref:`reST anchor`. Or set hyperlink text manually :ref:`foo
|
||||
bar <reST anchor>`.
|
||||
|
||||
.. admonition:: ``:ref:`` role
|
||||
:class: rst-example
|
||||
|
||||
Visist chapter :ref:`reST anchor`. Or set hyperlink text manualy :ref:`foo
|
||||
Visist chapter :ref:`reST anchor`. Or set hyperlink text manually :ref:`foo
|
||||
bar <reST anchor>`.
|
||||
|
||||
.. _reST ordinary ref:
|
||||
|
@ -494,8 +494,8 @@ Figures & Images
|
|||
is flexible. To get best results in the generated output format, install
|
||||
ImageMagick_ and Graphviz_.
|
||||
|
||||
Searx's sphinx setup includes: :ref:`linuxdoc:kfigure`. Scaleable here means;
|
||||
scaleable in sense of the build process. Normally in absence of a converter
|
||||
Searx's sphinx setup includes: :ref:`linuxdoc:kfigure`. Scalable here means;
|
||||
scalable in sense of the build process. Normally in absence of a converter
|
||||
tool, the build process will break. From the authors POV it’s annoying to care
|
||||
about the build process when handling with images, especially since he has no
|
||||
access to the build process. With :ref:`linuxdoc:kfigure` the build process
|
||||
|
@ -503,7 +503,7 @@ continues and scales output quality in dependence of installed image processors.
|
|||
|
||||
If you want to add an image, you should use the ``kernel-figure`` (inheritance
|
||||
of :dudir:`figure`) and ``kernel-image`` (inheritance of :dudir:`image`)
|
||||
directives. E.g. to insert a figure with a scaleable image format use SVG
|
||||
directives. E.g. to insert a figure with a scalable image format use SVG
|
||||
(:ref:`svg image example`):
|
||||
|
||||
.. code:: reST
|
||||
|
@ -1185,7 +1185,7 @@ and *targets* (e.g. a ref to :ref:`row 2 of table's body <row body 2>`).
|
|||
- cell 4.4
|
||||
|
||||
* - row 5
|
||||
- cell 5.1 with automatic span to rigth end
|
||||
- cell 5.1 with automatic span to right end
|
||||
|
||||
* - row 6
|
||||
- cell 6.1
|
||||
|
@ -1237,7 +1237,7 @@ and *targets* (e.g. a ref to :ref:`row 2 of table's body <row body 2>`).
|
|||
- cell 4.4
|
||||
|
||||
* - row 5
|
||||
- cell 5.1 with automatic span to rigth end
|
||||
- cell 5.1 with automatic span to right end
|
||||
|
||||
* - row 6
|
||||
- cell 6.1
|
||||
|
|
|
@ -93,14 +93,14 @@ Parameters
|
|||
|
||||
:default:
|
||||
``Hash_plugin``, ``Search_on_category_select``,
|
||||
``Self_Informations``, ``Tracker_URL_remover``,
|
||||
``Self_Information``, ``Tracker_URL_remover``,
|
||||
``Ahmia_blacklist``
|
||||
|
||||
:values:
|
||||
.. enabled by default
|
||||
|
||||
``Hash_plugin``, ``Search_on_category_select``,
|
||||
``Self_Informations``, ``Tracker_URL_remover``,
|
||||
``Self_Information``, ``Tracker_URL_remover``,
|
||||
``Ahmia_blacklist``,
|
||||
|
||||
.. disabled by default
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
mock==4.0.3
|
||||
nose2[coverage_plugin]==0.12.0
|
||||
cov-core==1.15.0
|
||||
black==22.6.0
|
||||
pylint==2.14.5
|
||||
black==22.10.0
|
||||
pylint==2.15.3
|
||||
splinter==0.18.1
|
||||
selenium==4.4.0
|
||||
selenium==4.5.0
|
||||
twine==4.0.1
|
||||
Pallets-Sphinx-Themes==2.0.2
|
||||
Sphinx==5.1.1
|
||||
|
@ -14,9 +14,9 @@ sphinx-tabs==3.4.1
|
|||
sphinxcontrib-programoutput==0.17
|
||||
sphinx-autobuild==2021.3.14
|
||||
sphinx-notfound-page==0.8.3
|
||||
myst-parser==0.18.0
|
||||
myst-parser==0.18.1
|
||||
linuxdoc==20211220
|
||||
aiounittest==1.4.2
|
||||
yamllint==1.27.1
|
||||
yamllint==1.28.0
|
||||
wlc==1.13
|
||||
coloredlogs==15.0.1
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
certifi==2022.6.15
|
||||
certifi==2022.9.24
|
||||
babel==2.10.3
|
||||
flask-babel==2.0.0
|
||||
flask==2.2.2
|
||||
jinja2==3.1.2
|
||||
lxml==4.9.1
|
||||
pygments==2.12.0
|
||||
pygments==2.13.0
|
||||
python-dateutil==2.8.2
|
||||
pyyaml==6.0
|
||||
httpx[http2]==0.21.2
|
||||
Brotli==1.0.9
|
||||
uvloop==0.16.0
|
||||
uvloop==0.17.0
|
||||
httpx-socks[asyncio]==0.7.2
|
||||
langdetect==1.0.9
|
||||
setproctitle==1.3.2
|
||||
|
|
|
@ -152,6 +152,16 @@ def wikipedia(query, lang):
|
|||
return []
|
||||
|
||||
|
||||
def yandex(query, _lang):
|
||||
# yandex autocompleter
|
||||
url = "https://suggest.yandex.com/suggest-ff.cgi?{0}"
|
||||
|
||||
resp = loads(get(url.format(urlencode(dict(part=query)))).text)
|
||||
if len(resp) > 1:
|
||||
return resp[1]
|
||||
return []
|
||||
|
||||
|
||||
backends = {
|
||||
'dbpedia': dbpedia,
|
||||
'duckduckgo': duckduckgo,
|
||||
|
@ -162,6 +172,7 @@ backends = {
|
|||
'qwant': qwant,
|
||||
'wikipedia': wikipedia,
|
||||
'brave': brave,
|
||||
'yandex': yandex,
|
||||
}
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because one or more lines are too long
|
@ -1938,8 +1938,8 @@
|
|||
"name": "Bahasa Banjar"
|
||||
},
|
||||
"blk": {
|
||||
"english_name": "\u1015\u1021\u102d\u102f\u101d\u103a\u108f\u1018\u102c\u108f\u101e\u102c\u108f",
|
||||
"name": "Pa'O"
|
||||
"english_name": "Pa'O",
|
||||
"name": "\u1015\u1021\u102d\u102f\u101d\u103a\u108f\u1018\u102c\u108f\u101e\u102c\u108f"
|
||||
},
|
||||
"bm": {
|
||||
"english_name": "Bambara",
|
||||
|
@ -2661,6 +2661,10 @@
|
|||
"english_name": "Picard",
|
||||
"name": "Picard"
|
||||
},
|
||||
"pcm": {
|
||||
"english_name": "Nigerian Pidgin",
|
||||
"name": "Naij\u00e1"
|
||||
},
|
||||
"pdc": {
|
||||
"english_name": "Pennsylvania German",
|
||||
"name": "Deitsch"
|
||||
|
@ -3208,8 +3212,8 @@
|
|||
"name": "Bahasa Banjar"
|
||||
},
|
||||
"blk": {
|
||||
"english_name": "\u1015\u1021\u102d\u102f\u101d\u103a\u108f\u1018\u102c\u108f\u101e\u102c\u108f",
|
||||
"name": "Pa'O"
|
||||
"english_name": "Pa'O",
|
||||
"name": "\u1015\u1021\u102d\u102f\u101d\u103a\u108f\u1018\u102c\u108f\u101e\u102c\u108f"
|
||||
},
|
||||
"bm": {
|
||||
"english_name": "Bambara",
|
||||
|
@ -3931,6 +3935,10 @@
|
|||
"english_name": "Picard",
|
||||
"name": "Picard"
|
||||
},
|
||||
"pcm": {
|
||||
"english_name": "Nigerian Pidgin",
|
||||
"name": "Naij\u00e1"
|
||||
},
|
||||
"pdc": {
|
||||
"english_name": "Pennsylvania German",
|
||||
"name": "Deitsch"
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,8 +1,10 @@
|
|||
{
|
||||
"versions": [
|
||||
"103.0",
|
||||
"102.0.1",
|
||||
"102.0"
|
||||
"105.0.1",
|
||||
"105.0",
|
||||
"104.0.2",
|
||||
"104.0.1",
|
||||
"104.0"
|
||||
],
|
||||
"os": [
|
||||
"Windows NT 10.0; Win64; x64",
|
||||
|
|
|
@ -214,6 +214,20 @@
|
|||
"Q110742003": "dppx",
|
||||
"Q1131660": "st",
|
||||
"Q1137675": "cr",
|
||||
"Q114002440": "𒄀",
|
||||
"Q114002534": "𒃻",
|
||||
"Q114002568": "𒂠",
|
||||
"Q114002639": "𒈨𒊑",
|
||||
"Q114002688": "𒋗𒋛",
|
||||
"Q114002734": "𒊺",
|
||||
"Q114002796": "𒂆",
|
||||
"Q114002897": "𒊬",
|
||||
"Q114002930": "𒀺",
|
||||
"Q114002955": "𒀹𒃷",
|
||||
"Q114002974": "𒃷",
|
||||
"Q114002998": "𒁓",
|
||||
"Q114018694": "𒄥",
|
||||
"Q114018781": "𒁀𒌷𒂵",
|
||||
"Q1140444": "Zb",
|
||||
"Q1140577": "Yb",
|
||||
"Q1152074": "Pb",
|
||||
|
@ -255,6 +269,7 @@
|
|||
"Q1322380": "Ts",
|
||||
"Q1323615": "oz t",
|
||||
"Q132643": "kr",
|
||||
"Q133011": "Ls",
|
||||
"Q13400897": "g",
|
||||
"Q13479685": "mm H2O",
|
||||
"Q1351253": "Eib",
|
||||
|
@ -350,6 +365,7 @@
|
|||
"Q194339": "B$",
|
||||
"Q1970718": "mam",
|
||||
"Q1972579": "pdl",
|
||||
"Q19877834": "cd-ft",
|
||||
"Q199462": "LE",
|
||||
"Q199471": "Afs",
|
||||
"Q200323": "dm",
|
||||
|
|
77
searx/engines/9gag.py
Normal file
77
searx/engines/9gag.py
Normal file
|
@ -0,0 +1,77 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
# pylint: disable=invalid-name
|
||||
"""9GAG (social media)"""
|
||||
|
||||
from json import loads
|
||||
from datetime import datetime
|
||||
from urllib.parse import urlencode
|
||||
|
||||
about = {
|
||||
"website": 'https://9gag.com/',
|
||||
"wikidata_id": 'Q277421',
|
||||
"official_api_documentation": None,
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['social media']
|
||||
paging = True
|
||||
|
||||
search_url = "https://9gag.com/v1/search-posts?{query}"
|
||||
page_size = 10
|
||||
|
||||
|
||||
def request(query, params):
|
||||
query = urlencode({'query': query, 'c': (params['pageno'] - 1) * page_size})
|
||||
|
||||
params['url'] = search_url.format(query=query)
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
json_results = loads(resp.text)['data']
|
||||
|
||||
for result in json_results['posts']:
|
||||
result_type = result['type']
|
||||
|
||||
# Get the not cropped version of the thumbnail when the image height is not too important
|
||||
if result['images']['image700']['height'] > 400:
|
||||
thumbnail = result['images']['imageFbThumbnail']['url']
|
||||
else:
|
||||
thumbnail = result['images']['image700']['url']
|
||||
|
||||
if result_type == 'Photo':
|
||||
results.append(
|
||||
{
|
||||
'template': 'images.html',
|
||||
'url': result['url'],
|
||||
'title': result['title'],
|
||||
'content': result['description'],
|
||||
'publishedDate': datetime.utcfromtimestamp(result['creationTs']),
|
||||
'img_src': result['images']['image700']['url'],
|
||||
'thumbnail_src': thumbnail,
|
||||
}
|
||||
)
|
||||
elif result_type == 'Animated':
|
||||
results.append(
|
||||
{
|
||||
'template': 'videos.html',
|
||||
'url': result['url'],
|
||||
'title': result['title'],
|
||||
'content': result['description'],
|
||||
'publishedDate': datetime.utcfromtimestamp(result['creationTs']),
|
||||
'thumbnail': thumbnail,
|
||||
'iframe_src': result['images'].get('image460sv', {}).get('url'),
|
||||
}
|
||||
)
|
||||
|
||||
if 'tags' in json_results:
|
||||
for suggestion in json_results['tags']:
|
||||
results.append({'suggestion': suggestion['key']})
|
||||
|
||||
return results
|
|
@ -81,6 +81,7 @@ engine_shortcuts = {}
|
|||
|
||||
engine_shortcuts[engine.shortcut] = engine.name
|
||||
|
||||
:meta hide-value:
|
||||
"""
|
||||
|
||||
|
||||
|
@ -274,12 +275,12 @@ def is_engine_active(engine: Engine):
|
|||
|
||||
def register_engine(engine: Engine):
|
||||
if engine.name in engines:
|
||||
logger.error('Engine config error: ambigious name: {0}'.format(engine.name))
|
||||
logger.error('Engine config error: ambiguous name: {0}'.format(engine.name))
|
||||
sys.exit(1)
|
||||
engines[engine.name] = engine
|
||||
|
||||
if engine.shortcut in engine_shortcuts:
|
||||
logger.error('Engine config error: ambigious shortcut: {0}'.format(engine.shortcut))
|
||||
logger.error('Engine config error: ambiguous shortcut: {0}'.format(engine.shortcut))
|
||||
sys.exit(1)
|
||||
engine_shortcuts[engine.shortcut] = engine.name
|
||||
|
||||
|
|
57
searx/engines/apple_app_store.py
Normal file
57
searx/engines/apple_app_store.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""
|
||||
Apple App Store
|
||||
"""
|
||||
|
||||
from json import loads
|
||||
from urllib.parse import urlencode
|
||||
from dateutil.parser import parse
|
||||
|
||||
about = {
|
||||
"website": 'https://www.apple.com/app-store/',
|
||||
"wikidata_id": 'Q368215',
|
||||
"official_api_documentation": (
|
||||
'https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/'
|
||||
'iTuneSearchAPI/UnderstandingSearchResults.html#//apple_ref/doc/uid/TP40017632-CH8-SW1'
|
||||
),
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['files', 'apps']
|
||||
safesearch = True
|
||||
|
||||
search_url = 'https://itunes.apple.com/search?{query}'
|
||||
|
||||
|
||||
def request(query, params):
|
||||
explicit = "Yes"
|
||||
|
||||
if params['safesearch'] > 0:
|
||||
explicit = "No"
|
||||
|
||||
params['url'] = search_url.format(query=urlencode({'term': query, 'media': 'software', 'explicit': explicit}))
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
json_result = loads(resp.text)
|
||||
|
||||
for result in json_result['results']:
|
||||
results.append(
|
||||
{
|
||||
'url': result['trackViewUrl'],
|
||||
'title': result['trackName'],
|
||||
'content': result['description'],
|
||||
'img_src': result['artworkUrl100'],
|
||||
'publishedDate': parse(result['currentVersionReleaseDate']),
|
||||
'author': result['sellerName'],
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
113
searx/engines/apple_maps.py
Normal file
113
searx/engines/apple_maps.py
Normal file
|
@ -0,0 +1,113 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""Apple Maps"""
|
||||
|
||||
from json import loads
|
||||
from time import time
|
||||
from urllib.parse import urlencode
|
||||
|
||||
from searx.network import get as http_get
|
||||
from searx.engines.openstreetmap import get_key_label
|
||||
|
||||
about = {
|
||||
"website": 'https://www.apple.com/maps/',
|
||||
"wikidata_id": 'Q276101',
|
||||
"official_api_documentation": None,
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
token = {'value': '', 'last_updated': None}
|
||||
|
||||
categories = ['map']
|
||||
paging = False
|
||||
|
||||
search_url = "https://api.apple-mapkit.com/v1/search?{query}&mkjsVersion=5.72.53"
|
||||
|
||||
|
||||
def obtain_token():
|
||||
update_time = time() - (time() % 1800)
|
||||
try:
|
||||
# use duckduckgo's mapkit token
|
||||
token_response = http_get('https://duckduckgo.com/local.js?get_mk_token=1', timeout=2.0)
|
||||
actual_token = http_get(
|
||||
'https://cdn.apple-mapkit.com/ma/bootstrap?apiVersion=2&mkjsVersion=5.72.53&poi=1',
|
||||
timeout=2.0,
|
||||
headers={'Authorization': 'Bearer ' + token_response.text},
|
||||
)
|
||||
token['value'] = loads(actual_token.text)['authInfo']['access_token']
|
||||
token['last_updated'] = update_time
|
||||
# pylint: disable=bare-except
|
||||
except:
|
||||
pass
|
||||
return token
|
||||
|
||||
|
||||
def request(query, params):
|
||||
if time() - (token['last_updated'] or 0) > 1800:
|
||||
obtain_token()
|
||||
|
||||
params['url'] = search_url.format(query=urlencode({'q': query, 'lang': params['language']}))
|
||||
|
||||
params['headers'] = {'Authorization': 'Bearer ' + token['value']}
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
resp_json = loads(resp.text)
|
||||
|
||||
user_language = resp.search_params['language']
|
||||
|
||||
for result in resp_json['results']:
|
||||
boundingbox = None
|
||||
if 'displayMapRegion' in result:
|
||||
box = result['displayMapRegion']
|
||||
boundingbox = [box['southLat'], box['northLat'], box['westLng'], box['eastLng']]
|
||||
|
||||
links = []
|
||||
if 'telephone' in result:
|
||||
telephone = result['telephone']
|
||||
links.append(
|
||||
{
|
||||
'label': get_key_label('phone', user_language),
|
||||
'url': 'tel:' + telephone,
|
||||
'url_label': telephone,
|
||||
}
|
||||
)
|
||||
if result.get('urls'):
|
||||
url = result['urls'][0]
|
||||
links.append(
|
||||
{
|
||||
'label': get_key_label('website', user_language),
|
||||
'url': url,
|
||||
'url_label': url,
|
||||
}
|
||||
)
|
||||
|
||||
results.append(
|
||||
{
|
||||
'template': 'map.html',
|
||||
'type': result.get('poiCategory'),
|
||||
'title': result['name'],
|
||||
'links': links,
|
||||
'latitude': result['center']['lat'],
|
||||
'longitude': result['center']['lng'],
|
||||
'url': result['placecardUrl'],
|
||||
'boundingbox': boundingbox,
|
||||
'geojson': {'type': 'Point', 'coordinates': [result['center']['lng'], result['center']['lat']]},
|
||||
'address': {
|
||||
'name': result['name'],
|
||||
'house_number': result.get('subThoroughfare'),
|
||||
'road': result.get('thoroughfare'),
|
||||
'locality': result.get('locality'),
|
||||
'postcode': result.get('postCode'),
|
||||
'country': result.get('country'),
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -3,9 +3,10 @@
|
|||
ArXiV (Scientific preprints)
|
||||
"""
|
||||
|
||||
from lxml import html
|
||||
from lxml import etree
|
||||
from lxml.etree import XPath
|
||||
from datetime import datetime
|
||||
from searx.utils import eval_xpath_list, eval_xpath_getindex
|
||||
from searx.utils import eval_xpath, eval_xpath_list, eval_xpath_getindex
|
||||
|
||||
# about
|
||||
about = {
|
||||
|
@ -17,7 +18,7 @@ about = {
|
|||
"results": 'XML-RSS',
|
||||
}
|
||||
|
||||
categories = ['science']
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
|
||||
base_url = (
|
||||
|
@ -27,6 +28,23 @@ base_url = (
|
|||
# engine dependent config
|
||||
number_of_results = 10
|
||||
|
||||
# xpaths
|
||||
arxiv_namespaces = {
|
||||
"atom": "http://www.w3.org/2005/Atom",
|
||||
"arxiv": "http://arxiv.org/schemas/atom",
|
||||
}
|
||||
xpath_entry = XPath('//atom:entry', namespaces=arxiv_namespaces)
|
||||
xpath_title = XPath('.//atom:title', namespaces=arxiv_namespaces)
|
||||
xpath_id = XPath('.//atom:id', namespaces=arxiv_namespaces)
|
||||
xpath_summary = XPath('.//atom:summary', namespaces=arxiv_namespaces)
|
||||
xpath_author_name = XPath('.//atom:author/atom:name', namespaces=arxiv_namespaces)
|
||||
xpath_doi = XPath('.//arxiv:doi', namespaces=arxiv_namespaces)
|
||||
xpath_pdf = XPath('.//atom:link[@title="pdf"]', namespaces=arxiv_namespaces)
|
||||
xpath_published = XPath('.//atom:published', namespaces=arxiv_namespaces)
|
||||
xpath_journal = XPath('.//arxiv:journal_ref', namespaces=arxiv_namespaces)
|
||||
xpath_category = XPath('.//atom:category/@term', namespaces=arxiv_namespaces)
|
||||
xpath_comment = XPath('./arxiv:comment', namespaces=arxiv_namespaces)
|
||||
|
||||
|
||||
def request(query, params):
|
||||
# basic search
|
||||
|
@ -41,30 +59,50 @@ def request(query, params):
|
|||
|
||||
def response(resp):
|
||||
results = []
|
||||
dom = etree.fromstring(resp.content)
|
||||
for entry in eval_xpath_list(dom, xpath_entry):
|
||||
title = eval_xpath_getindex(entry, xpath_title, 0).text
|
||||
|
||||
dom = html.fromstring(resp.content)
|
||||
url = eval_xpath_getindex(entry, xpath_id, 0).text
|
||||
abstract = eval_xpath_getindex(entry, xpath_summary, 0).text
|
||||
|
||||
for entry in eval_xpath_list(dom, '//entry'):
|
||||
title = eval_xpath_getindex(entry, './/title', 0).text
|
||||
authors = [author.text for author in eval_xpath_list(entry, xpath_author_name)]
|
||||
|
||||
url = eval_xpath_getindex(entry, './/id', 0).text
|
||||
# doi
|
||||
doi_element = eval_xpath_getindex(entry, xpath_doi, 0, default=None)
|
||||
doi = None if doi_element is None else doi_element.text
|
||||
|
||||
content_string = '{doi_content}{abstract_content}'
|
||||
# pdf
|
||||
pdf_element = eval_xpath_getindex(entry, xpath_pdf, 0, default=None)
|
||||
pdf_url = None if pdf_element is None else pdf_element.attrib.get('href')
|
||||
|
||||
abstract = eval_xpath_getindex(entry, './/summary', 0).text
|
||||
# journal
|
||||
journal_element = eval_xpath_getindex(entry, xpath_journal, 0, default=None)
|
||||
journal = None if journal_element is None else journal_element.text
|
||||
|
||||
# If a doi is available, add it to the snipppet
|
||||
doi_element = eval_xpath_getindex(entry, './/link[@title="doi"]', 0, default=None)
|
||||
doi_content = doi_element.text if doi_element is not None else ''
|
||||
content = content_string.format(doi_content=doi_content, abstract_content=abstract)
|
||||
# tags
|
||||
tag_elements = eval_xpath(entry, xpath_category)
|
||||
tags = [str(tag) for tag in tag_elements]
|
||||
|
||||
if len(content) > 300:
|
||||
content = content[0:300] + "..."
|
||||
# TODO: center snippet on query term
|
||||
# comments
|
||||
comments_elements = eval_xpath_getindex(entry, xpath_comment, 0, default=None)
|
||||
comments = None if comments_elements is None else comments_elements.text
|
||||
|
||||
publishedDate = datetime.strptime(eval_xpath_getindex(entry, './/published', 0).text, '%Y-%m-%dT%H:%M:%SZ')
|
||||
publishedDate = datetime.strptime(eval_xpath_getindex(entry, xpath_published, 0).text, '%Y-%m-%dT%H:%M:%SZ')
|
||||
|
||||
res_dict = {'url': url, 'title': title, 'publishedDate': publishedDate, 'content': content}
|
||||
res_dict = {
|
||||
'template': 'paper.html',
|
||||
'url': url,
|
||||
'title': title,
|
||||
'publishedDate': publishedDate,
|
||||
'content': abstract,
|
||||
'doi': doi,
|
||||
'authors': authors,
|
||||
'journal': journal,
|
||||
'tags': tags,
|
||||
'comments': comments,
|
||||
'pdf_url': pdf_url,
|
||||
}
|
||||
|
||||
results.append(res_dict)
|
||||
|
||||
|
|
|
@ -80,7 +80,7 @@ def response(resp):
|
|||
|
||||
dom = html.fromstring(resp.text)
|
||||
|
||||
for result in dom.xpath('//div[@class="dg_u"]'):
|
||||
for result in dom.xpath('//div[@class="dg_u"]/div[contains(@class, "mc_vtvc")]'):
|
||||
metadata = loads(result.xpath('.//div[@class="vrhdata"]/@vrhm')[0])
|
||||
info = ' - '.join(result.xpath('.//div[@class="mc_vtvc_meta_block"]//span/text()')).strip()
|
||||
content = '{0} - {1}'.format(metadata['du'], info)
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
|
||||
"""
|
||||
|
||||
from json import loads
|
||||
from datetime import datetime
|
||||
from urllib.parse import urlencode
|
||||
|
||||
|
@ -19,7 +18,7 @@ about = {
|
|||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['science']
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
nb_per_page = 10
|
||||
|
||||
|
@ -42,39 +41,75 @@ def request(query, params):
|
|||
)
|
||||
params['url'] = base_url + search_path
|
||||
|
||||
logger.debug("query_url --> %s", params['url'])
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
json_data = loads(resp.text)
|
||||
json_data = resp.json()
|
||||
|
||||
for result in json_data['data']:
|
||||
|
||||
source = result['_source']
|
||||
url = None
|
||||
if source.get('urls'):
|
||||
url = source['urls'][0].replace('http://', 'https://', 1)
|
||||
|
||||
if url is None and source.get('doi'):
|
||||
# use the DOI reference
|
||||
url = 'https://doi.org/' + source['doi']
|
||||
|
||||
if url is None and source.get('downloadUrl'):
|
||||
# use the downloadUrl
|
||||
url = source['downloadUrl']
|
||||
|
||||
if url is None and source.get('identifiers'):
|
||||
# try to find an ark id, see
|
||||
# https://www.wikidata.org/wiki/Property:P8091
|
||||
# and https://en.wikipedia.org/wiki/Archival_Resource_Key
|
||||
arkids = [
|
||||
identifier[5:] # 5 is the length of "ark:/"
|
||||
for identifier in source.get('identifiers')
|
||||
if isinstance(identifier, str) and identifier.startswith('ark:/')
|
||||
]
|
||||
if len(arkids) > 0:
|
||||
url = 'https://n2t.net/' + arkids[0]
|
||||
|
||||
if url is None:
|
||||
continue
|
||||
|
||||
publishedDate = None
|
||||
time = source['publishedDate'] or source['depositedDate']
|
||||
if time:
|
||||
date = datetime.fromtimestamp(time / 1000)
|
||||
else:
|
||||
date = None
|
||||
publishedDate = datetime.fromtimestamp(time / 1000)
|
||||
|
||||
metadata = []
|
||||
if source['publisher'] and len(source['publisher']) > 3:
|
||||
metadata.append(source['publisher'])
|
||||
if source['topics']:
|
||||
metadata.append(source['topics'][0])
|
||||
if source['doi']:
|
||||
metadata.append(source['doi'])
|
||||
metadata = ' / '.join(metadata)
|
||||
# sometimes the 'title' is None / filter None values
|
||||
journals = [j['title'] for j in (source.get('journals') or []) if j['title']]
|
||||
|
||||
publisher = source['publisher']
|
||||
if publisher:
|
||||
publisher = source['publisher'].strip("'")
|
||||
|
||||
results.append(
|
||||
{
|
||||
'url': source['urls'][0].replace('http://', 'https://', 1),
|
||||
'template': 'paper.html',
|
||||
'title': source['title'],
|
||||
'content': source['description'],
|
||||
'publishedDate': date,
|
||||
'metadata': metadata,
|
||||
'url': url,
|
||||
'content': source['description'] or '',
|
||||
# 'comments': '',
|
||||
'tags': source['topics'],
|
||||
'publishedDate': publishedDate,
|
||||
'type': (source['types'] or [None])[0],
|
||||
'authors': source['authors'],
|
||||
'editor': ', '.join(source['contributors'] or []),
|
||||
'publisher': publisher,
|
||||
'journal': ', '.join(journals),
|
||||
# 'volume': '',
|
||||
# 'pages' : '',
|
||||
# 'number': '',
|
||||
'doi': source['doi'],
|
||||
'issn': [x for x in [source.get('issn')] if x],
|
||||
'isbn': [x for x in [source.get('isbn')] if x], # exists in the rawRecordXml
|
||||
'pdf_url': source.get('repositoryDocument', {}).get('pdfOrigin'),
|
||||
}
|
||||
)
|
||||
|
||||
|
|
59
searx/engines/crossref.py
Normal file
59
searx/engines/crossref.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""Semantic Scholar (Science)
|
||||
"""
|
||||
|
||||
from urllib.parse import urlencode
|
||||
from searx.utils import html_to_text
|
||||
|
||||
about = {
|
||||
"website": 'https://www.crossref.org/',
|
||||
"wikidata_id": 'Q5188229',
|
||||
"official_api_documentation": 'https://github.com/CrossRef/rest-api-doc',
|
||||
"use_official_api": False,
|
||||
"require_api_key": False,
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
search_url = 'https://api.crossref.org/works'
|
||||
|
||||
|
||||
def request(query, params):
|
||||
params['url'] = search_url + '?' + urlencode(dict(query=query, offset=20 * (params['pageno'] - 1)))
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
res = resp.json()
|
||||
results = []
|
||||
for record in res['message']['items']:
|
||||
record_type = record['type']
|
||||
if record_type == 'book-chapter':
|
||||
title = record['container-title'][0]
|
||||
if record['title'][0].lower().strip() != title.lower().strip():
|
||||
title = html_to_text(title) + ' (' + html_to_text(record['title'][0]) + ')'
|
||||
journal = None
|
||||
else:
|
||||
title = html_to_text(record['title'][0])
|
||||
journal = record.get('container-title', [None])[0]
|
||||
url = record.get('resource', {}).get('primary', {}).get('URL') or record['URL']
|
||||
authors = [author.get('given', '') + ' ' + author.get('family', '') for author in record.get('author', [])]
|
||||
isbn = record.get('isbn') or [i['value'] for i in record.get('isbn-type', [])]
|
||||
results.append(
|
||||
{
|
||||
'template': 'paper.html',
|
||||
'url': url,
|
||||
'title': title,
|
||||
'journal': journal,
|
||||
'volume': record.get('volume'),
|
||||
'type': record['type'],
|
||||
'content': html_to_text(record.get('abstract', '')),
|
||||
'publisher': record.get('publisher'),
|
||||
'authors': authors,
|
||||
'doi': record['DOI'],
|
||||
'isbn': isbn,
|
||||
}
|
||||
)
|
||||
return results
|
62
searx/engines/deepl.py
Normal file
62
searx/engines/deepl.py
Normal file
|
@ -0,0 +1,62 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""Deepl translation engine"""
|
||||
|
||||
from json import loads
|
||||
|
||||
about = {
|
||||
"website": 'https://deepl.com',
|
||||
"wikidata_id": 'Q43968444',
|
||||
"official_api_documentation": 'https://www.deepl.com/docs-api',
|
||||
"use_official_api": True,
|
||||
"require_api_key": True,
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
engine_type = 'online_dictionary'
|
||||
categories = ['general']
|
||||
|
||||
url = 'https://api-free.deepl.com/v2/translate'
|
||||
api_key = None
|
||||
|
||||
|
||||
def request(_query, params):
|
||||
'''pre-request callback
|
||||
|
||||
params<dict>:
|
||||
|
||||
- ``method`` : POST/GET
|
||||
- ``headers``: {}
|
||||
- ``data``: {} # if method == POST
|
||||
- ``url``: ''
|
||||
- ``category``: 'search category'
|
||||
- ``pageno``: 1 # number of the requested page
|
||||
'''
|
||||
|
||||
params['url'] = url
|
||||
params['method'] = 'POST'
|
||||
params['data'] = {'auth_key': api_key, 'text': params['query'], 'target_lang': params['to_lang'][1]}
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
result = loads(resp.text)
|
||||
translations = result['translations']
|
||||
|
||||
infobox = "<dl>"
|
||||
|
||||
for translation in translations:
|
||||
infobox += f"<dd>{translation['text']}</dd>"
|
||||
|
||||
infobox += "</dl>"
|
||||
|
||||
results.append(
|
||||
{
|
||||
'infobox': 'Deepl',
|
||||
'content': infobox,
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -79,7 +79,7 @@ def response(resp):
|
|||
# * book / performing art / film / television / media franchise / concert tour / playwright
|
||||
# * prepared food
|
||||
# * website / software / os / programming language / file format / software engineer
|
||||
# * compagny
|
||||
# * company
|
||||
|
||||
content = ''
|
||||
heading = search_res.get('Heading', '')
|
||||
|
|
136
searx/engines/duckduckgo_weather.py
Normal file
136
searx/engines/duckduckgo_weather.py
Normal file
|
@ -0,0 +1,136 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""DuckDuckGo Weather"""
|
||||
|
||||
from json import loads
|
||||
from urllib.parse import quote
|
||||
|
||||
from datetime import datetime
|
||||
from flask_babel import gettext
|
||||
|
||||
about = {
|
||||
"website": 'https://duckduckgo.com/',
|
||||
"wikidata_id": 'Q12805',
|
||||
"official_api_documentation": None,
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": "JSON",
|
||||
}
|
||||
|
||||
categories = ["others"]
|
||||
|
||||
url = "https://duckduckgo.com/js/spice/forecast/{query}/{lang}"
|
||||
|
||||
|
||||
def generate_condition_table(condition):
|
||||
res = ""
|
||||
|
||||
res += f"<tr><td><b>{gettext('Condition')}</b></td>" f"<td><b>{condition['summary']}</b></td></tr>"
|
||||
|
||||
res += (
|
||||
f"<tr><td><b>{gettext('Temperature')}</b></td>"
|
||||
f"<td><b>{f_to_c(condition['temperature'])}°C / {condition['temperature']}°F</b></td></tr>"
|
||||
)
|
||||
|
||||
res += (
|
||||
f"<tr><td>{gettext('Feels like')}</td><td>{f_to_c(condition['apparentTemperature'])}°C / "
|
||||
f"{condition['apparentTemperature']}°F</td></tr>"
|
||||
)
|
||||
|
||||
res += (
|
||||
f"<tr><td>{gettext('Wind')}</td><td>{condition['windBearing']}° — "
|
||||
f"{'%.2f' % (condition['windSpeed'] * 1.6093440006147)} km/h / {condition['windSpeed']} mph</td></tr>"
|
||||
)
|
||||
|
||||
res += f"<tr><td>{gettext('Visibility')}</td><td>{condition['visibility']} km</td>"
|
||||
|
||||
res += f"<tr><td>{gettext('Humidity')}</td><td>{condition['humidity'] * 100}%</td></tr>"
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def generate_day_table(day):
|
||||
res = ""
|
||||
|
||||
res += (
|
||||
f"<tr><td>{gettext('Min temp.')}</td><td>{f_to_c(day['temperatureLow'])}°C / "
|
||||
f"{day['temperatureLow']}°F</td></tr>"
|
||||
)
|
||||
res += (
|
||||
f"<tr><td>{gettext('Max temp.')}</td><td>{f_to_c(day['temperatureHigh'])}°C / "
|
||||
f"{day['temperatureHigh']}°F</td></tr>"
|
||||
)
|
||||
res += f"<tr><td>{gettext('UV index')}</td><td>{day['uvIndex']}</td></tr>"
|
||||
res += (
|
||||
f"<tr><td>{gettext('Sunrise')}</td><td>{datetime.fromtimestamp(day['sunriseTime']).strftime('%H:%M')}</td></tr>"
|
||||
)
|
||||
res += (
|
||||
f"<tr><td>{gettext('Sunset')}</td><td>{datetime.fromtimestamp(day['sunsetTime']).strftime('%H:%M')}</td></tr>"
|
||||
)
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def request(query, params):
|
||||
params["url"] = url.format(query=quote(query), lang=params['language'].split('-')[0])
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def f_to_c(temperature):
|
||||
return "%.2f" % ((temperature - 32) / 1.8)
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
if resp.text.strip() == "ddg_spice_forecast();":
|
||||
return []
|
||||
|
||||
result = loads(resp.text[resp.text.find('\n') + 1 : resp.text.rfind('\n') - 2])
|
||||
|
||||
current = result["currently"]
|
||||
|
||||
title = result['flags']['ddg-location']
|
||||
|
||||
infobox = f"<h3>{gettext('Current condition')}</h3><table><tbody>"
|
||||
|
||||
infobox += generate_condition_table(current)
|
||||
|
||||
infobox += "</tbody></table>"
|
||||
|
||||
last_date = None
|
||||
|
||||
for time in result['hourly']['data']:
|
||||
current_time = datetime.fromtimestamp(time['time'])
|
||||
|
||||
if last_date != current_time.date():
|
||||
if last_date is not None:
|
||||
infobox += "</tbody></table>"
|
||||
|
||||
infobox += f"<h3>{current_time.strftime('%Y-%m-%d')}</h3>"
|
||||
|
||||
infobox += "<table><tbody>"
|
||||
|
||||
for day in result['daily']['data']:
|
||||
if datetime.fromtimestamp(day['time']).date() == current_time.date():
|
||||
infobox += generate_day_table(day)
|
||||
|
||||
infobox += "</tbody></table><table><tbody>"
|
||||
|
||||
last_date = current_time.date()
|
||||
|
||||
infobox += f"<tr><td rowspan=\"7\"><b>{current_time.strftime('%H:%M')}</b></td></tr>"
|
||||
|
||||
infobox += generate_condition_table(time)
|
||||
|
||||
infobox += "</tbody></table>"
|
||||
|
||||
results.append(
|
||||
{
|
||||
"infobox": title,
|
||||
"content": infobox,
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -7,6 +7,7 @@ import re
|
|||
from urllib.parse import quote, urljoin
|
||||
from lxml import html
|
||||
from searx.utils import extract_text, eval_xpath, eval_xpath_list, eval_xpath_getindex
|
||||
from searx.network import raise_for_httperror
|
||||
|
||||
# about
|
||||
about = {
|
||||
|
@ -47,6 +48,7 @@ def request(query, params):
|
|||
# after the last page of results, spelling corrections are returned after a HTTP redirect
|
||||
# whatever the page number is
|
||||
params['soft_max_redirects'] = 1
|
||||
params['raise_for_httperror'] = False
|
||||
return params
|
||||
|
||||
|
||||
|
@ -56,6 +58,11 @@ def response(resp):
|
|||
'''
|
||||
results = []
|
||||
|
||||
if resp.status_code == 404:
|
||||
return results
|
||||
|
||||
raise_for_httperror(resp)
|
||||
|
||||
dom = html.fromstring(resp.text)
|
||||
|
||||
number_of_results_element = eval_xpath_getindex(
|
||||
|
|
|
@ -40,7 +40,7 @@ def response(resp):
|
|||
|
||||
search_res = loads(resp.text)
|
||||
|
||||
# check if items are recieved
|
||||
# check if items are received
|
||||
if 'items' not in search_res:
|
||||
return []
|
||||
|
||||
|
|
|
@ -326,14 +326,14 @@ def response(resp):
|
|||
|
||||
# google *sections*
|
||||
if extract_text(eval_xpath(result, g_section_with_header)):
|
||||
logger.debug("ingoring <g-section-with-header>")
|
||||
logger.debug("ignoring <g-section-with-header>")
|
||||
continue
|
||||
|
||||
try:
|
||||
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 item from the result_xpath list: missing title')
|
||||
logger.debug('ignoring item from the result_xpath list: missing title')
|
||||
continue
|
||||
title = extract_text(title_tag)
|
||||
url = eval_xpath_getindex(result, href_xpath, 0, None)
|
||||
|
@ -341,7 +341,7 @@ def response(resp):
|
|||
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)
|
||||
logger.debug('ignoring item from the result_xpath list: missing content of title "%s"', title)
|
||||
continue
|
||||
|
||||
logger.debug('add link to results: %s', title)
|
||||
|
|
|
@ -1,28 +1,20 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""This is the implementation of the google images engine.
|
||||
"""This is the implementation of the google images engine using the google
|
||||
internal API used the Google Go Android app.
|
||||
|
||||
.. admonition:: Content-Security-Policy (CSP)
|
||||
This internal API offer results in
|
||||
|
||||
This engine needs to allow images from the `data URLs`_ (prefixed with the
|
||||
``data:`` scheme)::
|
||||
- JSON (_fmt:json)
|
||||
- Protobuf (_fmt:pb)
|
||||
- Protobuf compressed? (_fmt:pc)
|
||||
- HTML (_fmt:html)
|
||||
- Protobuf encoded in JSON (_fmt:jspb).
|
||||
|
||||
Header set Content-Security-Policy "img-src 'self' data: ;"
|
||||
|
||||
.. _data URLs:
|
||||
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
|
||||
"""
|
||||
|
||||
import re
|
||||
from urllib.parse import urlencode, unquote
|
||||
from lxml import html
|
||||
|
||||
from searx.utils import (
|
||||
eval_xpath,
|
||||
eval_xpath_list,
|
||||
eval_xpath_getindex,
|
||||
extract_text,
|
||||
)
|
||||
from urllib.parse import urlencode
|
||||
from json import loads
|
||||
|
||||
from searx.engines.google import (
|
||||
get_lang_info,
|
||||
|
@ -42,12 +34,12 @@ about = {
|
|||
"official_api_documentation": 'https://developers.google.com/custom-search',
|
||||
"use_official_api": False,
|
||||
"require_api_key": False,
|
||||
"results": 'HTML',
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
# engine dependent config
|
||||
categories = ['images', 'web']
|
||||
paging = False
|
||||
paging = True
|
||||
use_locale_domain = True
|
||||
time_range_support = True
|
||||
safesearch = True
|
||||
|
@ -56,74 +48,8 @@ send_accept_language_header = True
|
|||
filter_mapping = {0: 'images', 1: 'active', 2: 'active'}
|
||||
|
||||
|
||||
def scrap_out_thumbs(dom):
|
||||
"""Scrap out thumbnail data from <script> tags."""
|
||||
ret_val = {}
|
||||
for script in eval_xpath(dom, '//script[contains(., "_setImgSrc(")]'):
|
||||
_script = script.text
|
||||
# _setImgSrc('0','data:image\/jpeg;base64,\/9j\/4AAQSkZJR ....');
|
||||
_thumb_no, _img_data = _script[len("_setImgSrc(") : -2].split(",", 1)
|
||||
_thumb_no = _thumb_no.replace("'", "")
|
||||
_img_data = _img_data.replace("'", "")
|
||||
_img_data = _img_data.replace(r"\/", r"/")
|
||||
ret_val[_thumb_no] = _img_data.replace(r"\x3d", "=")
|
||||
return ret_val
|
||||
|
||||
|
||||
# [0, "-H96xjSoW5DsgM", ["https://encrypted-tbn0.gstatic.com/images?q...", 155, 324]
|
||||
# , ["https://assets.cdn.moviepilot.de/files/d3bf..", 576, 1200],
|
||||
_RE_JS_IMAGE_URL = re.compile(
|
||||
r'"'
|
||||
r'([^"]*)' # -H96xjSoW5DsgM
|
||||
r'",\s*\["'
|
||||
r'https://[^\.]*\.gstatic.com/images[^"]*' # https://encrypted-tbn0.gstatic.com/images?q...
|
||||
r'[^\[]*\["'
|
||||
r'(https?://[^"]*)' # https://assets.cdn.moviepilot.de/files/d3bf...
|
||||
)
|
||||
|
||||
|
||||
def parse_urls_img_from_js(dom):
|
||||
|
||||
# There are two HTML script tags starting with a JS function
|
||||
# 'AF_initDataCallback(...)'
|
||||
#
|
||||
# <script nonce="zscm+Ab/JzBk1Qd4GY6wGQ">
|
||||
# AF_initDataCallback({key: 'ds:0', hash: '1', data:[], sideChannel: {}});
|
||||
# </script>
|
||||
# <script nonce="zscm+Ab/JzBk1Qd4GY6wGQ">
|
||||
# AF_initDataCallback({key: 'ds:1', hash: '2', data:[null,[[["online_chips",[["the big",
|
||||
# ["https://encrypted-tbn0.gstatic.com/images?q...",null,null,true,[null,0],f
|
||||
# ...
|
||||
# </script>
|
||||
#
|
||||
# The second script contains the URLs of the images.
|
||||
|
||||
# The AF_initDataCallback(..) is called with very large dictionary, that
|
||||
# looks like JSON but it is not JSON since it contains JS variables and
|
||||
# constants like 'null' (we can't use a JSON parser for).
|
||||
#
|
||||
# The alternative is to parse the entire <script> and find all image URLs by
|
||||
# a regular expression.
|
||||
|
||||
img_src_script = eval_xpath_getindex(dom, '//script[contains(., "AF_initDataCallback({key: ")]', 1).text
|
||||
data_id_to_img_url = {}
|
||||
for data_id, url in _RE_JS_IMAGE_URL.findall(img_src_script):
|
||||
data_id_to_img_url[data_id] = url
|
||||
return data_id_to_img_url
|
||||
|
||||
|
||||
def get_img_url_by_data_id(data_id_to_img_url, img_node):
|
||||
"""Get full image URL by @data-id from parent element."""
|
||||
|
||||
data_id = eval_xpath_getindex(img_node, '../../../@data-id', 0)
|
||||
img_url = data_id_to_img_url.get(data_id, '')
|
||||
img_url = unquote(img_url.replace(r'\u00', r'%'))
|
||||
|
||||
return img_url
|
||||
|
||||
|
||||
def request(query, params):
|
||||
"""Google-Video search request"""
|
||||
"""Google-Image search request"""
|
||||
|
||||
lang_info = get_lang_info(params, supported_languages, language_aliases, False)
|
||||
|
||||
|
@ -132,7 +58,17 @@ def request(query, params):
|
|||
+ lang_info['subdomain']
|
||||
+ '/search'
|
||||
+ "?"
|
||||
+ urlencode({'q': query, 'tbm': "isch", **lang_info['params'], 'ie': "utf8", 'oe': "utf8", 'num': 30})
|
||||
+ urlencode(
|
||||
{
|
||||
'q': query,
|
||||
'tbm': "isch",
|
||||
**lang_info['params'],
|
||||
'ie': "utf8",
|
||||
'oe': "utf8",
|
||||
'asearch': 'isch',
|
||||
'async': '_fmt:json,p:1,ijn:' + str(params['pageno']),
|
||||
}
|
||||
)
|
||||
)
|
||||
|
||||
if params['time_range'] in time_range_dict:
|
||||
|
@ -141,9 +77,9 @@ def request(query, params):
|
|||
query_url += '&' + urlencode({'safe': filter_mapping[params['safesearch']]})
|
||||
params['url'] = query_url
|
||||
|
||||
params['cookies']['CONSENT'] = "YES+"
|
||||
params['headers'].update(lang_info['headers'])
|
||||
params['headers']['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
|
||||
params['headers']['User-Agent'] = 'NSTN/3.60.474802233.release Dalvik/2.1.0 (Linux; U; Android 12; US) gzip'
|
||||
params['headers']['Accept'] = '*/*'
|
||||
return params
|
||||
|
||||
|
||||
|
@ -153,78 +89,34 @@ def response(resp):
|
|||
|
||||
detect_google_sorry(resp)
|
||||
|
||||
# convert the text to dom
|
||||
dom = html.fromstring(resp.text)
|
||||
img_bas64_map = scrap_out_thumbs(dom)
|
||||
data_id_to_img_url = parse_urls_img_from_js(dom)
|
||||
json_start = resp.text.find('{"ischj":')
|
||||
json_data = loads(resp.text[json_start:])
|
||||
|
||||
# parse results
|
||||
#
|
||||
# root element::
|
||||
# <div id="islmp" ..>
|
||||
# result div per image::
|
||||
# <div jsmodel="tTXmib"> / <div jsaction="..." data-id="..."
|
||||
# The data-id matches to a item in a json-data structure in::
|
||||
# <script nonce="I+vqelcy/01CKiBJi5Z1Ow">AF_initDataCallback({key: 'ds:1', ... data:function(){return [ ...
|
||||
# In this structure the link to the origin PNG, JPG or whatever is given
|
||||
# first link per image-div contains a <img> with the data-iid for bas64 encoded image data::
|
||||
# <img class="rg_i Q4LuWd" data-iid="0"
|
||||
# second link per image-div is the target link::
|
||||
# <a class="VFACy kGQAp" href="https://en.wikipedia.org/wiki/The_Sacrament_of_the_Last_Supper">
|
||||
# the second link also contains two div tags with the *description* and *publisher*::
|
||||
# <div class="WGvvNb">The Sacrament of the Last Supper ...</div>
|
||||
# <div class="fxgdke">en.wikipedia.org</div>
|
||||
for item in json_data["ischj"]["metadata"]:
|
||||
|
||||
root = eval_xpath(dom, '//div[@id="islmp"]')
|
||||
if not root:
|
||||
logger.error("did not find root element id='islmp'")
|
||||
return results
|
||||
result_item = {
|
||||
'url': item["result"]["referrer_url"],
|
||||
'title': item["result"]["page_title"],
|
||||
'content': item["text_in_grid"]["snippet"],
|
||||
'source': item["result"]["site_title"],
|
||||
'img_format': f'{item["original_image"]["width"]} x {item["original_image"]["height"]}',
|
||||
'img_src': item["original_image"]["url"],
|
||||
'thumbnail_src': item["thumbnail"]["url"],
|
||||
'template': 'images.html',
|
||||
}
|
||||
|
||||
root = root[0]
|
||||
for img_node in eval_xpath_list(root, './/img[contains(@class, "rg_i")]'):
|
||||
author = item["result"].get('iptc', {}).get('creator')
|
||||
if author:
|
||||
result_item['author'] = ', '.join(author)
|
||||
|
||||
img_alt = eval_xpath_getindex(img_node, '@alt', 0)
|
||||
copyright_notice = item["result"].get('iptc', {}).get('copyright_notice')
|
||||
if copyright_notice:
|
||||
result_item['source'] += ' / ' + copyright_notice
|
||||
|
||||
img_base64_id = eval_xpath(img_node, '@data-iid')
|
||||
if img_base64_id:
|
||||
img_base64_id = img_base64_id[0]
|
||||
thumbnail_src = img_bas64_map[img_base64_id]
|
||||
else:
|
||||
thumbnail_src = eval_xpath(img_node, '@src')
|
||||
if not thumbnail_src:
|
||||
thumbnail_src = eval_xpath(img_node, '@data-src')
|
||||
if thumbnail_src:
|
||||
thumbnail_src = thumbnail_src[0]
|
||||
else:
|
||||
thumbnail_src = ''
|
||||
file_size = item.get('gsa', {}).get('file_size')
|
||||
if file_size:
|
||||
result_item['source'] += ' (%s)' % file_size
|
||||
|
||||
link_node = eval_xpath_getindex(img_node, '../../../a[2]', 0)
|
||||
url = eval_xpath_getindex(link_node, '@href', 0, None)
|
||||
if url is None:
|
||||
logger.error("missing @href in node: %s", html.tostring(link_node))
|
||||
continue
|
||||
|
||||
pub_nodes = eval_xpath(link_node, './div/div')
|
||||
pub_descr = img_alt
|
||||
pub_source = ''
|
||||
if pub_nodes:
|
||||
pub_descr = extract_text(pub_nodes[0])
|
||||
pub_source = extract_text(pub_nodes[1])
|
||||
|
||||
src_url = get_img_url_by_data_id(data_id_to_img_url, img_node)
|
||||
if not src_url:
|
||||
src_url = thumbnail_src
|
||||
|
||||
results.append(
|
||||
{
|
||||
'url': url,
|
||||
'title': img_alt,
|
||||
'content': pub_descr,
|
||||
'source': pub_source,
|
||||
'img_src': src_url,
|
||||
'thumbnail_src': thumbnail_src,
|
||||
'template': 'images.html',
|
||||
}
|
||||
)
|
||||
results.append(result_item)
|
||||
|
||||
return results
|
||||
|
|
|
@ -141,7 +141,7 @@ def response(resp):
|
|||
padding = (4 - (len(jslog) % 4)) * "="
|
||||
jslog = b64decode(jslog + padding)
|
||||
except binascii.Error:
|
||||
# URL cant be read, skip this result
|
||||
# URL can't be read, skip this result
|
||||
continue
|
||||
|
||||
# now we have : b'[null, ... null,"https://www.cnn.com/.../index.html"]'
|
||||
|
@ -150,24 +150,12 @@ def response(resp):
|
|||
# the first <h3> tag in the <article> contains the title of the link
|
||||
title = extract_text(eval_xpath(result, './article/h3[1]'))
|
||||
|
||||
# the first <div> tag in the <article> contains the content of the link
|
||||
content = extract_text(eval_xpath(result, './article/div[1]'))
|
||||
# The pub_date is mostly a string like 'yesertday', not a real
|
||||
# timezone date or time. Therefore we can't use publishedDate.
|
||||
pub_date = extract_text(eval_xpath(result, './article/div[1]/div[1]/time'))
|
||||
pub_origin = extract_text(eval_xpath(result, './article/div[1]/div[1]/a'))
|
||||
|
||||
# the second <div> tag contains origin publisher and the publishing date
|
||||
|
||||
pub_date = extract_text(eval_xpath(result, './article/div[2]//time'))
|
||||
pub_origin = extract_text(eval_xpath(result, './article/div[2]//a'))
|
||||
|
||||
pub_info = []
|
||||
if pub_origin:
|
||||
pub_info.append(pub_origin)
|
||||
if pub_date:
|
||||
# The pub_date is mostly a string like 'yesertday', not a real
|
||||
# timezone date or time. Therefore we can't use publishedDate.
|
||||
pub_info.append(pub_date)
|
||||
pub_info = ', '.join(pub_info)
|
||||
if pub_info:
|
||||
content = pub_info + ': ' + content
|
||||
content = ' / '.join([x for x in [pub_origin, pub_date] if x])
|
||||
|
||||
# The image URL is located in a preceding sibling <img> tag, e.g.:
|
||||
# "https://lh3.googleusercontent.com/DjhQh7DMszk.....z=-p-h100-w100"
|
||||
|
|
|
@ -13,10 +13,12 @@ Definitions`_.
|
|||
|
||||
from urllib.parse import urlencode
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
from lxml import html
|
||||
|
||||
from searx.utils import (
|
||||
eval_xpath,
|
||||
eval_xpath_getindex,
|
||||
eval_xpath_list,
|
||||
extract_text,
|
||||
)
|
||||
|
@ -46,7 +48,7 @@ about = {
|
|||
}
|
||||
|
||||
# engine dependent config
|
||||
categories = ['science']
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
language_support = True
|
||||
use_locale_domain = True
|
||||
|
@ -99,7 +101,43 @@ def request(query, params):
|
|||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
def parse_gs_a(text: Optional[str]):
|
||||
"""Parse the text written in green.
|
||||
|
||||
Possible formats:
|
||||
* "{authors} - {journal}, {year} - {publisher}"
|
||||
* "{authors} - {year} - {publisher}"
|
||||
* "{authors} - {publisher}"
|
||||
"""
|
||||
if text is None or text == "":
|
||||
return None, None, None, None
|
||||
|
||||
s_text = text.split(' - ')
|
||||
authors = s_text[0].split(', ')
|
||||
publisher = s_text[-1]
|
||||
if len(s_text) != 3:
|
||||
return authors, None, publisher, None
|
||||
|
||||
# the format is "{authors} - {journal}, {year} - {publisher}" or "{authors} - {year} - {publisher}"
|
||||
# get journal and year
|
||||
journal_year = s_text[1].split(', ')
|
||||
# journal is optional and may contains some coma
|
||||
if len(journal_year) > 1:
|
||||
journal = ', '.join(journal_year[0:-1])
|
||||
if journal == '…':
|
||||
journal = None
|
||||
else:
|
||||
journal = None
|
||||
# year
|
||||
year = journal_year[-1]
|
||||
try:
|
||||
publishedDate = datetime.strptime(year.strip(), '%Y')
|
||||
except ValueError:
|
||||
publishedDate = None
|
||||
return authors, journal, publisher, publishedDate
|
||||
|
||||
|
||||
def response(resp): # pylint: disable=too-many-locals
|
||||
"""Get response from google's search request"""
|
||||
results = []
|
||||
|
||||
|
@ -112,30 +150,53 @@ def response(resp):
|
|||
dom = html.fromstring(resp.text)
|
||||
|
||||
# parse results
|
||||
for result in eval_xpath_list(dom, '//div[@class="gs_ri"]'):
|
||||
for result in eval_xpath_list(dom, '//div[@data-cid]'):
|
||||
|
||||
title = extract_text(eval_xpath(result, './h3[1]//a'))
|
||||
title = extract_text(eval_xpath(result, './/h3[1]//a'))
|
||||
|
||||
if not title:
|
||||
# this is a [ZITATION] block
|
||||
continue
|
||||
|
||||
url = eval_xpath(result, './h3[1]//a/@href')[0]
|
||||
content = extract_text(eval_xpath(result, './div[@class="gs_rs"]')) or ''
|
||||
|
||||
pub_info = extract_text(eval_xpath(result, './div[@class="gs_a"]'))
|
||||
if pub_info:
|
||||
content += "[%s]" % pub_info
|
||||
|
||||
pub_type = extract_text(eval_xpath(result, './/span[@class="gs_ct1"]'))
|
||||
if pub_type:
|
||||
title = title + " " + pub_type
|
||||
pub_type = pub_type[1:-1].lower()
|
||||
|
||||
url = eval_xpath_getindex(result, './/h3[1]//a/@href', 0)
|
||||
content = extract_text(eval_xpath(result, './/div[@class="gs_rs"]'))
|
||||
authors, journal, publisher, publishedDate = parse_gs_a(
|
||||
extract_text(eval_xpath(result, './/div[@class="gs_a"]'))
|
||||
)
|
||||
if publisher in url:
|
||||
publisher = None
|
||||
|
||||
# cited by
|
||||
comments = extract_text(eval_xpath(result, './/div[@class="gs_fl"]/a[starts-with(@href,"/scholar?cites=")]'))
|
||||
|
||||
# link to the html or pdf document
|
||||
html_url = None
|
||||
pdf_url = None
|
||||
doc_url = eval_xpath_getindex(result, './/div[@class="gs_or_ggsm"]/a/@href', 0, default=None)
|
||||
doc_type = extract_text(eval_xpath(result, './/span[@class="gs_ctg2"]'))
|
||||
if doc_type == "[PDF]":
|
||||
pdf_url = doc_url
|
||||
else:
|
||||
html_url = doc_url
|
||||
|
||||
results.append(
|
||||
{
|
||||
'template': 'paper.html',
|
||||
'type': pub_type,
|
||||
'url': url,
|
||||
'title': title,
|
||||
'authors': authors,
|
||||
'publisher': publisher,
|
||||
'journal': journal,
|
||||
'publishedDate': publishedDate,
|
||||
'content': content,
|
||||
'comments': comments,
|
||||
'html_url': html_url,
|
||||
'pdf_url': pdf_url,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -150,7 +150,7 @@ def response(resp):
|
|||
|
||||
# ignore google *sections*
|
||||
if extract_text(eval_xpath(result, g_section_with_header)):
|
||||
logger.debug("ingoring <g-section-with-header>")
|
||||
logger.debug("ignoring <g-section-with-header>")
|
||||
continue
|
||||
|
||||
# ingnore articles without an image id / e.g. news articles
|
||||
|
|
|
@ -70,7 +70,7 @@ def response(resp):
|
|||
elif properties.get('osm_type') == 'R':
|
||||
osm_type = 'relation'
|
||||
else:
|
||||
# continue if invalide osm-type
|
||||
# continue if invalid osm-type
|
||||
continue
|
||||
|
||||
url = result_base_url.format(osm_type=osm_type, osm_id=properties.get('osm_id'))
|
||||
|
|
|
@ -3,11 +3,15 @@
|
|||
PubMed (Scholar publications)
|
||||
"""
|
||||
|
||||
from flask_babel import gettext
|
||||
from lxml import etree
|
||||
from datetime import datetime
|
||||
from urllib.parse import urlencode
|
||||
from searx.network import get
|
||||
from searx.utils import (
|
||||
eval_xpath_getindex,
|
||||
eval_xpath_list,
|
||||
extract_text,
|
||||
)
|
||||
|
||||
# about
|
||||
about = {
|
||||
|
@ -22,7 +26,7 @@ about = {
|
|||
"results": 'XML',
|
||||
}
|
||||
|
||||
categories = ['science']
|
||||
categories = ['science', 'scientific publications']
|
||||
|
||||
base_url = (
|
||||
'https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi' + '?db=pubmed&{query}&retstart={offset}&retmax={hits}'
|
||||
|
@ -63,46 +67,61 @@ def response(resp):
|
|||
|
||||
retrieve_url_encoded = pubmed_retrieve_api_url.format(**retrieve_notice_args)
|
||||
|
||||
search_results_xml = get(retrieve_url_encoded).content
|
||||
search_results = etree.XML(search_results_xml).xpath('//PubmedArticleSet/PubmedArticle/MedlineCitation')
|
||||
search_results_response = get(retrieve_url_encoded).content
|
||||
search_results = etree.XML(search_results_response)
|
||||
for entry in eval_xpath_list(search_results, '//PubmedArticle'):
|
||||
medline = eval_xpath_getindex(entry, './MedlineCitation', 0)
|
||||
|
||||
for entry in search_results:
|
||||
title = entry.xpath('.//Article/ArticleTitle')[0].text
|
||||
|
||||
pmid = entry.xpath('.//PMID')[0].text
|
||||
title = eval_xpath_getindex(medline, './/Article/ArticleTitle', 0).text
|
||||
pmid = eval_xpath_getindex(medline, './/PMID', 0).text
|
||||
url = pubmed_url + pmid
|
||||
content = extract_text(
|
||||
eval_xpath_getindex(medline, './/Abstract/AbstractText//text()', 0, default=None), allow_none=True
|
||||
)
|
||||
doi = extract_text(
|
||||
eval_xpath_getindex(medline, './/ELocationID[@EIdType="doi"]/text()', 0, default=None), allow_none=True
|
||||
)
|
||||
journal = extract_text(
|
||||
eval_xpath_getindex(medline, './Article/Journal/Title/text()', 0, default=None), allow_none=True
|
||||
)
|
||||
issn = extract_text(
|
||||
eval_xpath_getindex(medline, './Article/Journal/ISSN/text()', 0, default=None), allow_none=True
|
||||
)
|
||||
authors = []
|
||||
for author in eval_xpath_list(medline, './Article/AuthorList/Author'):
|
||||
f = eval_xpath_getindex(author, './ForeName', 0, default=None)
|
||||
l = eval_xpath_getindex(author, './LastName', 0, default=None)
|
||||
f = '' if f is None else f.text
|
||||
l = '' if l is None else l.text
|
||||
authors.append((f + ' ' + l).strip())
|
||||
|
||||
try:
|
||||
content = entry.xpath('.//Abstract/AbstractText')[0].text
|
||||
except:
|
||||
content = gettext('No abstract is available for this publication.')
|
||||
res_dict = {
|
||||
'template': 'paper.html',
|
||||
'url': url,
|
||||
'title': title,
|
||||
'content': content,
|
||||
'journal': journal,
|
||||
'issn': [issn],
|
||||
'authors': authors,
|
||||
'doi': doi,
|
||||
}
|
||||
|
||||
# If a doi is available, add it to the snipppet
|
||||
try:
|
||||
doi = entry.xpath('.//ELocationID[@EIdType="doi"]')[0].text
|
||||
content = 'DOI: {doi} Abstract: {content}'.format(doi=doi, content=content)
|
||||
except:
|
||||
pass
|
||||
|
||||
if len(content) > 300:
|
||||
content = content[0:300] + "..."
|
||||
# TODO: center snippet on query term
|
||||
|
||||
res_dict = {'url': url, 'title': title, 'content': content}
|
||||
|
||||
try:
|
||||
publishedDate = datetime.strptime(
|
||||
entry.xpath('.//DateCreated/Year')[0].text
|
||||
+ '-'
|
||||
+ entry.xpath('.//DateCreated/Month')[0].text
|
||||
+ '-'
|
||||
+ entry.xpath('.//DateCreated/Day')[0].text,
|
||||
'%Y-%m-%d',
|
||||
)
|
||||
res_dict['publishedDate'] = publishedDate
|
||||
except:
|
||||
pass
|
||||
accepted_date = eval_xpath_getindex(
|
||||
entry, './PubmedData/History//PubMedPubDate[@PubStatus="accepted"]', 0, default=None
|
||||
)
|
||||
if accepted_date is not None:
|
||||
year = eval_xpath_getindex(accepted_date, './Year', 0)
|
||||
month = eval_xpath_getindex(accepted_date, './Month', 0)
|
||||
day = eval_xpath_getindex(accepted_date, './Day', 0)
|
||||
try:
|
||||
publishedDate = datetime.strptime(
|
||||
year.text + '-' + month.text + '-' + day.text,
|
||||
'%Y-%m-%d',
|
||||
)
|
||||
res_dict['publishedDate'] = publishedDate
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
results.append(res_dict)
|
||||
|
||||
return results
|
||||
return results
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
from json import dumps, loads
|
||||
from datetime import datetime
|
||||
|
||||
from flask_babel import gettext
|
||||
|
||||
about = {
|
||||
"website": 'https://www.semanticscholar.org/',
|
||||
"wikidata_id": 'Q22908627',
|
||||
|
@ -15,6 +17,7 @@ about = {
|
|||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
search_url = 'https://www.semanticscholar.org/api/1/search'
|
||||
paper_url = 'https://www.semanticscholar.org/paper'
|
||||
|
@ -45,11 +48,7 @@ def request(query, params):
|
|||
def response(resp):
|
||||
res = loads(resp.text)
|
||||
results = []
|
||||
|
||||
for result in res['results']:
|
||||
item = {}
|
||||
metadata = []
|
||||
|
||||
url = result.get('primaryPaperLink', {}).get('url')
|
||||
if not url and result.get('links'):
|
||||
url = result.get('links')[0]
|
||||
|
@ -60,22 +59,47 @@ def response(resp):
|
|||
if not url:
|
||||
url = paper_url + '/%s' % result['id']
|
||||
|
||||
item['url'] = url
|
||||
# publishedDate
|
||||
if 'pubDate' in result:
|
||||
publishedDate = datetime.strptime(result['pubDate'], "%Y-%m-%d")
|
||||
else:
|
||||
publishedDate = None
|
||||
|
||||
item['title'] = result['title']['text']
|
||||
item['content'] = result['paperAbstract']['text']
|
||||
# authors
|
||||
authors = [author[0]['name'] for author in result.get('authors', [])]
|
||||
|
||||
metadata = result.get('fieldsOfStudy') or []
|
||||
venue = result.get('venue', {}).get('text')
|
||||
if venue:
|
||||
metadata.append(venue)
|
||||
if metadata:
|
||||
item['metadata'] = ', '.join(metadata)
|
||||
# pick for the first alternate link, but not from the crawler
|
||||
pdf_url = None
|
||||
for doc in result.get('alternatePaperLinks', []):
|
||||
if doc['linkType'] not in ('crawler', 'doi'):
|
||||
pdf_url = doc['url']
|
||||
break
|
||||
|
||||
pubDate = result.get('pubDate')
|
||||
if pubDate:
|
||||
item['publishedDate'] = datetime.strptime(pubDate, "%Y-%m-%d")
|
||||
# comments
|
||||
comments = None
|
||||
if 'citationStats' in result:
|
||||
comments = gettext(
|
||||
'{numCitations} citations from the year {firstCitationVelocityYear} to {lastCitationVelocityYear}'
|
||||
).format(
|
||||
numCitations=result['citationStats']['numCitations'],
|
||||
firstCitationVelocityYear=result['citationStats']['firstCitationVelocityYear'],
|
||||
lastCitationVelocityYear=result['citationStats']['lastCitationVelocityYear'],
|
||||
)
|
||||
|
||||
results.append(item)
|
||||
results.append(
|
||||
{
|
||||
'template': 'paper.html',
|
||||
'url': url,
|
||||
'title': result['title']['text'],
|
||||
'content': result['paperAbstract']['text'],
|
||||
'journal': result.get('venue', {}).get('text') or result.get('journal', {}).get('name'),
|
||||
'doi': result.get('doiInfo', {}).get('doi'),
|
||||
'tags': result.get('fieldsOfStudy'),
|
||||
'authors': authors,
|
||||
'pdf_url': pdf_url,
|
||||
'publishedDate': publishedDate,
|
||||
'comments': comments,
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
||||
|
|
|
@ -19,7 +19,7 @@ about = {
|
|||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['science']
|
||||
categories = ['science', 'scientific publications']
|
||||
paging = True
|
||||
nb_per_page = 10
|
||||
api_key = 'unset'
|
||||
|
@ -41,32 +41,32 @@ def response(resp):
|
|||
json_data = loads(resp.text)
|
||||
|
||||
for record in json_data['records']:
|
||||
content = record['abstract'][0:500]
|
||||
if len(record['abstract']) > len(content):
|
||||
content += "..."
|
||||
published = datetime.strptime(record['publicationDate'], '%Y-%m-%d')
|
||||
|
||||
metadata = [
|
||||
record[x]
|
||||
for x in [
|
||||
'publicationName',
|
||||
'identifier',
|
||||
'contentType',
|
||||
]
|
||||
if record.get(x) is not None
|
||||
]
|
||||
|
||||
metadata = ' / '.join(metadata)
|
||||
if record.get('startingPage') and record.get('endingPage') is not None:
|
||||
metadata += " (%(startingPage)s-%(endingPage)s)" % record
|
||||
|
||||
authors = [" ".join(author['creator'].split(', ')[::-1]) for author in record['creators']]
|
||||
tags = record.get('genre')
|
||||
if isinstance(tags, str):
|
||||
tags = [tags]
|
||||
results.append(
|
||||
{
|
||||
'title': record['title'],
|
||||
'template': 'paper.html',
|
||||
'url': record['url'][0]['value'].replace('http://', 'https://', 1),
|
||||
'content': content,
|
||||
'title': record['title'],
|
||||
'content': record['abstract'],
|
||||
'comments': record['publicationName'],
|
||||
'tags': tags,
|
||||
'publishedDate': published,
|
||||
'metadata': metadata,
|
||||
'type': record.get('contentType'),
|
||||
'authors': authors,
|
||||
# 'editor': '',
|
||||
'publisher': record.get('publisher'),
|
||||
'journal': record.get('publicationName'),
|
||||
'volume': record.get('volume') or None,
|
||||
'pages': '-'.join([x for x in [record.get('startingPage'), record.get('endingPage')] if x]),
|
||||
'number': record.get('number') or None,
|
||||
'doi': record.get('doi'),
|
||||
'issn': [x for x in [record.get('issn')] if x],
|
||||
'isbn': [x for x in [record.get('isbn')] if x],
|
||||
# 'pdf_url' : ''
|
||||
}
|
||||
)
|
||||
return results
|
||||
|
|
|
@ -209,7 +209,7 @@ def _fetch_supported_languages(resp):
|
|||
# native name, the English name of the writing script used by the language,
|
||||
# or occasionally something else entirely.
|
||||
|
||||
# this cases are so special they need to be hardcoded, a couple of them are mispellings
|
||||
# this cases are so special they need to be hardcoded, a couple of them are misspellings
|
||||
language_names = {
|
||||
'english_uk': 'en-GB',
|
||||
'fantizhengwen': ['zh-TW', 'zh-HK'],
|
||||
|
|
75
searx/engines/twitter.py
Normal file
75
searx/engines/twitter.py
Normal file
|
@ -0,0 +1,75 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""Twitter (microblogging platform)"""
|
||||
|
||||
from json import loads
|
||||
from urllib.parse import urlencode
|
||||
from datetime import datetime
|
||||
|
||||
about = {
|
||||
"website": 'https://twitter.com',
|
||||
"wikidata_id": None,
|
||||
"official_api_documentation": 'https://developer.twitter.com/en/docs/twitter-api',
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": 'JSON',
|
||||
}
|
||||
|
||||
categories = ['social media']
|
||||
|
||||
url = "https://api.twitter.com"
|
||||
search_url = (
|
||||
"{url}/2/search/adaptive.json?{query}&tweet_mode=extended&query_source=typed_query&pc=1&spelling_corrections=1"
|
||||
)
|
||||
|
||||
|
||||
def request(query, params):
|
||||
params['url'] = search_url.format(url=url, query=urlencode({'q': query}))
|
||||
|
||||
params['headers'] = {
|
||||
# This token is used in the Twitter web interface (twitter.com). Without this header, the API doesn't work.
|
||||
# The value of the token has never changed (or maybe once a long time ago).
|
||||
# https://github.com/zedeus/nitter/blob/5f31e86e0e8578377fa7d5aeb9631bbb2d35ef1e/src/consts.nim#L5
|
||||
'Authorization': (
|
||||
"Bearer AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKb"
|
||||
"T3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw"
|
||||
)
|
||||
}
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
json_res = loads(resp.text)['globalObjects']
|
||||
|
||||
for tweet in json_res['tweets'].values():
|
||||
text = tweet['full_text']
|
||||
display = tweet['display_text_range']
|
||||
|
||||
img_src = tweet.get('extended_entities', {}).get('media', [{}])[0].get('media_url_https')
|
||||
if img_src:
|
||||
img_src += "?name=thumb"
|
||||
|
||||
results.append(
|
||||
{
|
||||
'url': 'https://twitter.com/i/web/status/' + tweet['id_str'],
|
||||
'title': (text[:40] + '...') if len(text) > 40 else text,
|
||||
'content': text[display[0] : display[1]],
|
||||
'img_src': img_src,
|
||||
'publishedDate': datetime.strptime(tweet['created_at'], '%a %b %d %H:%M:%S %z %Y'),
|
||||
}
|
||||
)
|
||||
|
||||
for user in json_res['users'].values():
|
||||
results.append(
|
||||
{
|
||||
'title': user['name'],
|
||||
'content': user['description'],
|
||||
'url': 'https://twitter.com/' + user['screen_name'],
|
||||
'img_src': user['profile_image_url_https'],
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -50,7 +50,7 @@ WIKIDATA_PROPERTIES = {
|
|||
# SERVICE wikibase:label: https://en.wikibooks.org/wiki/SPARQL/SERVICE_-_Label#Manual_Label_SERVICE
|
||||
# https://en.wikibooks.org/wiki/SPARQL/WIKIDATA_Precision,_Units_and_Coordinates
|
||||
# https://www.mediawiki.org/wiki/Wikibase/Indexing/RDF_Dump_Format#Data_model
|
||||
# optmization:
|
||||
# optimization:
|
||||
# * https://www.wikidata.org/wiki/Wikidata:SPARQL_query_service/query_optimization
|
||||
# * https://github.com/blazegraph/database/wiki/QueryHints
|
||||
QUERY_TEMPLATE = """
|
||||
|
@ -386,7 +386,7 @@ def get_attributes(language):
|
|||
add_amount('P2046') # area
|
||||
add_amount('P281') # postal code
|
||||
add_label('P38') # currency
|
||||
add_amount('P2048') # heigth (building)
|
||||
add_amount('P2048') # height (building)
|
||||
|
||||
# Media
|
||||
for p in [
|
||||
|
|
|
@ -50,7 +50,7 @@ def request(query, params):
|
|||
# replace private user area characters to make text legible
|
||||
def replace_pua_chars(text):
|
||||
pua_chars = {
|
||||
'\uf522': '\u2192', # rigth arrow
|
||||
'\uf522': '\u2192', # right arrow
|
||||
'\uf7b1': '\u2115', # set of natural numbers
|
||||
'\uf7b4': '\u211a', # set of rational numbers
|
||||
'\uf7b5': '\u211d', # set of real numbers
|
||||
|
|
136
searx/engines/wttr.py
Normal file
136
searx/engines/wttr.py
Normal file
|
@ -0,0 +1,136 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# lint: pylint
|
||||
"""wttr.in (weather forecast service)"""
|
||||
|
||||
from json import loads
|
||||
from urllib.parse import quote
|
||||
from flask_babel import gettext
|
||||
|
||||
about = {
|
||||
"website": "https://wttr.in",
|
||||
"wikidata_id": "Q107586666",
|
||||
"official_api_documentation": "https://github.com/chubin/wttr.in#json-output",
|
||||
"use_official_api": True,
|
||||
"require_api_key": False,
|
||||
"results": "JSON",
|
||||
}
|
||||
|
||||
categories = ["others"]
|
||||
|
||||
url = "https://wttr.in/{query}?format=j1&lang={lang}"
|
||||
|
||||
|
||||
def get_weather_condition_key(lang):
|
||||
if lang == "en":
|
||||
return "weatherDesc"
|
||||
|
||||
return "lang_" + lang.lower()
|
||||
|
||||
|
||||
def generate_day_table(day):
|
||||
res = ""
|
||||
|
||||
res += f"<tr><td>{gettext('Average temp.')}</td><td>{day['avgtempC']}°C / {day['avgtempF']}°F</td></tr>"
|
||||
res += f"<tr><td>{gettext('Min temp.')}</td><td>{day['mintempC']}°C / {day['mintempF']}°F</td></tr>"
|
||||
res += f"<tr><td>{gettext('Max temp.')}</td><td>{day['maxtempC']}°C / {day['maxtempF']}°F</td></tr>"
|
||||
res += f"<tr><td>{gettext('UV index')}</td><td>{day['uvIndex']}</td></tr>"
|
||||
res += f"<tr><td>{gettext('Sunrise')}</td><td>{day['astronomy'][0]['sunrise']}</td></tr>"
|
||||
res += f"<tr><td>{gettext('Sunset')}</td><td>{day['astronomy'][0]['sunset']}</td></tr>"
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def generate_condition_table(condition, lang, current=False):
|
||||
res = ""
|
||||
|
||||
if current:
|
||||
key = "temp_"
|
||||
else:
|
||||
key = "temp"
|
||||
|
||||
res += (
|
||||
f"<tr><td><b>{gettext('Condition')}</b></td>"
|
||||
f"<td><b>{condition[get_weather_condition_key(lang)][0]['value']}</b></td></tr>"
|
||||
)
|
||||
res += (
|
||||
f"<tr><td><b>{gettext('Temperature')}</b></td>"
|
||||
f"<td><b>{condition[key+'C']}°C / {condition[key+'F']}°F</b></td></tr>"
|
||||
)
|
||||
res += (
|
||||
f"<tr><td>{gettext('Feels like')}</td><td>{condition['FeelsLikeC']}°C / {condition['FeelsLikeF']}°F</td></tr>"
|
||||
)
|
||||
res += (
|
||||
f"<tr><td>{gettext('Wind')}</td><td>{condition['winddir16Point']} — "
|
||||
f"{condition['windspeedKmph']} km/h / {condition['windspeedMiles']} mph</td></tr>"
|
||||
)
|
||||
res += (
|
||||
f"<tr><td>{gettext('Visibility')}</td><td>{condition['visibility']} km / {condition['visibilityMiles']} mi</td>"
|
||||
)
|
||||
res += f"<tr><td>{gettext('Humidity')}</td><td>{condition['humidity']}%</td></tr>"
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def request(query, params):
|
||||
if query.replace('/', '') in [":help", ":bash.function", ":translation"]:
|
||||
return None
|
||||
|
||||
if params["language"] == "all":
|
||||
params["language"] = "en"
|
||||
else:
|
||||
params["language"] = params["language"].split("-")[0]
|
||||
|
||||
params["url"] = url.format(query=quote(query), lang=params["language"])
|
||||
|
||||
params["raise_for_httperror"] = False
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
results = []
|
||||
|
||||
if resp.status_code == 404:
|
||||
return []
|
||||
|
||||
result = loads(resp.text)
|
||||
|
||||
current = result["current_condition"][0]
|
||||
location = result['nearest_area'][0]
|
||||
|
||||
forecast_indices = {3: gettext('Morning'), 4: gettext('Noon'), 6: gettext('Evening'), 7: gettext('Night')}
|
||||
|
||||
title = f"{location['areaName'][0]['value']}, {location['region'][0]['value']}"
|
||||
|
||||
infobox = f"<h3>{gettext('Current condition')}</h3><table><tbody>"
|
||||
|
||||
infobox += generate_condition_table(current, resp.search_params['language'], True)
|
||||
|
||||
infobox += "</tbody></table>"
|
||||
|
||||
for day in result["weather"]:
|
||||
infobox += f"<h3>{day['date']}</h3>"
|
||||
|
||||
infobox += "<table><tbody>"
|
||||
|
||||
infobox += generate_day_table(day)
|
||||
|
||||
infobox += "</tbody></table>"
|
||||
|
||||
infobox += "<table><tbody>"
|
||||
|
||||
for time in forecast_indices.items():
|
||||
infobox += f"<tr><td rowspan=\"7\"><b>{time[1]}</b></td></tr>"
|
||||
|
||||
infobox += generate_condition_table(day['hourly'][time[0]], resp.search_params['language'])
|
||||
|
||||
infobox += "</tbody></table>"
|
||||
|
||||
results.append(
|
||||
{
|
||||
"infobox": title,
|
||||
"content": infobox,
|
||||
}
|
||||
)
|
||||
|
||||
return results
|
|
@ -22,6 +22,7 @@ from urllib.parse import urlencode
|
|||
|
||||
from lxml import html
|
||||
from searx.utils import extract_text, extract_url, eval_xpath, eval_xpath_list
|
||||
from searx.network import raise_for_httperror
|
||||
|
||||
search_url = None
|
||||
"""
|
||||
|
@ -52,7 +53,7 @@ Replacements are:
|
|||
|
||||
0: none, 1: moderate, 2:strict
|
||||
|
||||
If not supported, the URL paramter is an empty string.
|
||||
If not supported, the URL parameter is an empty string.
|
||||
|
||||
"""
|
||||
|
||||
|
@ -61,6 +62,14 @@ lang_all = 'en'
|
|||
selected.
|
||||
'''
|
||||
|
||||
no_result_for_http_status = []
|
||||
'''Return empty result for these HTTP status codes instead of throwing an error.
|
||||
|
||||
.. code:: yaml
|
||||
|
||||
no_result_for_http_status: []
|
||||
'''
|
||||
|
||||
soft_max_redirects = 0
|
||||
'''Maximum redirects, soft limit. Record an error but don't stop the engine'''
|
||||
|
||||
|
@ -105,7 +114,7 @@ time_range_support = False
|
|||
|
||||
time_range_url = '&hours={time_range_val}'
|
||||
'''Time range URL parameter in the in :py:obj:`search_url`. If no time range is
|
||||
requested by the user, the URL paramter is an empty string. The
|
||||
requested by the user, the URL parameter is an empty string. The
|
||||
``{time_range_val}`` replacement is taken from the :py:obj:`time_range_map`.
|
||||
|
||||
.. code:: yaml
|
||||
|
@ -177,11 +186,18 @@ def request(query, params):
|
|||
params['url'] = search_url.format(**fargs)
|
||||
params['soft_max_redirects'] = soft_max_redirects
|
||||
|
||||
params['raise_for_httperror'] = False
|
||||
|
||||
return params
|
||||
|
||||
|
||||
def response(resp):
|
||||
def response(resp): # pylint: disable=too-many-branches
|
||||
'''Scrap *results* from the response (see :ref:`engine results`).'''
|
||||
if no_result_for_http_status and resp.status_code in no_result_for_http_status:
|
||||
return []
|
||||
|
||||
raise_for_httperror(resp)
|
||||
|
||||
results = []
|
||||
dom = html.fromstring(resp.text)
|
||||
is_onion = 'onions' in categories
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
from urllib.parse import quote_plus
|
||||
from searx.data import EXTERNAL_BANGS
|
||||
|
||||
LEAF_KEY = chr(16)
|
||||
|
@ -39,7 +40,7 @@ def get_bang_definition_and_ac(external_bangs_db, bang):
|
|||
|
||||
def resolve_bang_definition(bang_definition, query):
|
||||
url, rank = bang_definition.split(chr(1))
|
||||
url = url.replace(chr(2), query)
|
||||
url = url.replace(chr(2), quote_plus(query))
|
||||
if url.startswith('//'):
|
||||
url = 'https:' + url
|
||||
rank = int(rank) if len(rank) > 0 else 0
|
||||
|
|
|
@ -30,7 +30,7 @@ def get_external_url(url_id, item_id, alternative="default"):
|
|||
"""Return an external URL or None if url_id is not found.
|
||||
|
||||
url_id can take value from data/external_urls.json
|
||||
The "imdb_id" value is automaticaly converted according to the item_id value.
|
||||
The "imdb_id" value is automatically converted according to the item_id value.
|
||||
|
||||
If item_id is None, the raw URL with the $1 is returned.
|
||||
"""
|
||||
|
|
|
@ -25,7 +25,10 @@ _flask_babel_get_translations = flask_babel.get_translations
|
|||
|
||||
LOCALE_NAMES = {}
|
||||
"""Mapping of locales and their description. Locales e.g. 'fr' or 'pt-BR' (see
|
||||
:py:obj:`locales_initialize`)."""
|
||||
:py:obj:`locales_initialize`).
|
||||
|
||||
:meta hide-value:
|
||||
"""
|
||||
|
||||
RTL_LOCALES: Set[str] = set()
|
||||
"""List of *Right-To-Left* locales e.g. 'he' or 'fa-IR' (see
|
||||
|
@ -159,7 +162,7 @@ def get_engine_locale(searxng_locale, engine_locales, default=None):
|
|||
``searxng_locale``.
|
||||
|
||||
Argument ``engine_locales`` is a python dict that maps *SearXNG locales* to
|
||||
corresponding *engine locales*:
|
||||
corresponding *engine locales*::
|
||||
|
||||
<engine>: {
|
||||
# SearXNG string : engine-string
|
||||
|
@ -217,7 +220,7 @@ def get_engine_locale(searxng_locale, engine_locales, default=None):
|
|||
locale = babel.Locale.parse(searxng_locale, sep='-')
|
||||
except babel.core.UnknownLocaleError:
|
||||
try:
|
||||
locale = babel.Locale.parse(searxng_locale.split('-')[1])
|
||||
locale = babel.Locale.parse(searxng_locale.split('-')[0])
|
||||
except babel.core.UnknownLocaleError:
|
||||
return default
|
||||
|
||||
|
@ -252,8 +255,12 @@ def get_engine_locale(searxng_locale, engine_locales, default=None):
|
|||
terr_lang_dict[territory] = langs.get(searxng_lang)
|
||||
|
||||
# first: check fr-FR, de-DE .. is supported by the engine
|
||||
# exception: 'en' --> 'en-US'
|
||||
|
||||
territory = locale.language.upper()
|
||||
if territory == 'EN':
|
||||
territory = 'US'
|
||||
|
||||
if terr_lang_dict.get(territory):
|
||||
searxng_locale = locale.language + '-' + territory
|
||||
engine_locale = engine_locales.get(searxng_locale)
|
||||
|
|
|
@ -67,7 +67,7 @@ def is_accepted_request() -> bool:
|
|||
return False
|
||||
|
||||
accept_encoding_list = [l.strip() for l in request.headers.get('Accept-Encoding', '').split(',')]
|
||||
if 'gzip' not in accept_encoding_list or 'deflate' not in accept_encoding_list:
|
||||
if 'gzip' not in accept_encoding_list and 'deflate' not in accept_encoding_list:
|
||||
logger.debug("suspicious Accept-Encoding") # pylint: disable=undefined-variable
|
||||
return False
|
||||
|
||||
|
|
|
@ -42,4 +42,6 @@ def on_result(request, search, result):
|
|||
doi = doi[: -len(suffix)]
|
||||
result['url'] = get_doi_resolver(request.preferences) + doi
|
||||
result['parsed_url'] = urlparse(result['url'])
|
||||
if 'doi' not in result:
|
||||
result['doi'] = doi
|
||||
return True
|
||||
|
|
|
@ -17,7 +17,7 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
|
|||
from flask_babel import gettext
|
||||
import re
|
||||
|
||||
name = gettext('Self Informations')
|
||||
name = gettext('Self Information')
|
||||
description = gettext('Displays your IP if the query is "ip" and your user agent if the query contains "user agent".')
|
||||
default_on = True
|
||||
preference_section = 'query'
|
||||
|
|
|
@ -52,7 +52,7 @@ class Setting:
|
|||
return self.value
|
||||
|
||||
def save(self, name: str, resp: flask.Response):
|
||||
"""Save cookie ``name`` in the HTTP reponse obect
|
||||
"""Save cookie ``name`` in the HTTP response object
|
||||
|
||||
If needed, its overwritten in the inheritance."""
|
||||
resp.set_cookie(name, self.value, max_age=COOKIE_MAX_AGE)
|
||||
|
@ -113,7 +113,7 @@ class MultipleChoiceSetting(Setting):
|
|||
self.value.append(choice)
|
||||
|
||||
def save(self, name: str, resp: flask.Response):
|
||||
"""Save cookie ``name`` in the HTTP reponse obect"""
|
||||
"""Save cookie ``name`` in the HTTP response object"""
|
||||
resp.set_cookie(name, ','.join(self.value), max_age=COOKIE_MAX_AGE)
|
||||
|
||||
|
||||
|
@ -146,7 +146,7 @@ class SetSetting(Setting):
|
|||
self.values = set(elements)
|
||||
|
||||
def save(self, name: str, resp: flask.Response):
|
||||
"""Save cookie ``name`` in the HTTP reponse obect"""
|
||||
"""Save cookie ``name`` in the HTTP response object"""
|
||||
resp.set_cookie(name, ','.join(self.values), max_age=COOKIE_MAX_AGE)
|
||||
|
||||
|
||||
|
@ -193,7 +193,7 @@ class MapSetting(Setting):
|
|||
self.key = data # pylint: disable=attribute-defined-outside-init
|
||||
|
||||
def save(self, name: str, resp: flask.Response):
|
||||
"""Save cookie ``name`` in the HTTP reponse obect"""
|
||||
"""Save cookie ``name`` in the HTTP response object"""
|
||||
if hasattr(self, 'key'):
|
||||
resp.set_cookie(name, self.key, max_age=COOKIE_MAX_AGE)
|
||||
|
||||
|
@ -239,7 +239,7 @@ class BooleanChoices:
|
|||
return (k for k, v in self.choices.items() if not v)
|
||||
|
||||
def save(self, resp: flask.Response):
|
||||
"""Save cookie in the HTTP reponse obect"""
|
||||
"""Save cookie in the HTTP response object"""
|
||||
disabled_changed = (k for k in self.disabled if self.default_choices[k])
|
||||
enabled_changed = (k for k in self.enabled if not self.default_choices[k])
|
||||
resp.set_cookie('disabled_{0}'.format(self.name), ','.join(disabled_changed), max_age=COOKIE_MAX_AGE)
|
||||
|
@ -496,7 +496,7 @@ class Preferences:
|
|||
return ret_val
|
||||
|
||||
def save(self, resp: flask.Response):
|
||||
"""Save cookie in the HTTP reponse obect"""
|
||||
"""Save cookie in the HTTP response object"""
|
||||
for user_setting_name, user_setting in self.key_value_settings.items():
|
||||
# pylint: disable=unnecessary-dict-index-lookup
|
||||
if self.key_value_settings[user_setting_name].locked:
|
||||
|
|
|
@ -198,10 +198,10 @@ class BangParser(QueryPartParser):
|
|||
self.raw_text_query.enginerefs.append(EngineRef(value, 'none'))
|
||||
return True
|
||||
|
||||
# check if prefix is equal with categorie name
|
||||
# check if prefix is equal with category name
|
||||
if value in categories:
|
||||
# using all engines for that search, which
|
||||
# are declared under that categorie name
|
||||
# are declared under that category name
|
||||
self.raw_text_query.enginerefs.extend(
|
||||
EngineRef(engine.name, value)
|
||||
for engine in categories[value]
|
||||
|
@ -219,7 +219,7 @@ class BangParser(QueryPartParser):
|
|||
self._add_autocomplete(first_char + suggestion)
|
||||
return
|
||||
|
||||
# check if query starts with categorie name
|
||||
# check if query starts with category name
|
||||
for category in categories:
|
||||
if category.startswith(value):
|
||||
self._add_autocomplete(first_char + category.replace(' ', '_'))
|
||||
|
@ -311,7 +311,7 @@ class RawTextQuery:
|
|||
|
||||
def getFullQuery(self):
|
||||
"""
|
||||
get full querry including whitespaces
|
||||
get full query including whitespaces
|
||||
"""
|
||||
return '{0} {1}'.format(' '.join(self.query_parts), self.getQuery()).strip()
|
||||
|
||||
|
|
|
@ -134,9 +134,9 @@ def result_score(result):
|
|||
if hasattr(engines[result_engine], 'weight'):
|
||||
weight *= float(engines[result_engine].weight)
|
||||
|
||||
occurences = len(result['positions'])
|
||||
occurrences = len(result['positions'])
|
||||
|
||||
return sum((occurences * weight) / position for position in result['positions'])
|
||||
return sum((occurrences * weight) / position for position in result['positions'])
|
||||
|
||||
|
||||
class Timing(NamedTuple):
|
||||
|
@ -286,7 +286,7 @@ class ResultContainer:
|
|||
if 'template' not in result:
|
||||
result['template'] = 'default.html'
|
||||
|
||||
# strip multiple spaces and cariage returns from content
|
||||
# strip multiple spaces and carriage returns from content
|
||||
if result.get('content'):
|
||||
result['content'] = WHITESPACE_REGEX.sub(' ', result['content'])
|
||||
|
||||
|
@ -315,7 +315,7 @@ class ResultContainer:
|
|||
return merged_result
|
||||
else:
|
||||
# it's an image
|
||||
# it's a duplicate if the parsed_url, template and img_src are differents
|
||||
# it's a duplicate if the parsed_url, template and img_src are different
|
||||
if result.get('img_src', '') == merged_result.get('img_src', ''):
|
||||
return merged_result
|
||||
return None
|
||||
|
|
|
@ -70,7 +70,7 @@ def run(engine_name_list, verbose):
|
|||
stderr.write(f'{BOLD_SEQ}Engine {name:30}{RESET_SEQ}Checking\n')
|
||||
checker = searx.search.checker.Checker(processor)
|
||||
checker.run()
|
||||
if checker.test_results.succesfull:
|
||||
if checker.test_results.successful:
|
||||
stdout.write(f'{BOLD_SEQ}Engine {name:30}{RESET_SEQ}{GREEN}OK{RESET_SEQ}\n')
|
||||
if verbose:
|
||||
stdout.write(f' {"found languages":15}: {" ".join(sorted(list(checker.test_results.languages)))}\n')
|
||||
|
|
|
@ -107,7 +107,7 @@ def run():
|
|||
logger.debug('Checking %s engine', name)
|
||||
checker = Checker(processor)
|
||||
checker.run()
|
||||
if checker.test_results.succesfull:
|
||||
if checker.test_results.successful:
|
||||
result['engines'][name] = {'success': True}
|
||||
else:
|
||||
result['engines'][name] = {'success': False, 'errors': checker.test_results.errors}
|
||||
|
|
|
@ -174,7 +174,7 @@ class TestResults:
|
|||
self.languages.add(language)
|
||||
|
||||
@property
|
||||
def succesfull(self):
|
||||
def successful(self):
|
||||
return len(self.errors) == 0
|
||||
|
||||
def __iter__(self):
|
||||
|
@ -317,7 +317,7 @@ class ResultContainerTests:
|
|||
self._record_error('No result')
|
||||
|
||||
def one_title_contains(self, title: str):
|
||||
"""Check one of the title contains `title` (case insensitive comparaison)"""
|
||||
"""Check one of the title contains `title` (case insensitive comparison)"""
|
||||
title = title.lower()
|
||||
for result in self.result_container.get_ordered_results():
|
||||
if title in result['title'].lower():
|
||||
|
|
|
@ -75,7 +75,7 @@ class OnlineProcessor(EngineProcessor):
|
|||
|
||||
def _send_http_request(self, params):
|
||||
# create dictionary which contain all
|
||||
# informations about the request
|
||||
# information about the request
|
||||
request_args = dict(
|
||||
headers=params['headers'], cookies=params['cookies'], verify=params['verify'], auth=params['auth']
|
||||
)
|
||||
|
|
|
@ -43,6 +43,7 @@ CATEGORY_GROUPS = {
|
|||
'REPOS': 'repos',
|
||||
'SOFTWARE_WIKIS': 'software wikis',
|
||||
'WEB': 'web',
|
||||
'SCIENTIFIC PUBLICATIONS': 'scientific publications',
|
||||
}
|
||||
|
||||
STYLE_NAMES = {
|
||||
|
|
|
@ -23,7 +23,7 @@ brand:
|
|||
search:
|
||||
# Filter results. 0: None, 1: Moderate, 2: Strict
|
||||
safe_search: 0
|
||||
# Existing autocomplete backends: "dbpedia", "duckduckgo", "google",
|
||||
# Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "yandex",
|
||||
# "seznam", "startpage", "swisscows", "qwant", "wikipedia" - leave blank to turn it off
|
||||
# by default.
|
||||
autocomplete: ""
|
||||
|
@ -52,7 +52,7 @@ search:
|
|||
|
||||
server:
|
||||
# If you change port, bind_address or base_url don't forget to rebuild
|
||||
# instance's enviroment (make buildenv)
|
||||
# instance's environment (make buildenv)
|
||||
port: 8888
|
||||
bind_address: "127.0.0.1"
|
||||
base_url: false # Possible values: false or "https://example.org/location".
|
||||
|
@ -95,6 +95,8 @@ ui:
|
|||
default_theme: simple
|
||||
# center the results ?
|
||||
center_alignment: false
|
||||
# URL prefix of the internet archive, don't forgett trailing slash (if needed).
|
||||
# cache_url: "https://webcache.googleusercontent.com/search?q=cache:"
|
||||
# Default interface locale - leave blank to detect from browser information or
|
||||
# use codes from the 'locales' config section
|
||||
default_locale: ""
|
||||
|
@ -121,6 +123,7 @@ ui:
|
|||
#
|
||||
# result_proxy:
|
||||
# url: http://127.0.0.1:3000/
|
||||
# # the key is a base64 encoded string, the YAML !!binary prefix is optional
|
||||
# key: !!binary "your_morty_proxy_key"
|
||||
# # [true|false] enable the "proxy" button next to each result
|
||||
# proxify_results: true
|
||||
|
@ -132,7 +135,7 @@ outgoing:
|
|||
request_timeout: 3.0
|
||||
# the maximum timeout in seconds
|
||||
# max_request_timeout: 10.0
|
||||
# suffix of searx_useragent, could contain informations like an email address
|
||||
# suffix of searx_useragent, could contain information like an email address
|
||||
# to the administrator
|
||||
useragent_suffix: ""
|
||||
# The maximum number of concurrent connections that may be established.
|
||||
|
@ -180,7 +183,7 @@ outgoing:
|
|||
# # these plugins are enabled if nothing is configured ..
|
||||
# - 'Hash plugin'
|
||||
# - 'Search on category select'
|
||||
# - 'Self Informations'
|
||||
# - 'Self Information'
|
||||
# - 'Tracker URL remover'
|
||||
# - 'Ahmia blacklist' # activation depends on outgoing.using_tor_proxy
|
||||
# # these plugins are disabled if nothing is configured ..
|
||||
|
@ -262,12 +265,22 @@ categories_as_tabs:
|
|||
social media:
|
||||
|
||||
engines:
|
||||
- name: 9gag
|
||||
engine: 9gag
|
||||
shortcut: 9g
|
||||
disabled: true
|
||||
|
||||
- name: apk mirror
|
||||
engine: apkmirror
|
||||
timeout: 4.0
|
||||
shortcut: apkm
|
||||
disabled: true
|
||||
|
||||
- name: apple app store
|
||||
engine: apple_app_store
|
||||
shortcut: aps
|
||||
disabled: true
|
||||
|
||||
# Requires Tor
|
||||
- name: ahmia
|
||||
engine: ahmia
|
||||
|
@ -306,7 +319,6 @@ engines:
|
|||
- name: arxiv
|
||||
engine: arxiv
|
||||
shortcut: arx
|
||||
categories: science
|
||||
timeout: 4.0
|
||||
|
||||
# tmp suspended: dh key too small
|
||||
|
@ -398,23 +410,10 @@ engines:
|
|||
# api_key: 'unset'
|
||||
|
||||
- name: crossref
|
||||
engine: json_engine
|
||||
paging: true
|
||||
search_url: https://search.crossref.org/dois?q={query}&page={pageno}
|
||||
url_query: doi
|
||||
title_query: title
|
||||
title_html_to_text: true
|
||||
content_query: fullCitation
|
||||
content_html_to_text: true
|
||||
categories: science
|
||||
engine: crossref
|
||||
shortcut: cr
|
||||
about:
|
||||
website: https://www.crossref.org/
|
||||
wikidata_id: Q5188229
|
||||
official_api_documentation: https://github.com/CrossRef/rest-api-doc
|
||||
use_official_api: false
|
||||
require_api_key: false
|
||||
results: JSON
|
||||
timeout: 30
|
||||
disabled: true
|
||||
|
||||
- name: yep
|
||||
engine: json_engine
|
||||
|
@ -540,6 +539,17 @@ engines:
|
|||
timeout: 3.0
|
||||
disabled: true
|
||||
|
||||
- name: duckduckgo weather
|
||||
engine: duckduckgo_weather
|
||||
shortcut: ddw
|
||||
disabled: true
|
||||
|
||||
- name: apple maps
|
||||
engine: apple_maps
|
||||
shortcut: apm
|
||||
disabled: true
|
||||
timeout: 5.0
|
||||
|
||||
- name: emojipedia
|
||||
engine: emojipedia
|
||||
timeout: 4.0
|
||||
|
@ -1044,7 +1054,7 @@ engines:
|
|||
title_query: metadata/oaf:entity/oaf:result/title/$
|
||||
content_query: metadata/oaf:entity/oaf:result/description/$
|
||||
content_html_to_text: true
|
||||
categories: science
|
||||
categories: "science"
|
||||
shortcut: oad
|
||||
timeout: 5.0
|
||||
about:
|
||||
|
@ -1174,7 +1184,6 @@ engines:
|
|||
- name: pubmed
|
||||
engine: pubmed
|
||||
shortcut: pub
|
||||
categories: science
|
||||
timeout: 3.0
|
||||
|
||||
- name: pypi
|
||||
|
@ -1322,7 +1331,6 @@ engines:
|
|||
engine: semantic_scholar
|
||||
disabled: true
|
||||
shortcut: se
|
||||
categories: science
|
||||
|
||||
# Spotify needs API credentials
|
||||
# - name: spotify
|
||||
|
@ -1348,8 +1356,7 @@ engines:
|
|||
# # working API key, for test & debug: "a69685087d07eca9f13db62f65b8f601"
|
||||
# api_key: 'unset'
|
||||
# shortcut: springer
|
||||
# categories: science
|
||||
# timeout: 6.0
|
||||
# timeout: 15.0
|
||||
|
||||
- name: startpage
|
||||
engine: startpage
|
||||
|
@ -1425,6 +1432,11 @@ engines:
|
|||
# - 2000
|
||||
# - 5000
|
||||
|
||||
- name: twitter
|
||||
shortcut: tw
|
||||
engine: twitter
|
||||
disabled: true
|
||||
|
||||
# maybe in a fun category
|
||||
# - name: uncyclopedia
|
||||
# engine: mediawiki
|
||||
|
@ -1666,6 +1678,15 @@ engines:
|
|||
engine: seznam
|
||||
disabled: true
|
||||
|
||||
# - name: deepl
|
||||
# engine: deepl
|
||||
# shortcut: dpl
|
||||
# # You can use the engine using the official stable API, but you need an API key
|
||||
# # See: https://www.deepl.com/pro-api?cta=header-pro-api
|
||||
# api_key: '' # required!
|
||||
# timeout: 5.0
|
||||
# disabled: true
|
||||
|
||||
- name: mojeek
|
||||
shortcut: mjk
|
||||
engine: xpath
|
||||
|
@ -1781,6 +1802,7 @@ engines:
|
|||
url_xpath: //div[@class="upper-synonyms"]/a/@href
|
||||
content_xpath: //div[@class="synonyms-list-group"]
|
||||
title_xpath: //div[@class="upper-synonyms"]/a
|
||||
no_result_for_http_status: [404]
|
||||
about:
|
||||
website: https://www.woxikon.de/
|
||||
wikidata_id: # No Wikidata ID
|
||||
|
@ -1816,6 +1838,11 @@ engines:
|
|||
results: HTML
|
||||
language: fr
|
||||
|
||||
- name: wttr.in
|
||||
engine: wttr
|
||||
shortcut: wttr
|
||||
timeout: 9.0
|
||||
|
||||
- name: brave
|
||||
shortcut: brave
|
||||
engine: xpath
|
||||
|
@ -1834,6 +1861,9 @@ engines:
|
|||
month: 'pm'
|
||||
year: 'py'
|
||||
categories: [general, web]
|
||||
disabled: true
|
||||
headers:
|
||||
Accept-Encoding: gzip, deflate
|
||||
about:
|
||||
website: https://brave.com/search/
|
||||
wikidata_id: Q107355971
|
||||
|
@ -2006,10 +2036,7 @@ doi_resolvers:
|
|||
doi.org: 'https://doi.org/'
|
||||
doai.io: 'https://dissem.in/'
|
||||
sci-hub.se: 'https://sci-hub.se/'
|
||||
sci-hub.do: 'https://sci-hub.do/'
|
||||
scihubtw.tw: 'https://scihubtw.tw/'
|
||||
sci-hub.st: 'https://sci-hub.st/'
|
||||
sci-hub.bar: 'https://sci-hub.bar/'
|
||||
sci-hub.it.nf: 'https://sci-hub.it.nf/'
|
||||
sci-hub.ru: 'https://sci-hub.ru/'
|
||||
|
||||
default_doi_resolver: 'oadoi.org'
|
||||
|
|
|
@ -9,6 +9,7 @@ import numbers
|
|||
import errno
|
||||
import os
|
||||
import logging
|
||||
from base64 import b64decode
|
||||
from os.path import dirname, abspath
|
||||
|
||||
from searx.languages import language_codes as languages
|
||||
|
@ -41,16 +42,6 @@ STR_TO_BOOL = {
|
|||
}
|
||||
_UNDEFINED = object()
|
||||
|
||||
# compatibility
|
||||
SEARX_ENVIRON_VARIABLES = {
|
||||
'SEARX_DISABLE_ETC_SETTINGS': 'SEARXNG_DISABLE_ETC_SETTINGS',
|
||||
'SEARX_SETTINGS_PATH': 'SEARXNG_SETTINGS_PATH',
|
||||
'SEARX_DEBUG': 'SEARXNG_DEBUG',
|
||||
'SEARX_PORT': 'SEARXNG_PORT',
|
||||
'SEARX_BIND_ADDRESS': 'SEARXNG_BIND_ADDRESS',
|
||||
'SEARX_SECRET': 'SEARXNG_SECRET',
|
||||
}
|
||||
|
||||
|
||||
class SettingsValue:
|
||||
"""Check and update a setting value"""
|
||||
|
@ -117,6 +108,15 @@ class SettingsDirectoryValue(SettingsValue):
|
|||
return super().__call__(value)
|
||||
|
||||
|
||||
class SettingsBytesValue(SettingsValue):
|
||||
"""str are base64 decoded"""
|
||||
|
||||
def __call__(self, value: typing.Any) -> typing.Any:
|
||||
if isinstance(value, str):
|
||||
value = b64decode(value)
|
||||
return super().__call__(value)
|
||||
|
||||
|
||||
def apply_schema(settings, schema, path_list):
|
||||
error = False
|
||||
for key, value in schema.items():
|
||||
|
@ -190,6 +190,7 @@ SCHEMA = {
|
|||
'advanced_search': SettingsValue(bool, False),
|
||||
'query_in_title': SettingsValue(bool, False),
|
||||
'infinite_scroll': SettingsValue(bool, False),
|
||||
'cache_url': SettingsValue(str, 'https://web.archive.org/web/'),
|
||||
},
|
||||
'preferences': {
|
||||
'lock': SettingsValue(list, []),
|
||||
|
@ -215,6 +216,11 @@ SCHEMA = {
|
|||
'extra_proxy_timeout': SettingsValue(int, 0),
|
||||
'networks': {},
|
||||
},
|
||||
'result_proxy': {
|
||||
'url': SettingsValue((None, str), None),
|
||||
'key': SettingsBytesValue((None, bytes), None),
|
||||
'proxify_results': SettingsValue(bool, False),
|
||||
},
|
||||
'plugins': SettingsValue(list, []),
|
||||
'enabled_plugins': SettingsValue((None, list), None),
|
||||
'checker': {
|
||||
|
@ -227,11 +233,5 @@ SCHEMA = {
|
|||
|
||||
|
||||
def settings_set_defaults(settings):
|
||||
# compatibility with searx variables
|
||||
for searx, searxng in SEARX_ENVIRON_VARIABLES.items():
|
||||
if searx in os.environ and searxng not in os.environ:
|
||||
os.environ[searxng] = os.environ[searx]
|
||||
logger.warning('%s uses value from %s', searxng, searx)
|
||||
|
||||
apply_schema(settings, SCHEMA, [])
|
||||
return settings
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
from typing import Optional
|
||||
from os import environ
|
||||
from os.path import dirname, join, abspath, isfile
|
||||
from collections.abc import Mapping
|
||||
|
@ -13,7 +14,7 @@ from searx.exceptions import SearxSettingsException
|
|||
searx_dir = abspath(dirname(__file__))
|
||||
|
||||
|
||||
def check_settings_yml(file_name):
|
||||
def existing_filename_or_none(file_name: str) -> Optional[str]:
|
||||
if isfile(file_name):
|
||||
return file_name
|
||||
return None
|
||||
|
@ -30,29 +31,29 @@ def load_yaml(file_name):
|
|||
|
||||
|
||||
def get_default_settings_path():
|
||||
return check_settings_yml(join(searx_dir, 'settings.yml'))
|
||||
return existing_filename_or_none(join(searx_dir, 'settings.yml'))
|
||||
|
||||
|
||||
def get_user_settings_path():
|
||||
# find location of settings.yml
|
||||
def get_user_settings_path() -> Optional[str]:
|
||||
"""Get an user settings file.
|
||||
By descending priority:
|
||||
1. ``environ['SEARXNG_SETTINGS_PATH']``
|
||||
2. ``/etc/searxng/settings.yml`` except if ``SEARXNG_DISABLE_ETC_SETTINGS`` is ``true`` or ``1``
|
||||
3. ``None``
|
||||
"""
|
||||
|
||||
# check the environment variable SEARXNG_SETTINGS_PATH
|
||||
# if the environment variable is defined, this is the last check
|
||||
if 'SEARXNG_SETTINGS_PATH' in environ:
|
||||
# if possible set path to settings using the
|
||||
# enviroment variable SEARXNG_SETTINGS_PATH
|
||||
return check_settings_yml(environ['SEARXNG_SETTINGS_PATH'])
|
||||
return existing_filename_or_none(environ['SEARXNG_SETTINGS_PATH'])
|
||||
|
||||
# if SEARXNG_DISABLE_ETC_SETTINGS don't look any futher
|
||||
if environ.get('SEARXNG_DISABLE_ETC_SETTINGS', '').lower() in ('1', 'true'):
|
||||
return None
|
||||
|
||||
# if not, get it from searx code base or last solution from /etc/searxng
|
||||
try:
|
||||
return check_settings_yml('/etc/searxng/settings.yml')
|
||||
except SearxSettingsException as e:
|
||||
# fall back to searx settings
|
||||
try:
|
||||
return check_settings_yml('/etc/searx/settings.yml')
|
||||
except SearxSettingsException:
|
||||
# if none are found, raise the exception about SearXNG
|
||||
raise e # pylint: disable=raise-missing-from
|
||||
# check /etc/searxng/settings.yml
|
||||
# (continue with other locations if the file is not found)
|
||||
return existing_filename_or_none('/etc/searxng/settings.yml')
|
||||
|
||||
|
||||
def update_dict(default_dict, user_dict):
|
||||
|
@ -120,10 +121,10 @@ def is_use_default_settings(user_settings):
|
|||
raise ValueError('Invalid value for use_default_settings')
|
||||
|
||||
|
||||
def load_settings(load_user_setttings=True):
|
||||
def load_settings(load_user_settings=True):
|
||||
default_settings_path = get_default_settings_path()
|
||||
user_settings_path = get_user_settings_path()
|
||||
if user_settings_path is None or not load_user_setttings:
|
||||
if user_settings_path is None or not load_user_settings:
|
||||
# no user settings
|
||||
return (load_yaml(default_settings_path), 'load the default settings from {}'.format(default_settings_path))
|
||||
|
||||
|
@ -135,7 +136,7 @@ def load_settings(load_user_setttings=True):
|
|||
update_settings(default_settings, user_settings)
|
||||
return (
|
||||
default_settings,
|
||||
'merge the default settings ( {} ) and the user setttings ( {} )'.format(
|
||||
'merge the default settings ( {} ) and the user settings ( {} )'.format(
|
||||
default_settings_path, user_settings_path
|
||||
),
|
||||
)
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
4
searx/static/themes/simple/js/searxng.min.js
vendored
4
searx/static/themes/simple/js/searxng.min.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -14,7 +14,7 @@
|
|||
"ionicons": "^6.0.2",
|
||||
"less": "^4.1.3",
|
||||
"less-plugin-clean-css": "^1.5.1",
|
||||
"sharp": "^0.30.6",
|
||||
"sharp": "^0.31.0",
|
||||
"stylelint": "^13.13.1",
|
||||
"stylelint-config-standard": "^22.0.0",
|
||||
"ejs": "^3.1.8",
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
this file is generated automatically by searxng_extra/update/update_pygments.py
|
||||
using pygments version 2.12.0
|
||||
using pygments version 2.13.0
|
||||
*/
|
||||
|
||||
.code-highlight .linenos {
|
||||
|
|
|
@ -68,6 +68,43 @@
|
|||
}, "#" + qinput_id);
|
||||
}
|
||||
|
||||
/*
|
||||
Monkey patch autocomplete.js to fix a bug
|
||||
With the POST method, the values are not URL encoded: query like "1 + 1" are sent as "1 1" since space are URL encoded as plus.
|
||||
See HTML specifications:
|
||||
* HTML5: https://url.spec.whatwg.org/#concept-urlencoded-serializer
|
||||
* HTML4: https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
|
||||
|
||||
autocomplete.js does not URL encode the name and values:
|
||||
https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/src/autocomplete.ts#L665
|
||||
|
||||
The monkey patch overrides the compiled version of the ajax function.
|
||||
See https://github.com/autocompletejs/autocomplete.js/blob/87069524f3b95e68f1b54d8976868e0eac1b2c83/dist/autocomplete.js#L143-L158
|
||||
The patch changes only the line 156 from
|
||||
params.Request.send(params._QueryArg() + "=" + params._Pre());
|
||||
to
|
||||
params.Request.send(encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(params._Pre()));
|
||||
|
||||
Related to:
|
||||
* https://github.com/autocompletejs/autocomplete.js/issues/78
|
||||
* https://github.com/searxng/searxng/issues/1695
|
||||
*/
|
||||
AutoComplete.prototype.ajax = function (params, request, timeout) {
|
||||
if (timeout === void 0) { timeout = true; }
|
||||
if (params.$AjaxTimer) {
|
||||
window.clearTimeout(params.$AjaxTimer);
|
||||
}
|
||||
if (timeout === true) {
|
||||
params.$AjaxTimer = window.setTimeout(AutoComplete.prototype.ajax.bind(null, params, request, false), params.Delay);
|
||||
} else {
|
||||
if (params.Request) {
|
||||
params.Request.abort();
|
||||
}
|
||||
params.Request = request;
|
||||
params.Request.send(encodeURIComponent(params._QueryArg()) + "=" + encodeURIComponent(params._Pre()));
|
||||
}
|
||||
};
|
||||
|
||||
if (!isMobile && document.querySelector('.index_endpoint')) {
|
||||
qinput.focus();
|
||||
}
|
||||
|
|
|
@ -302,6 +302,49 @@ article[data-vim-selected].category-social {
|
|||
}
|
||||
}
|
||||
|
||||
.result-paper {
|
||||
.attributes {
|
||||
display: table;
|
||||
border-spacing: 0.125rem;
|
||||
|
||||
div {
|
||||
display: table-row;
|
||||
|
||||
span {
|
||||
font-size: 0.9rem;
|
||||
margin-top: 0.25rem;
|
||||
display: table-cell;
|
||||
|
||||
time {
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
}
|
||||
|
||||
span:first-child {
|
||||
color: var(--color-base-font);
|
||||
min-width: 10rem;
|
||||
}
|
||||
|
||||
span:nth-child(2) {
|
||||
color: var(--color-result-publishdate-font);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
.comments {
|
||||
font-size: 0.9rem;
|
||||
margin: 0.25rem 0 0 0;
|
||||
padding: 0;
|
||||
word-wrap: break-word;
|
||||
line-height: 1.24;
|
||||
font-style: italic;
|
||||
}
|
||||
}
|
||||
|
||||
.template_group_images {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
@ -955,6 +998,28 @@ article[data-vim-selected].category-social {
|
|||
border: none !important;
|
||||
background-color: var(--color-sidebar-background);
|
||||
}
|
||||
|
||||
.result-paper {
|
||||
.attributes {
|
||||
display: block;
|
||||
|
||||
div {
|
||||
display: block;
|
||||
|
||||
span {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
span:first-child {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
span:nth-child(2) {
|
||||
.ltr-margin-left(0.5rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
<html class="no-js theme-{{ preferences.get_value('simple_style') or 'auto' }} center-aligment-{{ preferences.get_value('center_alignment') and 'yes' or 'no' }}" lang="{{ locale_rfc5646 }}" {% if rtl %} dir="rtl"{% endif %}>
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="description" content="SearXNG — a privacy-respecting, hackable metasearch engine">
|
||||
<meta name="description" content="SearXNG — a privacy-respecting, open metasearch engine">
|
||||
<meta name="keywords" content="SearXNG, search, search engine, metasearch, meta search">
|
||||
<meta name="generator" content="searxng/{{ searx_version }}">
|
||||
<meta name="referrer" content="no-referrer">
|
||||
|
@ -61,10 +61,10 @@
|
|||
</main>
|
||||
<footer>
|
||||
<p>
|
||||
{{ _('Powered by') }} <a href="{{ url_for('info', pagename='about') }}">searxng</a> - {{ searx_version }} — {{ _('a privacy-respecting, hackable metasearch engine') }}<br/>
|
||||
<a href="{{ searx_git_url }}">{{ _('Source code') }}</a> |
|
||||
<a href="{{ get_setting('brand.issue_url') }}">{{ _('Issue tracker') }}</a> |
|
||||
<a href="{{ url_for('stats') }}">{{ _('Engine stats') }}</a>
|
||||
{{ _('Powered by') }} <a href="{{ url_for('info', pagename='about') }}">searxng</a> - {{ searx_version }} — {{ _('a privacy-respecting, open metasearch engine') }}<br/>
|
||||
<a href="{{ searx_git_url }}">{{ _('Source code') }}</a>
|
||||
| <a href="{{ get_setting('brand.issue_url') }}">{{ _('Issue tracker') }}</a>
|
||||
{% if enable_metrics %}| <a href="{{ url_for('stats') }}">{{ _('Engine stats') }}</a>{% endif %}
|
||||
{% if get_setting('brand.public_instances') %}
|
||||
| <a href="{{ get_setting('brand.public_instances') }}">{{ _('Public instances') }}</a>
|
||||
{% endif %}
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
{%- macro result_sub_footer(result, proxify) -%}
|
||||
<div class="engines">
|
||||
{% for engine in result.engines %}<span>{{ engine }}</span>{% endfor %}
|
||||
{{ result_link("https://web.archive.org/web/" + result.url, icon_small('ellipsis-vertical-outline') + _('cached'), "cache_link") }}‎ {% if proxify and proxify_results %} {{ result_link(proxify(result.url), icon('link') + _('proxied'), "proxyfied_link") }} {% endif %}
|
||||
{{ result_link(cache_url + result.url, icon_small('ellipsis-vertical-outline') + _('cached'), "cache_link") }}‎ {% if proxify and proxify_results %} {{ result_link(proxify(result.url), icon('link') + _('proxied'), "proxyfied_link") }} {% endif %}
|
||||
</div>{{- '' -}}
|
||||
<div class="break"></div>{{- '' -}}
|
||||
{%- endmacro -%}
|
||||
|
|
|
@ -261,7 +261,7 @@
|
|||
<option value="GET" {% if method == 'GET' %}selected="selected"{% endif %}>GET</option>
|
||||
</select>
|
||||
</p>
|
||||
<div class="description">{{ _('Change how forms are submited, <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" rel="external">learn more about request methods</a>') }}</div>
|
||||
<div class="description">{{ _('Change how forms are submitted, <a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods" rel="external">learn more about request methods</a>') }}</div>
|
||||
</fieldset>
|
||||
{% endif %}
|
||||
{% if 'image_proxy' not in locked_preferences %}
|
||||
|
@ -310,9 +310,9 @@
|
|||
<th>{{ _("Supports selected language") }}</th>{{- "" -}}
|
||||
<th>{{ _("SafeSearch") }}</th>{{- "" -}}
|
||||
<th>{{ _("Time range") }}</th>{{- "" -}}
|
||||
<th>{{ _("Response time") }}</th>{{- "" -}}
|
||||
{%- if enable_metrics %}<th>{{ _("Response time") }}</th>{% endif -%}
|
||||
<th>{{ _("Max time") }}</th>{{- "" -}}
|
||||
<th>{{ _("Reliability") }}</th>{{- "" -}}
|
||||
{%- if enable_metrics %}<th>{{ _("Reliability") }}</th>{% endif -%}
|
||||
</tr>
|
||||
{% for group, engines in engines_by_category[categ] | group_engines_in_tab %}
|
||||
{% if loop.length > 1 %}
|
||||
|
@ -336,9 +336,9 @@
|
|||
<td>{{ checkbox(None, supports[search_engine.name]['supports_selected_language'], true) }}</td>{{- "" -}}
|
||||
<td>{{ checkbox(None, supports[search_engine.name]['safesearch'], true) }}</td>{{- "" -}}
|
||||
<td>{{ checkbox(None, supports[search_engine.name]['time_range_support'], true) }}</td>{{- "" -}}
|
||||
{{- engine_time(search_engine.name) -}}
|
||||
{%- if enable_metrics %}{{- engine_time(search_engine.name) -}}{% endif -%}
|
||||
<td class="{{ 'danger' if stats[search_engine.name]['warn_timeout'] else '' }}">{{ search_engine.timeout }}</td>{{- "" -}}
|
||||
{{ engine_reliability(search_engine.name) -}}
|
||||
{%- if enable_metrics %}{{ engine_reliability(search_engine.name) -}}{% endif -%}
|
||||
</tr>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
|
38
searx/templates/simple/result_templates/paper.html
Normal file
38
searx/templates/simple/result_templates/paper.html
Normal file
|
@ -0,0 +1,38 @@
|
|||
{% from 'simple/macros.html' import result_header, result_sub_header, result_sub_footer, result_footer, result_link with context %}
|
||||
|
||||
{{ result_header(result, favicons, image_proxify) -}}
|
||||
<div class="attributes">
|
||||
{%- if result.publishedDate %}<div class="result_publishedDate"><span>{{ _("Published date") }}:</span><span><time class="published_date" datetime="{{ result.pubdate }}" >{{ result.publishedDate }}</time></span></div>{% endif -%}
|
||||
{%- if result.authors %}<div class="result_authors"><span>{{ _("Author") }}:</span><span>{{ result.authors | join(", ") }}</span></div>{% endif -%}
|
||||
{%- if result.journal -%}
|
||||
<div class="result_journal">
|
||||
<span>{{- _("Journal") }}:</span><span>{{ result.journal -}}
|
||||
{%- if result.volume -%}
|
||||
{{- result.volume -}}
|
||||
{%- if result.number -%}
|
||||
.{{- result.number -}}
|
||||
{%- endif -%}
|
||||
{%- endif -%}
|
||||
{%- if result.pages -%}
|
||||
{{- result.pages -}}
|
||||
{%- endif -%}
|
||||
</span>
|
||||
</div>
|
||||
{%- endif %}
|
||||
{%- if result.editor %}<div class="result_editor"><span>{{ _("Editor") }}:</span><span>{{ result.editor }}</span></div>{% endif -%}
|
||||
{%- if result.publisher %}<div class="result_publisher"><span>{{ _("Publisher") }}:</span><span>{{ result.publisher }}</span></div>{% endif -%}
|
||||
{%- if result.type %}<div class="result_type"><span>{{ _("Type") }}:</span><span>{{ result.type }}</span></div>{% endif -%}
|
||||
{%- if result.tags %}<div class="result_tags"><span>{{ _("Tags") }}:</span><span>{{ result.tags | join(", ")}}</span></div>{%- endif -%}
|
||||
{%- if result.doi %}<div class="result_doi"><span>{{ _("DOI") }}:</span><span>{{ result_link(doi_resolver + result.doi, result.doi) }}</span></div>{% endif -%}
|
||||
{%- if result.issn %}<div class="result_issn"><span>{{ _("ISSN") }}:</span><span>{{ result.issn | join(", ") }}</span></div>{% endif -%}
|
||||
{%- if result.isbn %}<div class="result_isbn"><span>{{ _("ISBN") }}:</span><span>{{ result.isbn | join(", ") }}</span></div>{% endif -%}
|
||||
</div>
|
||||
{%- if result.content -%}<p class="content">{{- result.content | safe -}}</p>{%- endif -%}
|
||||
{%- if result.comments -%}<p class="comments">{{- result.comments -}}</p>{%- endif -%}
|
||||
<p class="altlink">
|
||||
{%- if result.pdf_url -%}{{ result_link(result.pdf_url, _('PDF')) }}{%- endif -%}
|
||||
{%- if result.html_url -%}{{ result_link(result.html_url, _('HTML')) }}{%- endif -%}
|
||||
{%- if result.doi %}{{ result_link('https://www.altmetric.com/details/doi/' + result.doi, 'Altmetric') }}{% endif -%}
|
||||
</p>
|
||||
{{- result_sub_footer(result, proxify) -}}
|
||||
{{- result_footer(result) }}
|
|
@ -33,10 +33,7 @@
|
|||
<td class="engine-name"><a href="{{ url_for('stats', engine=engine_stat.name|e) }}">{{ engine_stat.name }}</a></td>
|
||||
<td class="engine-score">
|
||||
{% if engine_stat.score %}
|
||||
<span aria-labelledby="{{engine_stat.name}}_score" >{{ engine_stat.score|round(1) }}</span>
|
||||
<div class="engine-tooltip" role="tooltip" id="{{engine_stat.name}}_score">{{- "" -}}
|
||||
<p>{{ _('Scores per result') }}: {{ engine_stat.score_per_result | round(3) }}</p>
|
||||
</div>
|
||||
<span>{{ engine_stat.score_per_result|round(1) }}</span>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="engine-result-count">
|
||||
|
|
Binary file not shown.
|
@ -1,4 +1,4 @@
|
|||
# Translations template for PROJECT.
|
||||
# Afrikaans translations for PROJECT.
|
||||
# Copyright (C) 2022 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
|
||||
|
@ -8,17 +8,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-08-12 07:18+0000\n"
|
||||
"Last-Translator: Edrean Ernst <edrean@allesbeste.com>\n"
|
||||
"Language-Team: Afrikaans <https://weblate.bubu1.eu/projects/searxng/searxng/"
|
||||
"af/>\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-08-19 07:18+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: af\n"
|
||||
"Language-Team: Afrikaans "
|
||||
"<https://weblate.bubu1.eu/projects/searxng/searxng/af/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.13.1\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
|
||||
|
@ -126,6 +125,11 @@ msgstr "programmatuur wiki's"
|
|||
msgid "web"
|
||||
msgstr "web"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr ""
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -141,91 +145,91 @@ msgstr "lig"
|
|||
msgid "dark"
|
||||
msgstr "donker"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
msgstr "tydsverloop"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "ontledingsfout"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "HTTP protokol fout"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "netwerk fout"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "onverwagse breek"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "HTTP fout"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "HTTP koppelingsfout"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "proksie fout"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "te veel versoeke"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr "toegang geweier"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr "bediener API fout"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "Geen item gevind"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr "Bron"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr "Fout met die laai van die volgende bladsy"
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Ongeldige opstellings, redigeer asb jou voorkeure"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "Ongeldige opstellings"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "soekfout"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr "Opgehef"
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "{minutes} minute terug"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "{hours} ure, {minutes} minute terug"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr "Opgehef"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "Ewekansige getal genereerder"
|
||||
|
@ -254,23 +258,25 @@ msgstr "{title} (VEROUDERD)"
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "Hierdie inskrywing was vervang deur"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
msgstr "Geen uittreksel is beskikbaar vir hierdie publikasie nie."
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr "Kanaal"
|
||||
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
msgid ""
|
||||
"Could not read that image url. This may be due to an unsupported file "
|
||||
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
|
||||
" WebP."
|
||||
msgstr ""
|
||||
"Kon nie daardie prent url lees nie. Dit mag weens 'n lêer formaat wees wat "
|
||||
"nie ondersteun is nie. TinEye ondersteun slegs prente wat JPEG, PNG, GIF, "
|
||||
"BMP, TIFF of WebP is."
|
||||
"Kon nie daardie prent url lees nie. Dit mag weens 'n lêer formaat wees "
|
||||
"wat nie ondersteun is nie. TinEye ondersteun slegs prente wat JPEG, PNG, "
|
||||
"GIF, BMP, TIFF of WebP is."
|
||||
|
||||
#: searx/engines/tineye.py:46
|
||||
msgid ""
|
||||
|
@ -278,12 +284,29 @@ msgid ""
|
|||
" visual detail to successfully identify matches."
|
||||
msgstr ""
|
||||
"Hierdie prent is te eenvoudig om ooreenkomste te vind. TinEye benodig 'n "
|
||||
"basiese vlak van visuele detail om suksesvol ooreenkomste te identifiseer."
|
||||
"basiese vlak van visuele detail om suksesvol ooreenkomste te "
|
||||
"identifiseer."
|
||||
|
||||
#: searx/engines/tineye.py:52
|
||||
msgid "The image could not be downloaded."
|
||||
msgstr "Die prent kon nie afgelaai word nie."
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr ""
|
||||
|
@ -321,20 +344,20 @@ msgid ""
|
|||
"Perform search immediately if a category selected. Disable to select "
|
||||
"multiple categories. (JavaScript required)"
|
||||
msgstr ""
|
||||
"Doen soektog onmiddelik indien 'n kategorie geselekteer is. Deaktiveer om "
|
||||
"veelvoudige kategoriee te selekteer. (JavaScript benodig)"
|
||||
"Doen soektog onmiddelik indien 'n kategorie geselekteer is. Deaktiveer om"
|
||||
" veelvoudige kategoriee te selekteer. (JavaScript benodig)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgstr "Eie informasie"
|
||||
msgid "Self Information"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
msgid ""
|
||||
"Displays your IP if the query is \"ip\" and your user agent if the query "
|
||||
"contains \"user agent\"."
|
||||
msgstr ""
|
||||
"Vertoon jou IP indien die navraag \"ip\" is en jou gebruiker agent indien "
|
||||
"die navraag \"user agent\" bevat."
|
||||
"Vertoon jou IP indien die navraag \"ip\" is en jou gebruiker agent indien"
|
||||
" die navraag \"user agent\" bevat."
|
||||
|
||||
#: searx/plugins/tor_check.py:25
|
||||
msgid "Tor check plugin"
|
||||
|
@ -354,8 +377,8 @@ msgid ""
|
|||
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
|
||||
"unreachable."
|
||||
msgstr ""
|
||||
"Die TOR uitgang nodus lys (https://check.torproject.org/exit-addresses) is "
|
||||
"nie bereikbaar nie."
|
||||
"Die TOR uitgang nodus lys (https://check.torproject.org/exit-addresses) "
|
||||
"is nie bereikbaar nie."
|
||||
|
||||
#: searx/plugins/tor_check.py:78
|
||||
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
|
||||
|
@ -414,7 +437,7 @@ msgid "Powered by"
|
|||
msgstr "Aangedryf deur"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
|
@ -452,6 +475,7 @@ msgstr "Lengte"
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr "Outeur"
|
||||
|
||||
|
@ -495,17 +519,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr "Mediaan"
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr "P80"
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr "P95"
|
||||
|
||||
|
@ -656,8 +680,8 @@ msgstr "Oneindige blaai"
|
|||
#: searx/templates/simple/preferences.html:248
|
||||
msgid "Automatically load next page when scrolling to bottom of current page"
|
||||
msgstr ""
|
||||
"Laai die volgende bladsy outomaties wanneer blaai na die onderkant van die "
|
||||
"huidige bladsy"
|
||||
"Laai die volgende bladsy outomaties wanneer blaai na die onderkant van "
|
||||
"die huidige bladsy"
|
||||
|
||||
#: searx/templates/simple/preferences.html:254
|
||||
msgid "Privacy"
|
||||
|
@ -669,13 +693,10 @@ msgstr "HTTP Metode"
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
"Verander hoe vorms ingedien word, <a href=\"http://en.wikipedia.org/wiki/"
|
||||
"Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\"> leer meer "
|
||||
"oor versoek metodes</a>"
|
||||
|
||||
#: searx/templates/simple/preferences.html:269
|
||||
msgid "Image proxy"
|
||||
|
@ -704,8 +725,8 @@ msgid ""
|
|||
"When enabled, the result page's title contains your query. Your browser "
|
||||
"can record this title"
|
||||
msgstr ""
|
||||
"Wanneer geaktiveer sal die resultaat se bladsy titel jou navraag bevat. Jou "
|
||||
"blaaier kan hierdie titel opneem"
|
||||
"Wanneer geaktiveer sal die resultaat se bladsy titel jou navraag bevat. "
|
||||
"Jou blaaier kan hierdie titel opneem"
|
||||
|
||||
#: searx/templates/simple/preferences.html:294
|
||||
msgid "Engines"
|
||||
|
@ -928,67 +949,63 @@ msgstr ""
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1075,6 +1092,50 @@ msgstr ""
|
|||
msgid "hide map"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr ""
|
||||
|
@ -1126,3 +1187,27 @@ msgstr ""
|
|||
#: searx/templates/simple/result_templates/videos.html:6
|
||||
msgid "hide video"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr "Geen uittreksel is beskikbaar vir hierdie publikasie nie."
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr "Eie informasie"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
#~ "Verander hoe vorms ingedien word, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\"> leer meer oor versoek"
|
||||
#~ " metodes</a>"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -8,21 +8,23 @@
|
|||
# d506c013dc1b502e7a53f91ebcbf8f29_985b4b3, 2017-2018
|
||||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||
# ken kailer <kenkailer@yahoo.com>, 2022.
|
||||
# George Kashkosh <kash.george@gmail.com>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-07-19 05:45+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-10-07 07:30+0000\n"
|
||||
"Last-Translator: George Kashkosh <kash.george@gmail.com>\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.14.1\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
|
||||
|
@ -130,6 +132,11 @@ msgstr "الموسوعات التشاركية للبرنامج"
|
|||
msgid "web"
|
||||
msgstr "الشبكة العالمية"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr "المنشورات العلمية"
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -145,91 +152,91 @@ msgstr "فاتح"
|
|||
msgid "dark"
|
||||
msgstr "مظلم"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr "نفذ الوقت"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "خطأ تحليل"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "خطأ في بروتوكول HTTP"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "خطأ في الشبكة"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "تعطل غير متوقع"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "خطأ HTTP"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "خطأ في اتصال HTTP"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "خطأ في وكيل البروكسي"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "أسئلة التحقق"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "الكثير من الطلبات"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr "الدخول مرفوض"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr "خطأ في API الخادم"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "تعذر العثور على عناصر"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr "المصدر"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr "حدث خلل أثناء تحميل الصفحة التالية"
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "إنّ الإعدادات خاطئة، يرجى تعديل خياراتك"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "إعدادات غير صالحة"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "خطأ في البحث"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr "معلق"
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "قبل دقائق"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "قبل {hours} ساعات، {minutes} دقائق"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr "معلق"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "مولّد قيمة عشوائية"
|
||||
|
@ -258,34 +265,58 @@ msgstr "{title} (قديما)"
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "هذا الإدخال تم استبداله بـ"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
msgstr "لا يوجد ملخص لهذا المنشور"
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr "القناة"
|
||||
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
"{numCitation}استجلاب من العام {firstCitationVelocityYear} إلى "
|
||||
"{lastCitationVelocityYear}"
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
msgid ""
|
||||
"Could not read that image url. This may be due to an unsupported file "
|
||||
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
|
||||
" WebP."
|
||||
msgstr ""
|
||||
"تعذر قراءة عنوان url للصورة. قد يكون هذا بسبب تنسيق ملف غير مدعوم. تدعم "
|
||||
"TinEye فقط الصور بتنسيق JPEG أو PNG أو GIF أو BMP أو TIFF أو WebP."
|
||||
|
||||
#: searx/engines/tineye.py:46
|
||||
msgid ""
|
||||
"The image is too simple to find matches. TinEye requires a basic level of"
|
||||
" visual detail to successfully identify matches."
|
||||
msgstr ""
|
||||
"الصورة أبسط من أن تجد مطابقات. يتطلب TinEye مستوى أساسيًا من التفاصيل "
|
||||
"المرئية لتحديد التطابقات بنجاح."
|
||||
|
||||
#: searx/engines/tineye.py:52
|
||||
msgid "The image could not be downloaded."
|
||||
msgstr ""
|
||||
msgstr "لا يمكن تنزيل الصورة."
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr "صباحا"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr "ظهيرة"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr "مساء"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr "ليلا"
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "يحول السلسلة إلى ملخص التجزئة"
|
||||
msgstr "يحول السلسلة إلى ملخص التجزئة."
|
||||
|
||||
#: searx/plugins/hash_plugin.py:52
|
||||
msgid "hash digest"
|
||||
|
@ -324,8 +355,8 @@ msgstr ""
|
|||
"ضروريه)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgstr "معلومات شخصية"
|
||||
msgid "Self Information"
|
||||
msgstr "نشرة المعلومات"
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
msgid ""
|
||||
|
@ -333,31 +364,35 @@ msgid ""
|
|||
"contains \"user agent\"."
|
||||
msgstr ""
|
||||
"يعرض IP إذا كان الاستعلام \"ip\" و وكيل المستخدم الخاص بك إذا كان "
|
||||
"الاستعلام يحتوي على\"user agent\""
|
||||
"الاستعلام يحتوي على\"user agent\"."
|
||||
|
||||
#: searx/plugins/tor_check.py:25
|
||||
msgid "Tor check plugin"
|
||||
msgstr ""
|
||||
msgstr "فحص المكون الإضافي ل Tor"
|
||||
|
||||
#: searx/plugins/tor_check.py:28
|
||||
msgid ""
|
||||
"This plugin checks if the address of the request is a TOR exit node, and "
|
||||
"informs the user if it is, like check.torproject.org but from searxng."
|
||||
msgstr ""
|
||||
"يتحقق هذا المكون الإضافي مما إذا كان عنوان الطلب هو عقدة خروج TOR ، ويبلغ"
|
||||
" المستخدم إذا كان كذلك ، مثل check.torproject.org ولكن من searxng."
|
||||
|
||||
#: searx/plugins/tor_check.py:62
|
||||
msgid ""
|
||||
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
|
||||
"unreachable."
|
||||
msgstr ""
|
||||
"لا يمكن الوصول إلى قائمة عقدة الخروج TOR (https://check.torproject.org"
|
||||
"/exit-addresses)."
|
||||
|
||||
#: searx/plugins/tor_check.py:78
|
||||
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
|
||||
msgstr ""
|
||||
msgstr "انك تستخدم شبكة TOR. ان IP Adress الخاص بك يبدو انه: {ip_address}."
|
||||
|
||||
#: searx/plugins/tor_check.py:84
|
||||
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
|
||||
msgstr ""
|
||||
msgstr "انك لا تستخدم شبكة TOR. ان IP Adress الخاص بك يبدو انه: {ip_address}."
|
||||
|
||||
#: searx/plugins/tracker_url_remover.py:29
|
||||
msgid "Tracker URL remover"
|
||||
|
@ -413,16 +448,16 @@ msgid "Powered by"
|
|||
msgstr "مدعوم بواسطة"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgstr "محرك بحث يحمي الخصوصية و قابل للتهكير"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr "الخصوصية ذو الاعتبار, محرك البحث عميق عُموميا"
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
msgid "Source code"
|
||||
msgstr "الكود المصدري"
|
||||
msgstr "شيفرة مصدرية"
|
||||
|
||||
#: searx/templates/simple/base.html:66
|
||||
msgid "Issue tracker"
|
||||
msgstr "متتبع القضايا"
|
||||
msgstr "تعقب القضايا"
|
||||
|
||||
#: searx/templates/simple/base.html:67 searx/templates/simple/stats.html:18
|
||||
msgid "Engine stats"
|
||||
|
@ -431,7 +466,7 @@ msgstr "إحصائيات المحرك"
|
|||
#: searx/templates/simple/base.html:69
|
||||
#: searx/templates/simple/messages/no_results.html:15
|
||||
msgid "Public instances"
|
||||
msgstr "مثيلات الخوادم العمومية"
|
||||
msgstr "نماذج الخوادم العمومية"
|
||||
|
||||
#: searx/templates/simple/base.html:72
|
||||
msgid "Privacy policy"
|
||||
|
@ -439,11 +474,11 @@ msgstr "سياسة الخصوصية"
|
|||
|
||||
#: searx/templates/simple/base.html:75
|
||||
msgid "Contact instance maintainer"
|
||||
msgstr "الإتصال بالمشرف على مثيل الخادم"
|
||||
msgstr "اتصال بالمشرف المخدم النموذجي"
|
||||
|
||||
#: searx/templates/simple/categories.html:24
|
||||
msgid "Click on the magnifier to perform search"
|
||||
msgstr "انقر على المكبرة للقيام بالبحث"
|
||||
msgstr "انقر على رمز المكبر للقيام بالبحث"
|
||||
|
||||
#: searx/templates/simple/macros.html:36
|
||||
msgid "Length"
|
||||
|
@ -451,6 +486,7 @@ msgstr "الطول"
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr "الكاتب"
|
||||
|
||||
|
@ -460,7 +496,7 @@ msgstr "النسخة المخبأة"
|
|||
|
||||
#: searx/templates/simple/macros.html:45
|
||||
msgid "proxied"
|
||||
msgstr "النفاذ عبر البروكسي"
|
||||
msgstr "المخدم البروكسي"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:64
|
||||
msgid "Start submiting a new issue on GitHub"
|
||||
|
@ -494,17 +530,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr "عرض سجلات الأخطاء وتقديم تقرير خطأ"
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr "وسطي"
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr "صفحة 80"
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr "صفحة 95"
|
||||
|
||||
|
@ -668,13 +704,10 @@ msgstr "أسلوب HTTP"
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
"تغيير طريقة إرسال النماذج ، <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\"> تعرف على المزيد حول طرق الطلب </a>"
|
||||
|
||||
#: searx/templates/simple/preferences.html:269
|
||||
msgid "Image proxy"
|
||||
|
@ -719,6 +752,8 @@ msgid ""
|
|||
"This tab does not show up for search results, but you can search the "
|
||||
"engines listed here via bangs."
|
||||
msgstr ""
|
||||
"لا تظهر علامة التبويب هذه في نتائج البحث ، ولكن يمكنك البحث في المحركات "
|
||||
"المدرجة هنا عبر bangs."
|
||||
|
||||
#: searx/templates/simple/preferences.html:307
|
||||
#: searx/templates/simple/preferences.html:358
|
||||
|
@ -759,7 +794,7 @@ msgstr "إمكانية الإشتغال"
|
|||
|
||||
#: searx/templates/simple/preferences.html:353
|
||||
msgid "Special Queries"
|
||||
msgstr ""
|
||||
msgstr "استفسارات خاصة"
|
||||
|
||||
#: searx/templates/simple/preferences.html:359
|
||||
msgid "Keywords"
|
||||
|
@ -779,11 +814,11 @@ msgstr "أمثلة"
|
|||
|
||||
#: searx/templates/simple/preferences.html:365
|
||||
msgid "This is the list of SearXNG's instant answering modules."
|
||||
msgstr ""
|
||||
msgstr "هذه قائمة وحدات الرد الفوري في SearXNG."
|
||||
|
||||
#: searx/templates/simple/preferences.html:376
|
||||
msgid "This is the list of plugins."
|
||||
msgstr ""
|
||||
msgstr "هذه قائمة المكونات الإضافية."
|
||||
|
||||
#: searx/templates/simple/preferences.html:393
|
||||
msgid "Cookies"
|
||||
|
@ -794,10 +829,12 @@ msgid ""
|
|||
"This is the list of cookies and their values SearXNG is storing on your "
|
||||
"computer."
|
||||
msgstr ""
|
||||
"هذه قائمة ملفات تعريف الارتباط وقيمها التي يخزنها SearXNG على جهاز "
|
||||
"الكمبيوتر الخاص بك."
|
||||
|
||||
#: searx/templates/simple/preferences.html:396
|
||||
msgid "With that list, you can assess SearXNG transparency."
|
||||
msgstr ""
|
||||
msgstr "باستخدام هذه القائمة ، يمكنك تقييم شفافية SearXNG."
|
||||
|
||||
#: searx/templates/simple/preferences.html:401
|
||||
msgid "Cookie name"
|
||||
|
@ -809,35 +846,43 @@ msgstr "القيمة"
|
|||
|
||||
#: searx/templates/simple/preferences.html:414
|
||||
msgid "Search URL of the currently saved preferences"
|
||||
msgstr ""
|
||||
msgstr "ابحث عن عنوان URL للتفضيلات المحفوظة حاليًا"
|
||||
|
||||
#: searx/templates/simple/preferences.html:418
|
||||
msgid ""
|
||||
"Note: specifying custom settings in the search URL can reduce privacy by "
|
||||
"leaking data to the clicked result sites."
|
||||
msgstr ""
|
||||
"ملاحظة: يمكن أن يؤدي تحديد إعدادات مخصصة في عنوان URL للبحث إلى تقليل "
|
||||
"الخصوصية عن طريق تسريب البيانات إلى مواقع النتائج التي تم النقر عليها."
|
||||
|
||||
#: searx/templates/simple/preferences.html:419
|
||||
msgid "URL to restore your preferences in another browser"
|
||||
msgstr ""
|
||||
msgstr "URL لاستعادة تفضيلاتك في متصفح آخر"
|
||||
|
||||
#: searx/templates/simple/preferences.html:423
|
||||
msgid ""
|
||||
"Specifying custom settings in the preferences URL can be used to sync "
|
||||
"preferences across devices."
|
||||
msgstr ""
|
||||
"يمكن استخدام تحديد الإعدادات المخصصة في تفضيلات URL لمزامنة التفضيلات عبر"
|
||||
" الأجهزة."
|
||||
|
||||
#: searx/templates/simple/preferences.html:428
|
||||
msgid ""
|
||||
"These settings are stored in your cookies, this allows us not to store "
|
||||
"this data about you."
|
||||
msgstr ""
|
||||
"يتم تخزين هذه الإعدادات في ملفات تعريف الارتباط الخاصة بك ، وهذا يسمح لنا"
|
||||
" بعدم تخزين هذه البيانات عنك."
|
||||
|
||||
#: searx/templates/simple/preferences.html:430
|
||||
msgid ""
|
||||
"These cookies serve your sole convenience, we don't use these cookies to "
|
||||
"track you."
|
||||
msgstr ""
|
||||
"تخدم ملفات تعريف الارتباط هذه راحتك وحدك ، فنحن لا نستخدم ملفات تعريف "
|
||||
"الارتباط هذه لتتبعك."
|
||||
|
||||
#: searx/templates/simple/preferences.html:433
|
||||
msgid "Save"
|
||||
|
@ -913,81 +958,77 @@ msgstr "مسح"
|
|||
#: searx/templates/simple/search.html:11
|
||||
#: searx/templates/simple/simple_search.html:7
|
||||
msgid "search"
|
||||
msgstr "بحت"
|
||||
msgstr "بحث"
|
||||
|
||||
#: searx/templates/simple/stats.html:21
|
||||
msgid "There is currently no data available. "
|
||||
msgstr "لم يتم العثور على أية بيانات بعدُ."
|
||||
msgstr "لم يتم العثور على أية بيانات بعد."
|
||||
|
||||
#: searx/templates/simple/stats.html:26
|
||||
msgid "Scores"
|
||||
msgstr ""
|
||||
msgstr "نتائج"
|
||||
|
||||
#: searx/templates/simple/stats.html:27
|
||||
msgid "Result count"
|
||||
msgstr "نتيجة العد"
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr "إجمالي"
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr ""
|
||||
msgstr "HTTP"
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr ""
|
||||
msgstr "يتم المعالجة"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr "تحذيرات"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr ""
|
||||
msgstr "الأخطاء والاستثناءات"
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr "استثناء"
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr "الرسالة"
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr "نسبة"
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr ""
|
||||
msgstr "معامل"
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr "اسم الملف"
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
msgstr "وظيفة"
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr "كود"
|
||||
msgstr "شفرة"
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr "مدقّق"
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr "اختبار فاشل"
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr "تعليق/تعليقات"
|
||||
|
||||
|
@ -997,7 +1038,7 @@ msgstr "في أي وقت"
|
|||
|
||||
#: searx/templates/simple/filters/time_range.html:6
|
||||
msgid "Last day"
|
||||
msgstr "يوم أمس"
|
||||
msgstr "آخر يوم"
|
||||
|
||||
#: searx/templates/simple/filters/time_range.html:9
|
||||
msgid "Last week"
|
||||
|
@ -1052,7 +1093,7 @@ msgstr "إخفاء الوسائط"
|
|||
#: searx/templates/simple/result_templates/default.html:14
|
||||
#: searx/templates/simple/result_templates/videos.html:14
|
||||
msgid "This site did not provide any description."
|
||||
msgstr "هذا الموقع لا يتوفر على أي وصف."
|
||||
msgstr "هذا الموقع لم يقدم أي وصف."
|
||||
|
||||
#: searx/templates/simple/result_templates/images.html:19
|
||||
msgid "Format"
|
||||
|
@ -1078,6 +1119,50 @@ msgstr "عرض الخريطة"
|
|||
msgid "hide map"
|
||||
msgstr "إخفاء الخريطة"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr "رابط ماغنت"
|
||||
|
@ -1372,3 +1457,25 @@ msgstr "إخفاء الفيديو"
|
|||
#~ msgid "preferences"
|
||||
#~ msgstr "التفضيلات"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr "درجات لكل نتيجة"
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr "محرك بحث يحمي الخصوصية و قابل للتهكير"
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr "لا يوجد ملخص متاح لهذا المنشور."
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr "معلومات شخصية"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
#~ "تغيير طريقة إرسال النماذج ، <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\"> تعرف على المزيد حول "
|
||||
#~ "طرق الطلب </a>"
|
||||
|
|
Binary file not shown.
|
@ -6,12 +6,13 @@
|
|||
# ubone <van_ds_ff@mail.bg>, 2015
|
||||
# ubone <van_ds_ff@mail.bg>, 2016-2017
|
||||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||
# NxOne14 <kiril2315@gmail.com>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-07-06 00:21+0000\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-09-11 22:50+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: bg\n"
|
||||
"Language-Team: Bulgarian "
|
||||
|
@ -127,6 +128,11 @@ msgstr "софтуерни уикита"
|
|||
msgid "web"
|
||||
msgstr "мрежа"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr ""
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -142,91 +148,91 @@ msgstr "светъл"
|
|||
msgid "dark"
|
||||
msgstr "тъмен"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr "изчакване"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "грешка при анализа"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "Грешка в протокола HTTP"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "мрежова грешка"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "неочакван срив"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "HTTP грешка"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "HTTP грешка във връзката"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "прокси грешка"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "Кепча"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "твърде много искания"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr "отказан достъп"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr "грешка в API на сървъра"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "Не е намерен артикул"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr "Източник"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr "Грешка при зареждането на следващата страница"
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Неправилни настройки, моля проверете предпочитанията си"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "невалидни настройки"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "грешка при търсенето"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr "преустановен"
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "преди {minutes} минута(минути)"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "преди {hours} час(ове), {minutes} минута(минути)"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr "преустановен"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "Генератор на произволни стойности"
|
||||
|
@ -241,7 +247,7 @@ msgstr "Функции за статистика"
|
|||
|
||||
#: searx/answerers/statistics/answerer.py:48
|
||||
msgid "Compute {functions} of the arguments"
|
||||
msgstr "Изчислете {функции} на аргументите"
|
||||
msgstr "Изчислете {functions} на аргументите"
|
||||
|
||||
#: searx/engines/openstreetmap.py:160
|
||||
msgid "Get directions"
|
||||
|
@ -255,29 +261,53 @@ msgstr "{title} (ОСТАРЯЛО)"
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "Този запис е заменен от"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
msgstr "Няма резюме за тази публикация."
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr "Канал"
|
||||
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
msgid ""
|
||||
"Could not read that image url. This may be due to an unsupported file "
|
||||
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
|
||||
" WebP."
|
||||
msgstr ""
|
||||
"URL адресът на изображението не можа да бъде прочетен. Това може да се "
|
||||
"дължи на неподдържан файлов формат. TinEye поддържа само изображения, "
|
||||
"които са JPEG, PNG, GIF, BMP, TIFF или WebP."
|
||||
|
||||
#: searx/engines/tineye.py:46
|
||||
msgid ""
|
||||
"The image is too simple to find matches. TinEye requires a basic level of"
|
||||
" visual detail to successfully identify matches."
|
||||
msgstr ""
|
||||
"Изображението е твърде просто за намиране на съвпадения. TinEye изисква "
|
||||
"основно ниво на визуална детайлност за успешно идентифициране на "
|
||||
"съвпадения."
|
||||
|
||||
#: searx/engines/tineye.py:52
|
||||
msgid "The image could not be downloaded."
|
||||
msgstr "Снимката не може да бъде смъкната."
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
|
@ -286,7 +316,7 @@ msgstr "Преобразува низове в различни хаш-извл
|
|||
|
||||
#: searx/plugins/hash_plugin.py:52
|
||||
msgid "hash digest"
|
||||
msgstr ""
|
||||
msgstr "хеш извлечение"
|
||||
|
||||
#: searx/plugins/hostname_replace.py:9
|
||||
msgid "Hostname replace"
|
||||
|
@ -323,7 +353,7 @@ msgstr ""
|
|||
"категории. (Необходим е JavaScript)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgid "Self Information"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
|
@ -334,27 +364,31 @@ msgstr "Показва IP-то ви и др. инфо, ако търсенето
|
|||
|
||||
#: searx/plugins/tor_check.py:25
|
||||
msgid "Tor check plugin"
|
||||
msgstr ""
|
||||
msgstr "Проверка на Tor приставката"
|
||||
|
||||
#: searx/plugins/tor_check.py:28
|
||||
msgid ""
|
||||
"This plugin checks if the address of the request is a TOR exit node, and "
|
||||
"informs the user if it is, like check.torproject.org but from searxng."
|
||||
msgstr ""
|
||||
"Тази добавка проверява дали адресът на заявката е изходен възел на TOR и "
|
||||
"осведомява потребителя ако е - като check.torproject.org, но от searxng."
|
||||
|
||||
#: searx/plugins/tor_check.py:62
|
||||
msgid ""
|
||||
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
|
||||
"unreachable."
|
||||
msgstr ""
|
||||
"Листа с изходните възли на TOR (https://check.torproject.org/exit-"
|
||||
"addresses) е недостижим."
|
||||
|
||||
#: searx/plugins/tor_check.py:78
|
||||
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
|
||||
msgstr ""
|
||||
msgstr "Използвате TOR. Вашият IP адрес изглежда е: {ip_address}."
|
||||
|
||||
#: searx/plugins/tor_check.py:84
|
||||
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
|
||||
msgstr ""
|
||||
msgstr "Не използвате TOR. Вашият IP адрес изглежда е: {ip_address}."
|
||||
|
||||
#: searx/plugins/tracker_url_remover.py:29
|
||||
msgid "Tracker URL remover"
|
||||
|
@ -366,7 +400,7 @@ msgstr "Премахни следящите аргументи от върнат
|
|||
|
||||
#: searx/plugins/vim_hotkeys.py:3
|
||||
msgid "Vim-like hotkeys"
|
||||
msgstr "\"Vim\" наподобяващи клавишни комбинации"
|
||||
msgstr "Vim наподобяващи клавишни комбинации"
|
||||
|
||||
#: searx/plugins/vim_hotkeys.py:4
|
||||
msgid ""
|
||||
|
@ -392,7 +426,7 @@ msgstr "търси страница"
|
|||
|
||||
#: searx/templates/simple/base.html:46
|
||||
msgid "About"
|
||||
msgstr "Относно за"
|
||||
msgstr "Относно"
|
||||
|
||||
#: searx/templates/simple/base.html:50
|
||||
msgid "Donate"
|
||||
|
@ -408,8 +442,8 @@ msgid "Powered by"
|
|||
msgstr "С подкрепата на"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgstr "за спазване на поверителността, хакерска метатърсачка"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
msgid "Source code"
|
||||
|
@ -446,6 +480,7 @@ msgstr "Дължина"
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr "Автор"
|
||||
|
||||
|
@ -459,19 +494,21 @@ msgstr "прекарана"
|
|||
|
||||
#: searx/templates/simple/new_issue.html:64
|
||||
msgid "Start submiting a new issue on GitHub"
|
||||
msgstr ""
|
||||
msgstr "Предявете нов проблем в GitHub"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:66
|
||||
msgid "Please check for existing bugs about this engine on GitHub"
|
||||
msgstr ""
|
||||
msgstr "Моля проверете за съществуващи бъгове на търсачката в GitHub"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:69
|
||||
msgid "I confirm there is no existing bug about the issue I encounter"
|
||||
msgstr ""
|
||||
msgstr "Потвърждавам, че няма съществуващи бъогве за проблема, който срещнах"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:71
|
||||
msgid "If this is a public instance, please specify the URL in the bug report"
|
||||
msgstr ""
|
||||
"Ако това е публична инстанция, моля предоставете URL адресът в отзива за "
|
||||
"бъга"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:72
|
||||
msgid "Submit a new issue on Github including the above information"
|
||||
|
@ -491,17 +528,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr "Виж грешката и я докладвай"
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr "Медиaна"
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr ""
|
||||
msgstr "P80"
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr ""
|
||||
|
||||
|
@ -573,7 +610,7 @@ msgstr "Филтрирай съдържание"
|
|||
|
||||
#: searx/templates/simple/preferences.html:157
|
||||
msgid "Open Access DOI resolver"
|
||||
msgstr ""
|
||||
msgstr "Дигитален идентификатор на обекти с отворен достъп"
|
||||
|
||||
#: searx/templates/simple/preferences.html:167
|
||||
msgid ""
|
||||
|
@ -665,7 +702,7 @@ msgstr "HTTP Метод"
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
|
@ -713,6 +750,8 @@ msgid ""
|
|||
"This tab does not show up for search results, but you can search the "
|
||||
"engines listed here via bangs."
|
||||
msgstr ""
|
||||
"Този раздел не се показва за резултатите от търсенето, но можете да "
|
||||
"прегледате търсачките, изброени тук."
|
||||
|
||||
#: searx/templates/simple/preferences.html:307
|
||||
#: searx/templates/simple/preferences.html:358
|
||||
|
@ -932,67 +971,63 @@ msgstr "Резултати"
|
|||
msgid "Result count"
|
||||
msgstr "Брой резултати"
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr "Общо"
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr "HTTP"
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr "Обработка"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr "Предупреждения"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr ""
|
||||
msgstr "Грешки и изключения"
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr ""
|
||||
msgstr "Изключение"
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr "Съобщение"
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr "Процент"
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr "Параметър"
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr "Име на файла"
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr "Функция"
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr "Код"
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr "Проверител"
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr "Неуспешен тест"
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr "Коментар (и)"
|
||||
|
||||
|
@ -1081,6 +1116,50 @@ msgstr "покажи карта"
|
|||
msgid "hide map"
|
||||
msgstr "скрий картата"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr "магнитна връзка"
|
||||
|
@ -1375,3 +1454,27 @@ msgstr "скрий видеото"
|
|||
#~ msgid "preferences"
|
||||
#~ msgstr "предпочитания"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr "за спазване на поверителността, хакерска метатърсачка"
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr "Няма резюме за тази публикация."
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
#~ "Променете начина, по който се изпращат"
|
||||
#~ " формите, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -8,17 +8,16 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-09-21 15:58+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language-Team: Bengali <https://weblate.bubu1.eu/projects/searxng/searxng/bn/"
|
||||
">\n"
|
||||
"Language: bn\n"
|
||||
"Language-Team: Bengali "
|
||||
"<https://weblate.bubu1.eu/projects/searxng/searxng/bn/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.13.1\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
|
||||
|
@ -126,6 +125,11 @@ msgstr "সফটওয়্যার উইকি"
|
|||
msgid "web"
|
||||
msgstr "ওয়েব"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr ""
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -141,91 +145,91 @@ msgstr "সাদা"
|
|||
msgid "dark"
|
||||
msgstr "কালো"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr "সময় শেষ"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "পার্স ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "HTTP প্রোটোকল ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "নেটওয়ার্ক ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "অপ্রত্যাশিত ক্র্যাশ"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "এইচটিটিপি ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "এইচটিটিপি সংযোগ ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "প্রক্সি ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "ক্যাপচা"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "অনেক বেশি অনুরোধ"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr "অ্যাক্সেস অমান্য"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr "সার্ভার এপিআই ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "কোন আইটেম পাওয়া যায়নি"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr "উৎস"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr "পরবর্তী পৃষ্ঠাটি লোড করার সময় ত্রুটি৷"
|
||||
msgstr "পরবর্তী পৃষ্ঠাটি লোড করার সময় ত্রুটি৷."
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "অবৈধ সেটিংস, অনুগ্রহ করে আপনার পছন্দগুলি সম্পাদনা করুন৷"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "অবৈধ সেটিংস"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "অনুসন্ধানের ত্রুটি"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr "স্থগিত"
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "{minutes} মিনিট আগে"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "{hours} ঘণ্টা, {minutes} মিনিট আগে"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr "স্থগিত"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "এলোমেলো মান জেনারেটর"
|
||||
|
@ -254,35 +258,54 @@ msgstr "{title} (অচল)"
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "এই এন্ট্রিটি দ্বারা বাতিল করা হয়েছে৷"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
msgstr "এই প্রকাশনার জন্য কোন বিমূর্ত উপলব্ধ নেই."
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr "চ্যানেল"
|
||||
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
msgid ""
|
||||
"Could not read that image url. This may be due to an unsupported file "
|
||||
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
|
||||
" WebP."
|
||||
msgstr ""
|
||||
"ছবির url টি পড়তে পারা যাচ্ছে না । এটি হতে পারে ফাইল ফরম্যাট এর পড়তে না পারা"
|
||||
"র জন্যে। TinEye কেবল JPEG, PNG, GIF, BMP, TIFF আর WebP ফরম্যাট কে পড়তে পারে।"
|
||||
"ছবির url টি পড়তে পারা যাচ্ছে না । এটি হতে পারে ফাইল ফরম্যাট এর পড়তে না "
|
||||
"পারার জন্যে। TinEye কেবল JPEG, PNG, GIF, BMP, TIFF আর WebP ফরম্যাট কে "
|
||||
"পড়তে পারে।"
|
||||
|
||||
#: searx/engines/tineye.py:46
|
||||
msgid ""
|
||||
"The image is too simple to find matches. TinEye requires a basic level of"
|
||||
" visual detail to successfully identify matches."
|
||||
msgstr ""
|
||||
"এই ছবিটি খুবই সাধারণ হওয়ায় কোন মিল পাওয়া যাচ্ছে না। TinEye এর একটু চাক্ষু"
|
||||
"ষ বিস্তর প্রয়োজন সফল ভাবে মিল পাওয়ার জন্যে ।"
|
||||
"এই ছবিটি খুবই সাধারণ হওয়ায় কোন মিল পাওয়া যাচ্ছে না। TinEye এর একটু "
|
||||
"চাক্ষুষ বিস্তর প্রয়োজন সফল ভাবে মিল পাওয়ার জন্যে ।"
|
||||
|
||||
#: searx/engines/tineye.py:52
|
||||
msgid "The image could not be downloaded."
|
||||
msgstr "ছবিটি ডাউনলোড করা যায়নি ।"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "স্ট্রিংগুলিকে বিভিন্ন হ্যাশ ডাইজেস্টে রূপান্তর করে।"
|
||||
|
@ -308,8 +331,8 @@ msgid ""
|
|||
"Avoid paywalls by redirecting to open-access versions of publications "
|
||||
"when available"
|
||||
msgstr ""
|
||||
"Paywall এড়িয়ে চলতে প্রকাশন গুলির open-access সংস্করণে রিডাইরেক্ট করুন উপলব্"
|
||||
"ধ থাকলে"
|
||||
"Paywall এড়িয়ে চলতে প্রকাশন গুলির open-access সংস্করণে রিডাইরেক্ট করুন "
|
||||
"উপলব্ধ থাকলে"
|
||||
|
||||
#: searx/plugins/search_on_category_select.py:19
|
||||
msgid "Search on category select"
|
||||
|
@ -320,12 +343,12 @@ msgid ""
|
|||
"Perform search immediately if a category selected. Disable to select "
|
||||
"multiple categories. (JavaScript required)"
|
||||
msgstr ""
|
||||
"যখন একটি বিভাগ নির্বাচন করা হয়, অনুসন্ধান অবিলম্বে সঞ্চালিত হয়. একাধিক বিভা"
|
||||
"গ নির্বাচন করতে অক্ষম করুন। (জাভাস্ক্রিপ্ট প্রয়োজন)"
|
||||
"যখন একটি বিভাগ নির্বাচন করা হয়, অনুসন্ধান অবিলম্বে সঞ্চালিত হয়. একাধিক "
|
||||
"বিভাগ নির্বাচন করতে অক্ষম করুন। (জাভাস্ক্রিপ্ট প্রয়োজন)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgstr "নিজের তথ্য"
|
||||
msgid "Self Information"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
msgid ""
|
||||
|
@ -406,7 +429,7 @@ msgid "Powered by"
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
|
@ -444,6 +467,7 @@ msgstr "দৈর্ঘ্য"
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr "লেখক"
|
||||
|
||||
|
@ -487,17 +511,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr ""
|
||||
|
||||
|
@ -659,7 +683,7 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
|
@ -913,67 +937,63 @@ msgstr ""
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr "মোট"
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr "এইচটিটিপি"
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr "প্রক্রিয়ারত"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr "সতর্কতা"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr "ব্যতিক্রম"
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr "বার্তা"
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr "শতাংশ"
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr "কোড"
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr "মন্তব্য"
|
||||
|
||||
|
@ -1060,6 +1080,50 @@ msgstr ""
|
|||
msgid "hide map"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr ""
|
||||
|
@ -1120,3 +1184,23 @@ msgstr ""
|
|||
|
||||
#~ msgid "preferences"
|
||||
#~ msgstr "পছন্দসমূহ"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr "এই প্রকাশনার জন্য কোন বিমূর্ত উপলব্ধ নেই."
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr "নিজের তথ্য"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ 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-07-23 14:08+0000\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2021-12-17 07:17+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language: bo\n"
|
||||
|
@ -126,6 +126,11 @@ msgstr ""
|
|||
msgid "web"
|
||||
msgstr ""
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr ""
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -141,91 +146,91 @@ msgstr ""
|
|||
msgid "dark"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "རྣམ་གྲངས་གང་ཡང་རྙེད་རྒྱུ་མ་བྱུང་།"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།ཁྱེད་ཀྱིས་གདམ་ཀ་ལ་བཅོས་སྒྲིག་གཏོང་རོགས།"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "ནུས་མེད་ཀྱི་སྒྲིག་འགོད།"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "འཚོལ་བཤེར་ལ་ནོར་འཁྲུལ་བྱུང་།"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "སྐར་མ་ {minutes} སྔོན་ལ།"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "ཆུ་ཚོད་ {hours} དང་སྐར་མ {minutes} སྔོན་ལ།"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "ངེས་མེད་གྲངས་ཀ་མཁོ་སྤྲོད།"
|
||||
|
@ -254,12 +259,14 @@ msgstr ""
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "འཚོལ་བྱང་འདི་གཞན་གྱིས་ཚབ་བྱེད་འདུག"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
msgid "Channel"
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
|
@ -279,6 +286,22 @@ msgstr ""
|
|||
msgid "The image could not be downloaded."
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr ""
|
||||
|
@ -320,7 +343,7 @@ msgstr ""
|
|||
"multiple categories. (JavaScript required)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgid "Self Information"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
|
@ -402,8 +425,8 @@ msgid "Powered by"
|
|||
msgstr "བཟོ་སྐུན་པ་ནི"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgstr "མི་སྒེར་ཆ་འཕྲིན་ལ་བརྩི་གསོག་ལྡན་ཞིང་འཚོལ་བྱེད་ནང་དོན་ཕུན་སུམ་པའི་འཚོལ་བཤེར་སྒུལ་བྱེད་མ་ལག"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
msgid "Source code"
|
||||
|
@ -440,6 +463,7 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
|
||||
|
@ -483,17 +507,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr ""
|
||||
|
||||
|
@ -655,7 +679,7 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
|
@ -909,67 +933,63 @@ msgstr "ཐོབ་སྐར།"
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr "འཚོལ་འབྲས་རེ་རེ་ཡི་ཐོབ་སྐར།"
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1058,6 +1078,50 @@ msgstr "ས་བཀྲ་འཆར།"
|
|||
msgid "hide map"
|
||||
msgstr "ས་བཀྲ་སྦས།"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr "ཐོན་ཁུངས་ཀྱི་དྲ་གནས།"
|
||||
|
@ -1356,3 +1420,22 @@ msgstr "རྙན་ཟློས་སྦས།"
|
|||
#~ msgid "preferences"
|
||||
#~ msgstr "སྒྲིག་བཀོད།"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr "འཚོལ་འབྲས་རེ་རེ་ཡི་ཐོབ་སྐར།"
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr "མི་སྒེར་ཆ་འཕྲིན་ལ་བརྩི་གསོག་ལྡན་ཞིང་འཚོལ་བྱེད་ནང་དོན་ཕུན་སུམ་པའི་འཚོལ་བཤེར་སྒུལ་བྱེད་མ་ལག"
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
Binary file not shown.
|
@ -9,13 +9,15 @@
|
|||
# Gerard Oliva Viñas <oliva3032001@gmail.com>, 2022.
|
||||
# adriadam10 <adriadam10@gmail.com>, 2022.
|
||||
# alexfs2015 <alex04fs@gmail.com>, 2022.
|
||||
# Joan Montané <joan@montane.cat>, 2022.
|
||||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
|
||||
"Last-Translator: alexfs2015 <alex04fs@gmail.com>\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-09-30 07:43+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language-Team: Catalan <https://weblate.bubu1.eu/projects/searxng/searxng/ca/"
|
||||
">\n"
|
||||
"Language: ca\n"
|
||||
|
@ -23,7 +25,7 @@ msgstr ""
|
|||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.13.1\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
|
||||
|
@ -131,6 +133,11 @@ msgstr "wikis de programari"
|
|||
msgid "web"
|
||||
msgstr "web"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr "articles científics"
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -146,91 +153,91 @@ msgstr "clar"
|
|||
msgid "dark"
|
||||
msgstr "fosc"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr "expirat"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "error de processament"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "error de protocol HTTP"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "error de xarxa"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "tancament ineseperat"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "error HTTP"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "error de connexió HTTP"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "error de servidor intermediari"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "massa peticions"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr "accés denegat"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr "error en la API del servidor"
|
||||
msgstr "error en l'API del servidor"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "No s'ha trobat cap element"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr "Origen"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr "S'ha produït un error en carregar la pàgina següent"
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "La configuració no és vàlida, editeu-la"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "La configuració no és vàlida"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "error en la cerca"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr "Suspès"
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "fa {minutes} minuts"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "fa {hours} hores i {minutes} minuts"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr "Suspès"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "Generador de valor aleatori"
|
||||
|
@ -259,36 +266,57 @@ msgstr "{title} (OBSOLET)"
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "Aquesta entrada ha estat substituïda per"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
msgstr "No hi ha resum disponible per a aquesta publicació."
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr "Canal"
|
||||
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
"{numCitations} cites desde l'any {firstCitationVelocityYear} al "
|
||||
"{lastCitationVelocityYear}"
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
msgid ""
|
||||
"Could not read that image url. This may be due to an unsupported file "
|
||||
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
|
||||
" WebP."
|
||||
msgstr ""
|
||||
"No s'ha pogut llegir l'URL de la imatge. Això pot ser degut a un format de "
|
||||
"fitxer no compatible. TinEye només admet imatges en format JPEG, PNG, GIF, "
|
||||
"BMP, TIFF o WebP."
|
||||
"No s'ha pogut llegir l'URL de la imatge. Això pot ser degut a un format "
|
||||
"de fitxer no compatible. TinEye només admet imatges en format JPEG, PNG, "
|
||||
"GIF, BMP, TIFF o WebP."
|
||||
|
||||
#: searx/engines/tineye.py:46
|
||||
msgid ""
|
||||
"The image is too simple to find matches. TinEye requires a basic level of"
|
||||
" visual detail to successfully identify matches."
|
||||
msgstr ""
|
||||
"La imatge és massa senzilla per trobar coincidències. TinEye requereix un "
|
||||
"nivell bàsic de detall visual per identificar amb èxit les coincidències."
|
||||
"La imatge és massa senzilla per trobar coincidències. TinEye requereix un"
|
||||
" nivell bàsic de detall visual per identificar amb èxit les "
|
||||
"coincidències."
|
||||
|
||||
#: searx/engines/tineye.py:52
|
||||
msgid "The image could not be downloaded."
|
||||
msgstr "No s'ha pogut baixar la imatge."
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr "Matí"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr "Migdia"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr "Vespre"
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr "Nit"
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "Converteix cadenes a diferent formats de resum."
|
||||
|
@ -332,7 +360,7 @@ msgstr ""
|
|||
"Desactiveu-ho per a seleccionar més d'una categoria. (Cal JavaScript)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgid "Self Information"
|
||||
msgstr "Informació pròpia"
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
|
@ -352,17 +380,17 @@ msgid ""
|
|||
"This plugin checks if the address of the request is a TOR exit node, and "
|
||||
"informs the user if it is, like check.torproject.org but from searxng."
|
||||
msgstr ""
|
||||
"Aquest plugin comprova si l'adreça de la sol·licitud és un node de sortida "
|
||||
"TOR i informa a l'usuari si ho és, com check.torproject.org però des de "
|
||||
"searxng."
|
||||
"Aquest plugin comprova si l'adreça de la sol·licitud és un node de "
|
||||
"sortida TOR i informa a l'usuari si ho és, com check.torproject.org però "
|
||||
"des de searxng."
|
||||
|
||||
#: searx/plugins/tor_check.py:62
|
||||
msgid ""
|
||||
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
|
||||
"unreachable."
|
||||
msgstr ""
|
||||
"No es pot accedir a la llista de nodes de sortida TOR (https://check."
|
||||
"torproject.org/exit-addresses)."
|
||||
"No es pot accedir a la llista de nodes de sortida TOR "
|
||||
"(https://check.torproject.org/exit-addresses)."
|
||||
|
||||
#: searx/plugins/tor_check.py:78
|
||||
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
|
||||
|
@ -378,7 +406,7 @@ msgstr "Suprimeix l'URL de rastreig"
|
|||
|
||||
#: searx/plugins/tracker_url_remover.py:30
|
||||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr "Suprimeix els arguments de rastreig de les URL retornades"
|
||||
msgstr "Suprimeix els arguments de rastreig dels URL retornats"
|
||||
|
||||
#: searx/plugins/vim_hotkeys.py:3
|
||||
msgid "Vim-like hotkeys"
|
||||
|
@ -400,7 +428,7 @@ msgstr "No s'ha trobat la pàgina"
|
|||
#: searx/templates/simple/404.html:6
|
||||
#, python-format
|
||||
msgid "Go to %(search_page)s."
|
||||
msgstr "Vés a %(search_page)s."
|
||||
msgstr "Ves a %(search_page)s."
|
||||
|
||||
#: searx/templates/simple/404.html:6
|
||||
msgid "search page"
|
||||
|
@ -408,7 +436,7 @@ msgstr "pàgina de cerca"
|
|||
|
||||
#: searx/templates/simple/base.html:46
|
||||
msgid "About"
|
||||
msgstr "Sobre Nosaltres"
|
||||
msgstr "Quant a"
|
||||
|
||||
#: searx/templates/simple/base.html:50
|
||||
msgid "Donate"
|
||||
|
@ -424,8 +452,8 @@ msgid "Powered by"
|
|||
msgstr "Funciona amb"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgstr "un meta motor de cerca personalitzable i respectuós amb la privadesa"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr "metacercador obert, que respecta la privacitat"
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
msgid "Source code"
|
||||
|
@ -462,6 +490,7 @@ msgstr "Longitud"
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
|
@ -479,17 +508,15 @@ msgstr "Enviar un nou problema a GitHub"
|
|||
|
||||
#: searx/templates/simple/new_issue.html:66
|
||||
msgid "Please check for existing bugs about this engine on GitHub"
|
||||
msgstr "Si us plau revisa si ja hi ha un problema amb aquest motor a GitHub"
|
||||
msgstr "Comproveu si ja hi ha cap problema amb aquest motor a GitHub"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:69
|
||||
msgid "I confirm there is no existing bug about the issue I encounter"
|
||||
msgstr "Confirmo que no hi ha un bug relacionat amb el problema que he trobat"
|
||||
msgstr "Confirmo que no hi ha un problema relacionat amb el problema que he trobat"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:71
|
||||
msgid "If this is a public instance, please specify the URL in the bug report"
|
||||
msgstr ""
|
||||
"Si aquesta és una instància pública, si us plau especifica la URL al report "
|
||||
"del bug"
|
||||
msgstr "Si aquesta és una instància pública, indiqueu l'URL a l'informe d'error"
|
||||
|
||||
#: searx/templates/simple/new_issue.html:72
|
||||
msgid "Submit a new issue on Github including the above information"
|
||||
|
@ -507,17 +534,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr "Mostra els informes d'error i envia un informe d'error"
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr "Mitjà"
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr "P80"
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr "P95"
|
||||
|
||||
|
@ -683,13 +710,13 @@ msgstr "Mètode HTTP"
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
"Canvia com es trameten els formularis, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">més informació sobre els mètodes de petició</a>"
|
||||
"Canvia com es trameten els formularis, <a href=\"http://en.wikipedia.org/"
|
||||
"wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">més "
|
||||
"informació sobre els mètodes de petició</a>"
|
||||
|
||||
#: searx/templates/simple/preferences.html:269
|
||||
msgid "Image proxy"
|
||||
|
@ -835,8 +862,8 @@ msgid ""
|
|||
"Note: specifying custom settings in the search URL can reduce privacy by "
|
||||
"leaking data to the clicked result sites."
|
||||
msgstr ""
|
||||
"Nota: si indiqueu configuracions personalitzades en la URL de cerca podeu"
|
||||
" reduir la privadesa, amb filtració de dades, en fer clic als llocs dels "
|
||||
"Nota: si indiqueu configuracions personalitzades en l'URL de cerca, podeu"
|
||||
" reduir-ne la privadesa i filtrar dades, en fer clic en els llocs dels "
|
||||
"resultats."
|
||||
|
||||
#: searx/templates/simple/preferences.html:419
|
||||
|
@ -864,8 +891,8 @@ msgid ""
|
|||
"These cookies serve your sole convenience, we don't use these cookies to "
|
||||
"track you."
|
||||
msgstr ""
|
||||
"Aquestes galetes només són per a la vostra conveniència. No les usem per "
|
||||
"a rastrejar-vos."
|
||||
"Aquestes galetes només són per a la vostra comoditat. No les usem per a "
|
||||
"rastrejar-vos."
|
||||
|
||||
#: searx/templates/simple/preferences.html:433
|
||||
msgid "Save"
|
||||
|
@ -955,67 +982,63 @@ msgstr "Valoració"
|
|||
msgid "Result count"
|
||||
msgstr "Resultats"
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr "Valoració segons el resultat"
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr "HTTP"
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr "S'està processant"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr "Avisos"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr "Errors i excepcions"
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr "Excepció"
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr "Missatge"
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr "Percentatge"
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr "Paràmetre"
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr "Nom de fitxer"
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr "Funció"
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr "Codi"
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr "Comprovador"
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr "Prova fallida"
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr "Comentaris"
|
||||
|
||||
|
@ -1104,6 +1127,50 @@ msgstr "mostra el mapa"
|
|||
msgid "hide map"
|
||||
msgstr "amaga el mapa"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr "Data de publicació"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr "Diari"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr "Redactor"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr "Editor"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr "Tipus"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetes"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr "DOI"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr "ISSN"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr "ISBN"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr "PDF"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr "HTML"
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr "enllaç magnet"
|
||||
|
@ -1407,3 +1474,27 @@ msgstr "amaga el vídeo"
|
|||
|
||||
#~ msgid "preferences"
|
||||
#~ msgstr "preferències"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr "Valoració segons el resultat"
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr "un meta motor de cerca personalitzable i respectuós amb la privadesa"
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr "No hi ha resum disponible per a aquesta publicació."
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr "Informació pròpia"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
#~ "Canvia com es trameten els formularis,"
|
||||
#~ " <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">més informació sobre els "
|
||||
#~ "mètodes de petició</a>"
|
||||
|
|
Binary file not shown.
|
@ -12,20 +12,19 @@
|
|||
# LagManCZ <lagmen@post.cz>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-09-21 15:58+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language-Team: Czech <https://weblate.bubu1.eu/projects/searxng/searxng/cs/>"
|
||||
"\n"
|
||||
"Language: cs\n"
|
||||
"Language-Team: Czech "
|
||||
"<https://weblate.bubu1.eu/projects/searxng/searxng/cs/>\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && "
|
||||
"n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
|
||||
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
"X-Generator: Weblate 4.13.1\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
|
||||
|
@ -133,6 +132,11 @@ msgstr "softwarové wikipédie"
|
|||
msgid "web"
|
||||
msgstr "web"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr ""
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
|
@ -148,91 +152,91 @@ msgstr "světlý"
|
|||
msgid "dark"
|
||||
msgstr "tmavý"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr "čas vypršel"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "chyba parsování"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "chyba HTTP protokolu"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "síťová chyba"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "nečekaná chyba"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "chyba HTTP"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "Chyba spojení HTTP"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "chyba proxy"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "příliš mnoho požadavků"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr "přístup odepřen"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr "chyba API serveru"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "Nic nenalezeno"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr "zdroj"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr "Chyba při načítání další stránky"
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Neplatné nastavení, upravte své předvolby"
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "Neplatné nastavení"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "chyba vyhledávání"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr "Pozastaveno"
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "před {minutes} minutami"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "před {hours} hodinami, {minutes} minutami"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr "Pozastaveno"
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr "Generátor náhodných hodnot"
|
||||
|
@ -261,14 +265,16 @@ msgstr "{title} (ZASTARALÉ)"
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr "Tato položka byla nahrazena položkou"
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
msgstr "Pro tuto publikaci neexistuje žádný abstrakt."
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr "Kanál"
|
||||
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
msgid ""
|
||||
"Could not read that image url. This may be due to an unsupported file "
|
||||
|
@ -276,8 +282,8 @@ msgid ""
|
|||
" WebP."
|
||||
msgstr ""
|
||||
"Nelze načíst url adresu obrázku. Příčinou může být nepodporovaný formát "
|
||||
"souboru. TinEye podporuje pouze obrázky ve formátu JPEG, PNG, GIF, BMP, TIFF "
|
||||
"nebo WebP."
|
||||
"souboru. TinEye podporuje pouze obrázky ve formátu JPEG, PNG, GIF, BMP, "
|
||||
"TIFF nebo WebP."
|
||||
|
||||
#: searx/engines/tineye.py:46
|
||||
msgid ""
|
||||
|
@ -291,6 +297,22 @@ msgstr ""
|
|||
msgid "The image could not be downloaded."
|
||||
msgstr "Obrázek se nepodařilo stáhnout."
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "Převádí řetězce na různé hash hodnoty."
|
||||
|
@ -332,8 +354,8 @@ msgstr ""
|
|||
"vypnuta, je možné vybrat více kategorií (vyžaduje JavaScript)"
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgstr "Informace o sobě"
|
||||
msgid "Self Information"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
msgid ""
|
||||
|
@ -365,9 +387,7 @@ msgstr ""
|
|||
|
||||
#: searx/plugins/tor_check.py:78
|
||||
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
|
||||
msgstr ""
|
||||
"List výstupního uzlu TORu (https://check.torproject.org/exit-addresses) "
|
||||
"je nedosažitelný."
|
||||
msgstr "Používáte TOR. Zdá se, že vaše IP adresa je: {ip_address}."
|
||||
|
||||
#: searx/plugins/tor_check.py:84
|
||||
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
|
||||
|
@ -425,8 +445,8 @@ msgid "Powered by"
|
|||
msgstr "Poháněno softwarem"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgstr "soukromí respektujícím, nastavitelným multivyhledávačem"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
msgid "Source code"
|
||||
|
@ -463,6 +483,7 @@ msgstr "Délka"
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr "Autor"
|
||||
|
||||
|
@ -508,17 +529,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr "Zobrazit ladící záznamy a poslat hlášení o chybě"
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr "Medián"
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr "P80"
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr "P95"
|
||||
|
||||
|
@ -682,13 +703,10 @@ msgstr "Metoda HTTP"
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
"Určuje způsob odesílání formulářů. Informace o dotazovacích metodách <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">viz Wikipedie</a>"
|
||||
|
||||
#: searx/templates/simple/preferences.html:269
|
||||
msgid "Image proxy"
|
||||
|
@ -953,67 +971,63 @@ msgstr "Skóre"
|
|||
msgid "Result count"
|
||||
msgstr "Počet výsledků"
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr "Skóre na výsledek"
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr "Celkem"
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr "HTTP"
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr "Zpracovávám"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr "Varování"
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr "Chyby a výjimky"
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr "Výjimka"
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr "Zpráva"
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr "Procenta"
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr "Parametr"
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr "Název souboru"
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr "Funkce"
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr "Kód"
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr "Zkoušeč"
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr "Test selhal"
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr "Komentář(e)"
|
||||
|
||||
|
@ -1102,6 +1116,50 @@ msgstr "zobrazit mapu"
|
|||
msgid "hide map"
|
||||
msgstr "skrýt mapu"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr "odkaz magnet"
|
||||
|
@ -1403,3 +1461,27 @@ msgstr "skrýt video"
|
|||
|
||||
#~ msgid "preferences"
|
||||
#~ msgstr "nastavení"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr "Skóre na výsledek"
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr "soukromí respektujícím, nastavitelným multivyhledávačem"
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr "Pro tuto publikaci neexistuje žádný abstrakt."
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr "Informace o sobě"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
#~ "Určuje způsob odesílání formulářů. Informace"
|
||||
#~ " o dotazovacích metodách <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">viz Wikipedie</a>"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -5,22 +5,22 @@
|
|||
# Translators:
|
||||
# Cymrodor <aled@aledpowell.cymru>, 2019
|
||||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||
# CJ <charl.cj.monke@gmail.com>, 2022.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
|
||||
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
|
||||
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
|
||||
"Language-Team: Welsh <https://weblate.bubu1.eu/projects/searxng/searxng/cy/>"
|
||||
"\n"
|
||||
"POT-Creation-Date: 2022-09-28 07:29+0000\n"
|
||||
"PO-Revision-Date: 2022-09-28 07:29+0000\n"
|
||||
"Last-Translator: CJ <charl.cj.monke@gmail.com>\n"
|
||||
"Language: cy\n"
|
||||
"Language-Team: Welsh "
|
||||
"<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"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n==2) ? 1 : (n != 8 && n != "
|
||||
"11) ? 2 : 3;\n"
|
||||
"X-Generator: Weblate 4.13.1\n"
|
||||
"Generated-By: Babel 2.10.3\n"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
|
||||
|
@ -106,128 +106,133 @@ msgstr "geiriau"
|
|||
#. CATEGORY_GROUPS['PACKAGES']
|
||||
#: searx/searxng.msg
|
||||
msgid "packages"
|
||||
msgstr ""
|
||||
msgstr "pecyn"
|
||||
|
||||
#. CATEGORY_GROUPS['Q_A']
|
||||
#: searx/searxng.msg
|
||||
msgid "q&a"
|
||||
msgstr ""
|
||||
msgstr "q&a"
|
||||
|
||||
#. CATEGORY_GROUPS['REPOS']
|
||||
#: searx/searxng.msg
|
||||
msgid "repos"
|
||||
msgstr ""
|
||||
msgstr "repos"
|
||||
|
||||
#. CATEGORY_GROUPS['SOFTWARE_WIKIS']
|
||||
#: searx/searxng.msg
|
||||
msgid "software wikis"
|
||||
msgstr ""
|
||||
msgstr "wikis meddalwedd"
|
||||
|
||||
#. CATEGORY_GROUPS['WEB']
|
||||
#: searx/searxng.msg
|
||||
msgid "web"
|
||||
msgstr ""
|
||||
msgstr "gwe"
|
||||
|
||||
#. CATEGORY_GROUPS['SCIENTIFIC PUBLICATIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "scientific publications"
|
||||
msgstr "cyhoeddiadau gwyddonol"
|
||||
|
||||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
msgstr ""
|
||||
msgstr "auto"
|
||||
|
||||
#. STYLE_NAMES['LIGHT']
|
||||
#: searx/searxng.msg
|
||||
msgid "light"
|
||||
msgstr ""
|
||||
msgstr "golau"
|
||||
|
||||
#. STYLE_NAMES['DARK']
|
||||
#: searx/searxng.msg
|
||||
msgid "dark"
|
||||
msgstr "tywyll"
|
||||
|
||||
#: searx/webapp.py:165
|
||||
#: searx/webapp.py:164
|
||||
msgid "timeout"
|
||||
msgstr ""
|
||||
msgstr "amser allan"
|
||||
|
||||
#: searx/webapp.py:166
|
||||
#: searx/webapp.py:165
|
||||
msgid "parsing error"
|
||||
msgstr "gwall dosrannu"
|
||||
|
||||
#: searx/webapp.py:167
|
||||
#: searx/webapp.py:166
|
||||
msgid "HTTP protocol error"
|
||||
msgstr "Gwall protocol HTTP"
|
||||
|
||||
#: searx/webapp.py:168
|
||||
#: searx/webapp.py:167
|
||||
msgid "network error"
|
||||
msgstr "gwall rhwydwaith"
|
||||
|
||||
#: searx/webapp.py:170
|
||||
#: searx/webapp.py:169
|
||||
msgid "unexpected crash"
|
||||
msgstr "damwain annisgwyl"
|
||||
|
||||
#: searx/webapp.py:177
|
||||
#: searx/webapp.py:176
|
||||
msgid "HTTP error"
|
||||
msgstr "gwall http"
|
||||
|
||||
#: searx/webapp.py:178
|
||||
#: searx/webapp.py:177
|
||||
msgid "HTTP connection error"
|
||||
msgstr "gwall cysylltiad http"
|
||||
|
||||
#: searx/webapp.py:184
|
||||
#: searx/webapp.py:183
|
||||
msgid "proxy error"
|
||||
msgstr "gwall dirprwy"
|
||||
|
||||
#: searx/webapp.py:185
|
||||
#: searx/webapp.py:184
|
||||
msgid "CAPTCHA"
|
||||
msgstr "CAPTCHA"
|
||||
|
||||
#: searx/webapp.py:186
|
||||
#: searx/webapp.py:185
|
||||
msgid "too many requests"
|
||||
msgstr "gormod o geisiadau"
|
||||
|
||||
#: searx/webapp.py:187
|
||||
#: searx/webapp.py:186
|
||||
msgid "access denied"
|
||||
msgstr ""
|
||||
msgstr "mynediad wedi ei wrthod"
|
||||
|
||||
#: searx/webapp.py:188
|
||||
#: searx/webapp.py:187
|
||||
msgid "server API error"
|
||||
msgstr ""
|
||||
msgstr "gwall API gweinydd"
|
||||
|
||||
#: searx/webapp.py:363
|
||||
#: searx/webapp.py:362
|
||||
msgid "No item found"
|
||||
msgstr "Ni chanfuwyd eitem"
|
||||
|
||||
#: searx/engines/qwant.py:212
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:365
|
||||
#: searx/engines/qwant.py:217
|
||||
#: searx/templates/simple/result_templates/images.html:20 searx/webapp.py:364
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
msgstr "Ffynhonnell"
|
||||
|
||||
#: searx/webapp.py:367
|
||||
#: searx/webapp.py:366
|
||||
msgid "Error loading the next page"
|
||||
msgstr ""
|
||||
msgstr "Gwall wrth lwytho'r dudalen nesaf"
|
||||
|
||||
#: searx/webapp.py:516 searx/webapp.py:960
|
||||
#: searx/webapp.py:518 searx/webapp.py:950
|
||||
msgid "Invalid settings, please edit your preferences"
|
||||
msgstr "Gosodiadau annilys. Addasa dy ddewisiadau."
|
||||
|
||||
#: searx/webapp.py:532
|
||||
#: searx/webapp.py:534
|
||||
msgid "Invalid settings"
|
||||
msgstr "Gosodiadau annilys"
|
||||
|
||||
#: searx/webapp.py:609 searx/webapp.py:685
|
||||
#: searx/webapp.py:611 searx/webapp.py:687
|
||||
msgid "search error"
|
||||
msgstr "gwall chwilio"
|
||||
|
||||
#: searx/webapp.py:731
|
||||
#: searx/webapp.py:849
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
#: searx/webutils.py:161
|
||||
msgid "{minutes} minute(s) ago"
|
||||
msgstr "{minutes} munud yn ôl"
|
||||
|
||||
#: searx/webapp.py:733
|
||||
#: searx/webutils.py:162
|
||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||
msgstr "{hours} awr, {minutes} munud yn ôl"
|
||||
|
||||
#: searx/webapp.py:859
|
||||
msgid "Suspended"
|
||||
msgstr ""
|
||||
|
||||
#: searx/answerers/random/answerer.py:67
|
||||
msgid "Random value generator"
|
||||
msgstr ""
|
||||
|
@ -256,12 +261,14 @@ msgstr ""
|
|||
msgid "This entry has been superseded by"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/pubmed.py:78
|
||||
msgid "No abstract is available for this publication."
|
||||
#: searx/engines/qwant.py:219
|
||||
msgid "Channel"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/qwant.py:214
|
||||
msgid "Channel"
|
||||
#: searx/engines/semantic_scholar.py:81
|
||||
msgid ""
|
||||
"{numCitations} citations from the year {firstCitationVelocityYear} to "
|
||||
"{lastCitationVelocityYear}"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/tineye.py:40
|
||||
|
@ -281,6 +288,22 @@ msgstr ""
|
|||
msgid "The image could not be downloaded."
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Morning"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Noon"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Evening"
|
||||
msgstr ""
|
||||
|
||||
#: searx/engines/wttr.py:101
|
||||
msgid "Night"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:24
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr ""
|
||||
|
@ -318,7 +341,7 @@ msgid ""
|
|||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:20
|
||||
msgid "Self Informations"
|
||||
msgid "Self Information"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/self_info.py:21
|
||||
|
@ -400,7 +423,7 @@ msgid "Powered by"
|
|||
msgstr "Pwerwyd gan"
|
||||
|
||||
#: searx/templates/simple/base.html:64
|
||||
msgid "a privacy-respecting, hackable metasearch engine"
|
||||
msgid "a privacy-respecting, open metasearch engine"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/base.html:65
|
||||
|
@ -438,6 +461,7 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/macros.html:37
|
||||
#: searx/templates/simple/result_templates/images.html:18
|
||||
#: searx/templates/simple/result_templates/paper.html:6
|
||||
msgid "Author"
|
||||
msgstr ""
|
||||
|
||||
|
@ -481,17 +505,17 @@ msgid "View error logs and submit a bug report"
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:53
|
||||
#: searx/templates/simple/stats.html:67
|
||||
#: searx/templates/simple/stats.html:64
|
||||
msgid "Median"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:54
|
||||
#: searx/templates/simple/stats.html:73
|
||||
#: searx/templates/simple/stats.html:70
|
||||
msgid "P80"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences.html:55
|
||||
#: searx/templates/simple/stats.html:79
|
||||
#: searx/templates/simple/stats.html:76
|
||||
msgid "P95"
|
||||
msgstr ""
|
||||
|
||||
|
@ -653,7 +677,7 @@ msgstr ""
|
|||
|
||||
#: searx/templates/simple/preferences.html:264
|
||||
msgid ""
|
||||
"Change how forms are submited, <a "
|
||||
"Change how forms are submitted, <a "
|
||||
"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
" rel=\"external\">learn more about request methods</a>"
|
||||
msgstr ""
|
||||
|
@ -907,67 +931,63 @@ msgstr "Sgoriau"
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:38
|
||||
msgid "Scores per result"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:62
|
||||
#: searx/templates/simple/stats.html:59
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:63
|
||||
#: searx/templates/simple/stats.html:60
|
||||
msgid "HTTP"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:64
|
||||
#: searx/templates/simple/stats.html:61
|
||||
msgid "Processing"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Warnings"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:102
|
||||
#: searx/templates/simple/stats.html:99
|
||||
msgid "Errors and exceptions"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:108
|
||||
#: searx/templates/simple/stats.html:105
|
||||
msgid "Exception"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:110
|
||||
#: searx/templates/simple/stats.html:107
|
||||
msgid "Message"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:112
|
||||
#: searx/templates/simple/stats.html:109
|
||||
msgid "Percentage"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:114
|
||||
#: searx/templates/simple/stats.html:111
|
||||
msgid "Parameter"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:122
|
||||
#: searx/templates/simple/stats.html:119
|
||||
msgid "Filename"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:123
|
||||
#: searx/templates/simple/stats.html:120
|
||||
msgid "Function"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:124
|
||||
#: searx/templates/simple/stats.html:121
|
||||
msgid "Code"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:131
|
||||
#: searx/templates/simple/stats.html:128
|
||||
msgid "Checker"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:134
|
||||
#: searx/templates/simple/stats.html:131
|
||||
msgid "Failed test"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/stats.html:135
|
||||
#: searx/templates/simple/stats.html:132
|
||||
msgid "Comment(s)"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1056,6 +1076,50 @@ msgstr "dangos map"
|
|||
msgid "hide map"
|
||||
msgstr "cuddio map"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:9
|
||||
msgid "Journal"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:22
|
||||
msgid "Editor"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:23
|
||||
msgid "Publisher"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:24
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:26
|
||||
msgid "DOI"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:27
|
||||
msgid "ISSN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:28
|
||||
msgid "ISBN"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:33
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:34
|
||||
msgid "HTML"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/result_templates/torrent.html:6
|
||||
msgid "magnet link"
|
||||
msgstr "dolen magnet"
|
||||
|
@ -1354,3 +1418,23 @@ msgstr "cuddio fideo"
|
|||
|
||||
#~ msgid "preferences"
|
||||
#~ msgstr "dewisiadau"
|
||||
|
||||
#~ msgid "Scores per result"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "a privacy-respecting, hackable metasearch engine"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "No abstract is available for this publication."
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid "Self Informations"
|
||||
#~ msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Change how forms are submited, <a "
|
||||
#~ "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\""
|
||||
#~ " rel=\"external\">learn more about request "
|
||||
#~ "methods</a>"
|
||||
#~ msgstr ""
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue