forked from Ponysearch/Ponysearch
Merge remote-tracking branch 'refs/remotes/upstream/master'
This commit is contained in:
commit
b71882681d
195 changed files with 13720 additions and 2229 deletions
|
@ -172,3 +172,4 @@ features or generally made searx better:
|
||||||
- Bernie Huang `<https://github.com/BernieHuang2008>`
|
- Bernie Huang `<https://github.com/BernieHuang2008>`
|
||||||
- Austin Olacsi `<https://github.com/Austin-Olacsi>`
|
- Austin Olacsi `<https://github.com/Austin-Olacsi>`
|
||||||
- @micsthepick
|
- @micsthepick
|
||||||
|
- Daniel Kukula `<https://github.com/dkuku>`
|
||||||
|
|
|
@ -563,3 +563,7 @@ type.
|
||||||
* - source_code_url
|
* - source_code_url
|
||||||
- :py:class:`str`
|
- :py:class:`str`
|
||||||
- the location of the project's source code
|
- the location of the project's source code
|
||||||
|
|
||||||
|
* - links
|
||||||
|
- :py:class:`dict`
|
||||||
|
- additional links in the form of ``{'link_name': 'http://example.com'}``
|
||||||
|
|
8
docs/dev/engines/online/gitea.rst
Normal file
8
docs/dev/engines/online/gitea.rst
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
.. _gitea engine:
|
||||||
|
|
||||||
|
=====
|
||||||
|
Gitea
|
||||||
|
=====
|
||||||
|
|
||||||
|
.. automodule:: searx.engines.gitea
|
||||||
|
:members:
|
|
@ -17,7 +17,7 @@ If you don't trust anyone, you can set up your own, see :ref:`installation`.
|
||||||
- :ref:`no user tracking / no profiling <SearXNG protect privacy>`
|
- :ref:`no user tracking / no profiling <SearXNG protect privacy>`
|
||||||
- script & cookies are optional
|
- script & cookies are optional
|
||||||
- secure, encrypted connections
|
- secure, encrypted connections
|
||||||
- :ref:`about 130 search engines <configured engines>`
|
- :ref:`about 200 search engines <configured engines>`
|
||||||
- `about 60 translations <https://translate.codeberg.org/projects/searxng/searxng/>`_
|
- `about 60 translations <https://translate.codeberg.org/projects/searxng/searxng/>`_
|
||||||
- about 100 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
- about 100 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
||||||
- :ref:`easy integration of search engines <demo online engine>`
|
- :ref:`easy integration of search engines <demo online engine>`
|
||||||
|
|
9
docs/src/searx.plugins.unit_converter.rst
Normal file
9
docs/src/searx.plugins.unit_converter.rst
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
.. _unit converter plugin:
|
||||||
|
|
||||||
|
=====================
|
||||||
|
Unit converter plugin
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. automodule:: searx.plugins.unit_converter
|
||||||
|
:members:
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
mock==5.1.0
|
mock==5.1.0
|
||||||
nose2[coverage_plugin]==0.14.1
|
nose2[coverage_plugin]==0.14.2
|
||||||
cov-core==1.15.0
|
cov-core==1.15.0
|
||||||
black==24.3.0
|
black==24.3.0
|
||||||
pylint==3.1.0
|
pylint==3.2.2
|
||||||
splinter==0.21.0
|
splinter==0.21.0
|
||||||
selenium==4.20.0
|
selenium==4.21.0
|
||||||
Pallets-Sphinx-Themes==2.1.2
|
Pallets-Sphinx-Themes==2.1.3
|
||||||
Sphinx<=7.1.2; python_version == '3.8'
|
Sphinx<=7.1.2; python_version == '3.8'
|
||||||
Sphinx==7.3.7; python_version > '3.8'
|
Sphinx==7.3.7; python_version > '3.8'
|
||||||
sphinx-issues==4.1.0
|
sphinx-issues==4.1.0
|
||||||
|
@ -13,10 +13,13 @@ sphinx-jinja==2.0.2
|
||||||
sphinx-tabs==3.4.5
|
sphinx-tabs==3.4.5
|
||||||
sphinxcontrib-programoutput==0.17
|
sphinxcontrib-programoutput==0.17
|
||||||
sphinx-autobuild==2021.3.14
|
sphinx-autobuild==2021.3.14
|
||||||
sphinx-notfound-page==1.0.0
|
sphinx-notfound-page==1.0.2
|
||||||
myst-parser==2.0.0
|
myst-parser==3.0.1
|
||||||
linuxdoc==20231020
|
linuxdoc==20240509
|
||||||
aiounittest==1.4.2
|
aiounittest==1.4.2
|
||||||
yamllint==1.35.1
|
yamllint==1.35.1
|
||||||
wlc==1.14
|
wlc==1.14
|
||||||
coloredlogs==15.0.1
|
coloredlogs==15.0.1
|
||||||
|
docutils<=0.21; python_version == '3.8'
|
||||||
|
docutils>=0.21.2; python_version > '3.8'
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
certifi==2024.2.2
|
certifi==2024.2.2
|
||||||
babel==2.14.0
|
babel==2.15.0
|
||||||
flask-babel==4.0.0
|
flask-babel==4.0.0
|
||||||
flask==3.0.3
|
flask==3.0.3
|
||||||
jinja2==3.1.3
|
jinja2==3.1.4
|
||||||
lxml==5.2.1
|
lxml==5.2.2
|
||||||
pygments==2.17.2
|
pygments==2.18.0
|
||||||
python-dateutil==2.9.0.post0
|
python-dateutil==2.9.0.post0
|
||||||
pyyaml==6.0.1
|
pyyaml==6.0.1
|
||||||
httpx[http2]==0.24.1
|
httpx[http2]==0.24.1
|
||||||
|
@ -15,4 +15,4 @@ setproctitle==1.3.3
|
||||||
redis==5.0.4
|
redis==5.0.4
|
||||||
markdown-it-py==3.0.0
|
markdown-it-py==3.0.0
|
||||||
fasttext-predict==0.9.2.2
|
fasttext-predict==0.9.2.2
|
||||||
pytomlpp==1.0.13
|
pytomlpp==1.0.13; python_version < '3.11'
|
||||||
|
|
|
@ -13,7 +13,18 @@ import copy
|
||||||
import typing
|
import typing
|
||||||
import logging
|
import logging
|
||||||
import pathlib
|
import pathlib
|
||||||
import pytomlpp as toml
|
|
||||||
|
try:
|
||||||
|
import tomllib
|
||||||
|
|
||||||
|
pytomlpp = None
|
||||||
|
USE_TOMLLIB = True
|
||||||
|
except ImportError:
|
||||||
|
import pytomlpp
|
||||||
|
|
||||||
|
tomllib = None
|
||||||
|
USE_TOMLLIB = False
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['Config', 'UNSET', 'SchemaIssue']
|
__all__ = ['Config', 'UNSET', 'SchemaIssue']
|
||||||
|
|
||||||
|
@ -61,7 +72,7 @@ class Config:
|
||||||
# init schema
|
# init schema
|
||||||
|
|
||||||
log.debug("load schema file: %s", schema_file)
|
log.debug("load schema file: %s", schema_file)
|
||||||
cfg = cls(cfg_schema=toml.load(schema_file), deprecated=deprecated)
|
cfg = cls(cfg_schema=toml_load(schema_file), deprecated=deprecated)
|
||||||
if not cfg_file.exists():
|
if not cfg_file.exists():
|
||||||
log.warning("missing config file: %s", cfg_file)
|
log.warning("missing config file: %s", cfg_file)
|
||||||
return cfg
|
return cfg
|
||||||
|
@ -69,12 +80,7 @@ class Config:
|
||||||
# load configuration
|
# load configuration
|
||||||
|
|
||||||
log.debug("load config file: %s", cfg_file)
|
log.debug("load config file: %s", cfg_file)
|
||||||
try:
|
upd_cfg = toml_load(cfg_file)
|
||||||
upd_cfg = toml.load(cfg_file)
|
|
||||||
except toml.DecodeError as exc:
|
|
||||||
msg = str(exc).replace('\t', '').replace('\n', ' ')
|
|
||||||
log.error("%s: %s", cfg_file, msg)
|
|
||||||
raise
|
|
||||||
|
|
||||||
is_valid, issue_list = cfg.validate(upd_cfg)
|
is_valid, issue_list = cfg.validate(upd_cfg)
|
||||||
for msg in issue_list:
|
for msg in issue_list:
|
||||||
|
@ -176,6 +182,25 @@ class Config:
|
||||||
return getattr(m, name)
|
return getattr(m, name)
|
||||||
|
|
||||||
|
|
||||||
|
def toml_load(file_name):
|
||||||
|
if USE_TOMLLIB:
|
||||||
|
# Python >= 3.11
|
||||||
|
try:
|
||||||
|
with open(file_name, "rb") as f:
|
||||||
|
return tomllib.load(f)
|
||||||
|
except tomllib.TOMLDecodeError as exc:
|
||||||
|
msg = str(exc).replace('\t', '').replace('\n', ' ')
|
||||||
|
log.error("%s: %s", file_name, msg)
|
||||||
|
raise
|
||||||
|
# fallback to pytomlpp for Python < 3.11
|
||||||
|
try:
|
||||||
|
return pytomlpp.load(file_name)
|
||||||
|
except pytomlpp.DecodeError as exc:
|
||||||
|
msg = str(exc).replace('\t', '').replace('\n', ' ')
|
||||||
|
log.error("%s: %s", file_name, msg)
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
# working with dictionaries
|
# working with dictionaries
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -569,6 +569,7 @@
|
||||||
"pl": "Dinar Bahrajnu",
|
"pl": "Dinar Bahrajnu",
|
||||||
"pt": "dinar bareinita",
|
"pt": "dinar bareinita",
|
||||||
"ru": "бахрейнский динар",
|
"ru": "бахрейнский динар",
|
||||||
|
"sl": "bahrajnski dinar",
|
||||||
"sr": "бахреински динар",
|
"sr": "бахреински динар",
|
||||||
"sv": "Bahrainsk dinar",
|
"sv": "Bahrainsk dinar",
|
||||||
"ta": "பஹ்ரேன் தினார்",
|
"ta": "பஹ்ரேன் தினார்",
|
||||||
|
@ -601,6 +602,7 @@
|
||||||
"pt": "Franco do Burúndi",
|
"pt": "Franco do Burúndi",
|
||||||
"ro": "franc burundez",
|
"ro": "franc burundez",
|
||||||
"ru": "бурундийский франк",
|
"ru": "бурундийский франк",
|
||||||
|
"sl": "burundijski frank",
|
||||||
"sr": "бурундски франак",
|
"sr": "бурундски франак",
|
||||||
"sv": "Burundisk franc",
|
"sv": "Burundisk franc",
|
||||||
"ta": "புரூண்டி பிராங்க்",
|
"ta": "புரூண்டி பிராங்க்",
|
||||||
|
@ -1461,6 +1463,7 @@
|
||||||
"eu": "Peso dominikar",
|
"eu": "Peso dominikar",
|
||||||
"fi": "Dominikaanisen tasavallan peso",
|
"fi": "Dominikaanisen tasavallan peso",
|
||||||
"fr": "peso dominicain",
|
"fr": "peso dominicain",
|
||||||
|
"gl": "peso dominicano",
|
||||||
"he": "פסו דומיניקני",
|
"he": "פסו דומיניקני",
|
||||||
"hr": "Dominikanski pezo",
|
"hr": "Dominikanski pezo",
|
||||||
"hu": "dominikai peso",
|
"hu": "dominikai peso",
|
||||||
|
@ -1735,6 +1738,7 @@
|
||||||
"pt": "libra das Malvinas",
|
"pt": "libra das Malvinas",
|
||||||
"ro": "Liră din Insulele Falkland",
|
"ro": "Liră din Insulele Falkland",
|
||||||
"ru": "фунт Фолклендских островов",
|
"ru": "фунт Фолклендских островов",
|
||||||
|
"sl": "falklandski funt",
|
||||||
"sv": "Falklandspund",
|
"sv": "Falklandspund",
|
||||||
"tr": "Falkland Adaları poundu",
|
"tr": "Falkland Adaları poundu",
|
||||||
"uk": "Фолклендський фунт"
|
"uk": "Фолклендський фунт"
|
||||||
|
@ -2116,9 +2120,9 @@
|
||||||
"ar": "جوردة هايتية",
|
"ar": "جوردة هايتية",
|
||||||
"ca": "gourde",
|
"ca": "gourde",
|
||||||
"cs": "Haitský gourde",
|
"cs": "Haitský gourde",
|
||||||
"da": "Gourde",
|
"da": "gourde",
|
||||||
"de": "Gourde",
|
"de": "Gourde",
|
||||||
"en": "Gourde",
|
"en": "gourde",
|
||||||
"eo": "haitia gurdo",
|
"eo": "haitia gurdo",
|
||||||
"es": "gourde",
|
"es": "gourde",
|
||||||
"eu": "Gourde",
|
"eu": "Gourde",
|
||||||
|
@ -2127,20 +2131,20 @@
|
||||||
"he": "גורד",
|
"he": "גורד",
|
||||||
"hr": "Haićanski gourd",
|
"hr": "Haićanski gourd",
|
||||||
"hu": "haiti gourde",
|
"hu": "haiti gourde",
|
||||||
"id": "Gourde Haiti",
|
"id": "gourde Haiti",
|
||||||
"it": "Gourde haitiano",
|
"it": "gourde haitiano",
|
||||||
"ja": "グールド",
|
"ja": "グールド",
|
||||||
"ko": "아이티 구르드",
|
"ko": "아이티 구르드",
|
||||||
"lt": "Gurdas",
|
"lt": "Gurdas",
|
||||||
"ms": "Gourde Haiti",
|
"ms": "gourde Haiti",
|
||||||
"nl": "Haïtiaanse gourde",
|
"nl": "Haïtiaanse gourde",
|
||||||
"pa": "ਹੈਤੀਆਈ ਗੂਰਦ",
|
"pa": "ਹੈਤੀਆਈ ਗੂਰਦ",
|
||||||
"pl": "Gourde",
|
"pl": "gourde",
|
||||||
"pt": "Gourde",
|
"pt": "gourde",
|
||||||
"ru": "гаитянский гурд",
|
"ru": "гаитянский гурд",
|
||||||
"sr": "хаићански гурд",
|
"sr": "хаићански гурд",
|
||||||
"sv": "Gourde",
|
"sv": "gourde",
|
||||||
"tr": "Gourde",
|
"tr": "gourde",
|
||||||
"uk": "Гаїтянський гурд"
|
"uk": "Гаїтянський гурд"
|
||||||
},
|
},
|
||||||
"HUF": {
|
"HUF": {
|
||||||
|
@ -2790,6 +2794,7 @@
|
||||||
"pl": "Dinar kuwejcki",
|
"pl": "Dinar kuwejcki",
|
||||||
"pt": "dinar kuwaitiano",
|
"pt": "dinar kuwaitiano",
|
||||||
"ru": "кувейтский динар",
|
"ru": "кувейтский динар",
|
||||||
|
"sl": "kuvajtski dinar",
|
||||||
"sr": "кувајтски динар",
|
"sr": "кувајтски динар",
|
||||||
"sv": "Kuwaitisk dinar",
|
"sv": "Kuwaitisk dinar",
|
||||||
"ta": "குவைத் தினார்",
|
"ta": "குவைத் தினார்",
|
||||||
|
@ -3665,7 +3670,7 @@
|
||||||
"oc": "Córdoba (moneda)",
|
"oc": "Córdoba (moneda)",
|
||||||
"pa": "ਨਿਕਾਰਾਗੁਆਈ ਕੋਰਦੋਬਾ",
|
"pa": "ਨਿਕਾਰਾਗੁਆਈ ਕੋਰਦੋਬਾ",
|
||||||
"pl": "Cordoba oro",
|
"pl": "Cordoba oro",
|
||||||
"pt": "Córdoba (moeda)",
|
"pt": "Córdoba",
|
||||||
"ro": "Córdoba",
|
"ro": "Córdoba",
|
||||||
"ru": "никарагуанская кордоба",
|
"ru": "никарагуанская кордоба",
|
||||||
"sr": "никарагванска кордоба",
|
"sr": "никарагванска кордоба",
|
||||||
|
@ -3823,6 +3828,7 @@
|
||||||
"pl": "Rial omański",
|
"pl": "Rial omański",
|
||||||
"pt": "Rial omanense",
|
"pt": "Rial omanense",
|
||||||
"ru": "оманский риал",
|
"ru": "оманский риал",
|
||||||
|
"sl": "omanski rial",
|
||||||
"sr": "омански ријал",
|
"sr": "омански ријал",
|
||||||
"sv": "Omansk rial",
|
"sv": "Omansk rial",
|
||||||
"ta": "ஓமானி ரியால்",
|
"ta": "ஓமானி ரியால்",
|
||||||
|
@ -3924,6 +3930,7 @@
|
||||||
"pt": "Kina",
|
"pt": "Kina",
|
||||||
"ro": "Kina",
|
"ro": "Kina",
|
||||||
"ru": "Кина",
|
"ru": "Кина",
|
||||||
|
"sl": "kina",
|
||||||
"sr": "папуанска кина",
|
"sr": "папуанска кина",
|
||||||
"sv": "Papuansk Kina",
|
"sv": "Papuansk Kina",
|
||||||
"th": "กีนา",
|
"th": "กีนา",
|
||||||
|
@ -4324,6 +4331,7 @@
|
||||||
"bn": "সৌদি রিয়াল",
|
"bn": "সৌদি রিয়াল",
|
||||||
"ca": "riyal saudita",
|
"ca": "riyal saudita",
|
||||||
"cs": "saúdský rijál",
|
"cs": "saúdský rijál",
|
||||||
|
"da": "Saudiske riyal",
|
||||||
"de": "Saudi-Rial",
|
"de": "Saudi-Rial",
|
||||||
"en": "Saudi riyal",
|
"en": "Saudi riyal",
|
||||||
"eo": "sauda rialo",
|
"eo": "sauda rialo",
|
||||||
|
@ -5734,7 +5742,7 @@
|
||||||
"ca": "rial iemenita",
|
"ca": "rial iemenita",
|
||||||
"cs": "Jemenský rijál",
|
"cs": "Jemenský rijál",
|
||||||
"de": "Jemen-Rial",
|
"de": "Jemen-Rial",
|
||||||
"en": "Yemeni rial",
|
"en": "rial",
|
||||||
"eo": "jemena rialo",
|
"eo": "jemena rialo",
|
||||||
"es": "rial yemení",
|
"es": "rial yemení",
|
||||||
"fi": "Jemenin rial",
|
"fi": "Jemenin rial",
|
||||||
|
@ -6278,6 +6286,7 @@
|
||||||
"bahraini dinar": "BHD",
|
"bahraini dinar": "BHD",
|
||||||
"bahrainin dinaari": "BHD",
|
"bahrainin dinaari": "BHD",
|
||||||
"bahrainsk dinar": "BHD",
|
"bahrainsk dinar": "BHD",
|
||||||
|
"bahrajnski dinar": "BHD",
|
||||||
"bahrajnský dinár": "BHD",
|
"bahrajnský dinár": "BHD",
|
||||||
"bahreini dinár": "BHD",
|
"bahreini dinár": "BHD",
|
||||||
"bahreino dinaras": "BHD",
|
"bahreino dinaras": "BHD",
|
||||||
|
@ -6554,6 +6563,7 @@
|
||||||
"burundi frangı": "BIF",
|
"burundi frangı": "BIF",
|
||||||
"burundi frank": "BIF",
|
"burundi frank": "BIF",
|
||||||
"burundian franc": "BIF",
|
"burundian franc": "BIF",
|
||||||
|
"burundijski frank": "BIF",
|
||||||
"burundin frangi": "BIF",
|
"burundin frangi": "BIF",
|
||||||
"burundisk franc": "BIF",
|
"burundisk franc": "BIF",
|
||||||
"burundski franak": "BIF",
|
"burundski franak": "BIF",
|
||||||
|
@ -7824,6 +7834,7 @@
|
||||||
"falklandin punta": "FKP",
|
"falklandin punta": "FKP",
|
||||||
"falklandska funta": "FKP",
|
"falklandska funta": "FKP",
|
||||||
"falklandská libra": "FKP",
|
"falklandská libra": "FKP",
|
||||||
|
"falklandski funt": "FKP",
|
||||||
"falklandspund": "FKP",
|
"falklandspund": "FKP",
|
||||||
"fas dirhemi": "MAD",
|
"fas dirhemi": "MAD",
|
||||||
"fbu": "BIF",
|
"fbu": "BIF",
|
||||||
|
@ -9835,6 +9846,7 @@
|
||||||
"ny sol": "PEN",
|
"ny sol": "PEN",
|
||||||
"ny taiwan dollar": "TWD",
|
"ny taiwan dollar": "TWD",
|
||||||
"nyderlandų antilų guldenas": "ANG",
|
"nyderlandų antilų guldenas": "ANG",
|
||||||
|
"nytaiwanske dollar": "TWD",
|
||||||
"nyzeeländsk dollar": "NZD",
|
"nyzeeländsk dollar": "NZD",
|
||||||
"nz$": "NZD",
|
"nz$": "NZD",
|
||||||
"nzd": "NZD",
|
"nzd": "NZD",
|
||||||
|
@ -9855,6 +9867,7 @@
|
||||||
"omanitische rial": "OMR",
|
"omanitische rial": "OMR",
|
||||||
"omano rialas": "OMR",
|
"omano rialas": "OMR",
|
||||||
"omansk rial": "OMR",
|
"omansk rial": "OMR",
|
||||||
|
"omanski rial": "OMR",
|
||||||
"omanski rijal": "OMR",
|
"omanski rijal": "OMR",
|
||||||
"ománi riál": "OMR",
|
"ománi riál": "OMR",
|
||||||
"ománský rial": "OMR",
|
"ománský rial": "OMR",
|
||||||
|
@ -10225,7 +10238,6 @@
|
||||||
"pound sudan selatan": "SSP",
|
"pound sudan selatan": "SSP",
|
||||||
"pound suriah": "SYP",
|
"pound suriah": "SYP",
|
||||||
"pounds": "GBP",
|
"pounds": "GBP",
|
||||||
"poundsterling": "GBP",
|
|
||||||
"põhja korea vonn": "KPW",
|
"põhja korea vonn": "KPW",
|
||||||
"põhja korea won": "KPW",
|
"põhja korea won": "KPW",
|
||||||
"põhja makedoonia denaar": "MKD",
|
"põhja makedoonia denaar": "MKD",
|
||||||
|
@ -10325,6 +10337,7 @@
|
||||||
"rf.": "MVR",
|
"rf.": "MVR",
|
||||||
"rial": [
|
"rial": [
|
||||||
"YER",
|
"YER",
|
||||||
|
"OMR",
|
||||||
"SAR",
|
"SAR",
|
||||||
"IRR"
|
"IRR"
|
||||||
],
|
],
|
||||||
|
@ -10724,6 +10737,7 @@
|
||||||
"saudiarabisk rial": "SAR",
|
"saudiarabisk rial": "SAR",
|
||||||
"saudijski rijal": "SAR",
|
"saudijski rijal": "SAR",
|
||||||
"saudische riyal": "SAR",
|
"saudische riyal": "SAR",
|
||||||
|
"saudiske riyal": "SAR",
|
||||||
"saudo arabijos rialas": "SAR",
|
"saudo arabijos rialas": "SAR",
|
||||||
"saudski rial": "SAR",
|
"saudski rial": "SAR",
|
||||||
"saúdský rijál": "SAR",
|
"saúdský rijál": "SAR",
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1746,7 +1746,9 @@
|
||||||
"custom": {
|
"custom": {
|
||||||
"ui_lang": {
|
"ui_lang": {
|
||||||
"ca": "ca",
|
"ca": "ca",
|
||||||
|
"cs": "cs",
|
||||||
"de-DE": "de-de",
|
"de-DE": "de-de",
|
||||||
|
"el": "el",
|
||||||
"en-CA": "en-ca",
|
"en-CA": "en-ca",
|
||||||
"en-GB": "en-gb",
|
"en-GB": "en-gb",
|
||||||
"en-US": "en-us",
|
"en-US": "en-us",
|
||||||
|
@ -1754,13 +1756,17 @@
|
||||||
"fi-FI": "fi-fi",
|
"fi-FI": "fi-fi",
|
||||||
"fr-CA": "fr-ca",
|
"fr-CA": "fr-ca",
|
||||||
"fr-FR": "fr-fr",
|
"fr-FR": "fr-fr",
|
||||||
|
"hr": "hr",
|
||||||
|
"hu": "hu",
|
||||||
"it": "it",
|
"it": "it",
|
||||||
"ja-JP": "ja-jp",
|
"ja-JP": "ja-jp",
|
||||||
"nl": "nl",
|
"nl": "nl",
|
||||||
"pl": "pl",
|
"pl": "pl",
|
||||||
"pt-BR": "pt-br",
|
"pt-BR": "pt-br",
|
||||||
|
"ro": "ro",
|
||||||
"sq-AL": "sq-al",
|
"sq-AL": "sq-al",
|
||||||
"sw-KE": "sw-ke"
|
"sw-KE": "sw-ke",
|
||||||
|
"tr": "tr"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"data_type": "traits_v1",
|
"data_type": "traits_v1",
|
||||||
|
@ -1821,7 +1827,9 @@
|
||||||
"custom": {
|
"custom": {
|
||||||
"ui_lang": {
|
"ui_lang": {
|
||||||
"ca": "ca",
|
"ca": "ca",
|
||||||
|
"cs": "cs",
|
||||||
"de-DE": "de-de",
|
"de-DE": "de-de",
|
||||||
|
"el": "el",
|
||||||
"en-CA": "en-ca",
|
"en-CA": "en-ca",
|
||||||
"en-GB": "en-gb",
|
"en-GB": "en-gb",
|
||||||
"en-US": "en-us",
|
"en-US": "en-us",
|
||||||
|
@ -1829,13 +1837,17 @@
|
||||||
"fi-FI": "fi-fi",
|
"fi-FI": "fi-fi",
|
||||||
"fr-CA": "fr-ca",
|
"fr-CA": "fr-ca",
|
||||||
"fr-FR": "fr-fr",
|
"fr-FR": "fr-fr",
|
||||||
|
"hr": "hr",
|
||||||
|
"hu": "hu",
|
||||||
"it": "it",
|
"it": "it",
|
||||||
"ja-JP": "ja-jp",
|
"ja-JP": "ja-jp",
|
||||||
"nl": "nl",
|
"nl": "nl",
|
||||||
"pl": "pl",
|
"pl": "pl",
|
||||||
"pt-BR": "pt-br",
|
"pt-BR": "pt-br",
|
||||||
|
"ro": "ro",
|
||||||
"sq-AL": "sq-al",
|
"sq-AL": "sq-al",
|
||||||
"sw-KE": "sw-ke"
|
"sw-KE": "sw-ke",
|
||||||
|
"tr": "tr"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"data_type": "traits_v1",
|
"data_type": "traits_v1",
|
||||||
|
@ -1896,7 +1908,9 @@
|
||||||
"custom": {
|
"custom": {
|
||||||
"ui_lang": {
|
"ui_lang": {
|
||||||
"ca": "ca",
|
"ca": "ca",
|
||||||
|
"cs": "cs",
|
||||||
"de-DE": "de-de",
|
"de-DE": "de-de",
|
||||||
|
"el": "el",
|
||||||
"en-CA": "en-ca",
|
"en-CA": "en-ca",
|
||||||
"en-GB": "en-gb",
|
"en-GB": "en-gb",
|
||||||
"en-US": "en-us",
|
"en-US": "en-us",
|
||||||
|
@ -1904,13 +1918,17 @@
|
||||||
"fi-FI": "fi-fi",
|
"fi-FI": "fi-fi",
|
||||||
"fr-CA": "fr-ca",
|
"fr-CA": "fr-ca",
|
||||||
"fr-FR": "fr-fr",
|
"fr-FR": "fr-fr",
|
||||||
|
"hr": "hr",
|
||||||
|
"hu": "hu",
|
||||||
"it": "it",
|
"it": "it",
|
||||||
"ja-JP": "ja-jp",
|
"ja-JP": "ja-jp",
|
||||||
"nl": "nl",
|
"nl": "nl",
|
||||||
"pl": "pl",
|
"pl": "pl",
|
||||||
"pt-BR": "pt-br",
|
"pt-BR": "pt-br",
|
||||||
|
"ro": "ro",
|
||||||
"sq-AL": "sq-al",
|
"sq-AL": "sq-al",
|
||||||
"sw-KE": "sw-ke"
|
"sw-KE": "sw-ke",
|
||||||
|
"tr": "tr"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"data_type": "traits_v1",
|
"data_type": "traits_v1",
|
||||||
|
@ -1971,7 +1989,9 @@
|
||||||
"custom": {
|
"custom": {
|
||||||
"ui_lang": {
|
"ui_lang": {
|
||||||
"ca": "ca",
|
"ca": "ca",
|
||||||
|
"cs": "cs",
|
||||||
"de-DE": "de-de",
|
"de-DE": "de-de",
|
||||||
|
"el": "el",
|
||||||
"en-CA": "en-ca",
|
"en-CA": "en-ca",
|
||||||
"en-GB": "en-gb",
|
"en-GB": "en-gb",
|
||||||
"en-US": "en-us",
|
"en-US": "en-us",
|
||||||
|
@ -1979,13 +1999,17 @@
|
||||||
"fi-FI": "fi-fi",
|
"fi-FI": "fi-fi",
|
||||||
"fr-CA": "fr-ca",
|
"fr-CA": "fr-ca",
|
||||||
"fr-FR": "fr-fr",
|
"fr-FR": "fr-fr",
|
||||||
|
"hr": "hr",
|
||||||
|
"hu": "hu",
|
||||||
"it": "it",
|
"it": "it",
|
||||||
"ja-JP": "ja-jp",
|
"ja-JP": "ja-jp",
|
||||||
"nl": "nl",
|
"nl": "nl",
|
||||||
"pl": "pl",
|
"pl": "pl",
|
||||||
"pt-BR": "pt-br",
|
"pt-BR": "pt-br",
|
||||||
|
"ro": "ro",
|
||||||
"sq-AL": "sq-al",
|
"sq-AL": "sq-al",
|
||||||
"sw-KE": "sw-ke"
|
"sw-KE": "sw-ke",
|
||||||
|
"tr": "tr"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"data_type": "traits_v1",
|
"data_type": "traits_v1",
|
||||||
|
@ -6380,9 +6404,11 @@
|
||||||
"wo": "wolof",
|
"wo": "wolof",
|
||||||
"xh": "xhosa",
|
"xh": "xhosa",
|
||||||
"yi": "yiddish",
|
"yi": "yiddish",
|
||||||
|
"yo": "yoruba",
|
||||||
"yue": "cantonese",
|
"yue": "cantonese",
|
||||||
"zh": "chinese",
|
"zh": "chinese",
|
||||||
"zh_Hans": "mandarin"
|
"zh_Hans": "mandarin",
|
||||||
|
"zu": "zulu"
|
||||||
},
|
},
|
||||||
"regions": {}
|
"regions": {}
|
||||||
},
|
},
|
||||||
|
@ -6515,6 +6541,7 @@
|
||||||
"en-AU": "en_AU",
|
"en-AU": "en_AU",
|
||||||
"en-CA": "en_CA",
|
"en-CA": "en_CA",
|
||||||
"en-GB": "en-GB_GB",
|
"en-GB": "en-GB_GB",
|
||||||
|
"en-ID": "en_ID",
|
||||||
"en-IE": "en_IE",
|
"en-IE": "en_IE",
|
||||||
"en-IN": "en_IN",
|
"en-IN": "en_IN",
|
||||||
"en-MY": "en_MY",
|
"en-MY": "en_MY",
|
||||||
|
@ -6745,6 +6772,7 @@
|
||||||
"din",
|
"din",
|
||||||
"diq",
|
"diq",
|
||||||
"dsb",
|
"dsb",
|
||||||
|
"dtp",
|
||||||
"dty",
|
"dty",
|
||||||
"dv",
|
"dv",
|
||||||
"dz",
|
"dz",
|
||||||
|
@ -7841,6 +7869,7 @@
|
||||||
"xh": "xhosa",
|
"xh": "xhosa",
|
||||||
"yi": "yiddish",
|
"yi": "yiddish",
|
||||||
"yo": "yoruba",
|
"yo": "yoruba",
|
||||||
|
"za": "zhuang",
|
||||||
"zh": "chinese",
|
"zh": "chinese",
|
||||||
"zu": "zulu"
|
"zu": "zulu"
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
],
|
],
|
||||||
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
|
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
|
||||||
"versions": [
|
"versions": [
|
||||||
"125.0",
|
"126.0",
|
||||||
"124.0"
|
"125.0"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1084,41 +1084,6 @@
|
||||||
"symbol": "cr",
|
"symbol": "cr",
|
||||||
"to_si_factor": null
|
"to_si_factor": null
|
||||||
},
|
},
|
||||||
"Q114002440": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒄀",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q114002534": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒃻",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q114002639": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒈨𒊑",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q114002796": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒂆",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q114002930": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒀺",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q114002955": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒀹𒃷",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q114002974": {
|
|
||||||
"si_name": null,
|
|
||||||
"symbol": "𒃷",
|
|
||||||
"to_si_factor": null
|
|
||||||
},
|
|
||||||
"Q1140444": {
|
"Q1140444": {
|
||||||
"si_name": null,
|
"si_name": null,
|
||||||
"symbol": "Zb",
|
"symbol": "Zb",
|
||||||
|
@ -1404,6 +1369,141 @@
|
||||||
"symbol": "cm H₂O",
|
"symbol": "cm H₂O",
|
||||||
"to_si_factor": 98.0665
|
"to_si_factor": 98.0665
|
||||||
},
|
},
|
||||||
|
"Q125387265": {
|
||||||
|
"si_name": "Q11574",
|
||||||
|
"symbol": "qs",
|
||||||
|
"to_si_factor": 1e-30
|
||||||
|
},
|
||||||
|
"Q125387281": {
|
||||||
|
"si_name": "Q11574",
|
||||||
|
"symbol": "rs",
|
||||||
|
"to_si_factor": 1e-27
|
||||||
|
},
|
||||||
|
"Q125389370": {
|
||||||
|
"si_name": "Q11579",
|
||||||
|
"symbol": "rK",
|
||||||
|
"to_si_factor": 1e-27
|
||||||
|
},
|
||||||
|
"Q125389387": {
|
||||||
|
"si_name": "Q11579",
|
||||||
|
"symbol": "qK",
|
||||||
|
"to_si_factor": 1e-30
|
||||||
|
},
|
||||||
|
"Q125389519": {
|
||||||
|
"si_name": "Q11579",
|
||||||
|
"symbol": "RK",
|
||||||
|
"to_si_factor": 1e+27
|
||||||
|
},
|
||||||
|
"Q125389534": {
|
||||||
|
"si_name": "Q11579",
|
||||||
|
"symbol": "QK",
|
||||||
|
"to_si_factor": 1e+30
|
||||||
|
},
|
||||||
|
"Q125390959": {
|
||||||
|
"si_name": "Q41509",
|
||||||
|
"symbol": "rmol",
|
||||||
|
"to_si_factor": 1e-27
|
||||||
|
},
|
||||||
|
"Q125390987": {
|
||||||
|
"si_name": "Q41509",
|
||||||
|
"symbol": "qmol",
|
||||||
|
"to_si_factor": 1e-30
|
||||||
|
},
|
||||||
|
"Q125392001": {
|
||||||
|
"si_name": "Q41509",
|
||||||
|
"symbol": "Rmol",
|
||||||
|
"to_si_factor": 1e+27
|
||||||
|
},
|
||||||
|
"Q125392014": {
|
||||||
|
"si_name": "Q41509",
|
||||||
|
"symbol": "Qmol",
|
||||||
|
"to_si_factor": 1e+30
|
||||||
|
},
|
||||||
|
"Q125470272": {
|
||||||
|
"si_name": "Q102573",
|
||||||
|
"symbol": "rBq",
|
||||||
|
"to_si_factor": 1e-27
|
||||||
|
},
|
||||||
|
"Q125470277": {
|
||||||
|
"si_name": "Q102573",
|
||||||
|
"symbol": "qBq",
|
||||||
|
"to_si_factor": 1e-30
|
||||||
|
},
|
||||||
|
"Q125470426": {
|
||||||
|
"si_name": "Q102573",
|
||||||
|
"symbol": "RBq",
|
||||||
|
"to_si_factor": 1e+27
|
||||||
|
},
|
||||||
|
"Q125470445": {
|
||||||
|
"si_name": "Q102573",
|
||||||
|
"symbol": "QBq",
|
||||||
|
"to_si_factor": 1e+30
|
||||||
|
},
|
||||||
|
"Q125470704": {
|
||||||
|
"si_name": "Q25406",
|
||||||
|
"symbol": "rC",
|
||||||
|
"to_si_factor": 1e-27
|
||||||
|
},
|
||||||
|
"Q125470716": {
|
||||||
|
"si_name": "Q25406",
|
||||||
|
"symbol": "qC",
|
||||||
|
"to_si_factor": 1e-30
|
||||||
|
},
|
||||||
|
"Q125471094": {
|
||||||
|
"si_name": "Q25406",
|
||||||
|
"symbol": "RC",
|
||||||
|
"to_si_factor": 1e+27
|
||||||
|
},
|
||||||
|
"Q125471109": {
|
||||||
|
"si_name": "Q25406",
|
||||||
|
"symbol": "QC",
|
||||||
|
"to_si_factor": 1e+30
|
||||||
|
},
|
||||||
|
"Q125471199": {
|
||||||
|
"si_name": null,
|
||||||
|
"symbol": "r°C",
|
||||||
|
"to_si_factor": null
|
||||||
|
},
|
||||||
|
"Q125471200": {
|
||||||
|
"si_name": null,
|
||||||
|
"symbol": "q°C",
|
||||||
|
"to_si_factor": null
|
||||||
|
},
|
||||||
|
"Q125471246": {
|
||||||
|
"si_name": null,
|
||||||
|
"symbol": "R°C",
|
||||||
|
"to_si_factor": null
|
||||||
|
},
|
||||||
|
"Q125471247": {
|
||||||
|
"si_name": null,
|
||||||
|
"symbol": "Q°C",
|
||||||
|
"to_si_factor": null
|
||||||
|
},
|
||||||
|
"Q125471334": {
|
||||||
|
"si_name": "Q131255",
|
||||||
|
"symbol": "rF",
|
||||||
|
"to_si_factor": 1e-27
|
||||||
|
},
|
||||||
|
"Q125471344": {
|
||||||
|
"si_name": "Q131255",
|
||||||
|
"symbol": "qF",
|
||||||
|
"to_si_factor": 1e-30
|
||||||
|
},
|
||||||
|
"Q125471409": {
|
||||||
|
"si_name": "Q131255",
|
||||||
|
"symbol": "RF",
|
||||||
|
"to_si_factor": 1e+27
|
||||||
|
},
|
||||||
|
"Q125471423": {
|
||||||
|
"si_name": "Q131255",
|
||||||
|
"symbol": "QF",
|
||||||
|
"to_si_factor": 1e+30
|
||||||
|
},
|
||||||
|
"Q125962250": {
|
||||||
|
"si_name": null,
|
||||||
|
"symbol": "Ry",
|
||||||
|
"to_si_factor": null
|
||||||
|
},
|
||||||
"Q12714022": {
|
"Q12714022": {
|
||||||
"si_name": "Q11570",
|
"si_name": "Q11570",
|
||||||
"symbol": "cwt",
|
"symbol": "cwt",
|
||||||
|
@ -4506,7 +4606,7 @@
|
||||||
},
|
},
|
||||||
"Q829073": {
|
"Q829073": {
|
||||||
"si_name": "Q33680",
|
"si_name": "Q33680",
|
||||||
"symbol": null,
|
"symbol": "\"",
|
||||||
"to_si_factor": 4.84813681109536e-06
|
"to_si_factor": 4.84813681109536e-06
|
||||||
},
|
},
|
||||||
"Q83216": {
|
"Q83216": {
|
||||||
|
|
|
@ -133,7 +133,7 @@ def _get_result(item):
|
||||||
'publisher': extract_text(eval_xpath(item, './/div[contains(@class, "text-sm")]')),
|
'publisher': extract_text(eval_xpath(item, './/div[contains(@class, "text-sm")]')),
|
||||||
'authors': [extract_text(eval_xpath(item, './/div[contains(@class, "italic")]'))],
|
'authors': [extract_text(eval_xpath(item, './/div[contains(@class, "italic")]'))],
|
||||||
'content': extract_text(eval_xpath(item, './/div[contains(@class, "text-xs")]')),
|
'content': extract_text(eval_xpath(item, './/div[contains(@class, "text-xs")]')),
|
||||||
'img_src': item.xpath('.//img/@src')[0],
|
'thumbnail': item.xpath('.//img/@src')[0],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,8 +53,8 @@ def response(resp):
|
||||||
|
|
||||||
url = base_url + link.attrib.get('href') + '#downloads'
|
url = base_url + link.attrib.get('href') + '#downloads'
|
||||||
title = extract_text(link)
|
title = extract_text(link)
|
||||||
img_src = base_url + eval_xpath_getindex(result, './/img/@src', 0)
|
thumbnail = base_url + eval_xpath_getindex(result, './/img/@src', 0)
|
||||||
res = {'url': url, 'title': title, 'img_src': img_src}
|
res = {'url': url, 'title': title, 'thumbnail': thumbnail}
|
||||||
|
|
||||||
results.append(res)
|
results.append(res)
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ def response(resp):
|
||||||
'url': result['trackViewUrl'],
|
'url': result['trackViewUrl'],
|
||||||
'title': result['trackName'],
|
'title': result['trackName'],
|
||||||
'content': result['description'],
|
'content': result['description'],
|
||||||
'img_src': result['artworkUrl100'],
|
'thumbnail': result['artworkUrl100'],
|
||||||
'publishedDate': parse(result['currentVersionReleaseDate']),
|
'publishedDate': parse(result['currentVersionReleaseDate']),
|
||||||
'author': result['sellerName'],
|
'author': result['sellerName'],
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,7 +66,7 @@ def response(resp):
|
||||||
"title": item['title'],
|
"title": item['title'],
|
||||||
"content": item['abstract'],
|
"content": item['abstract'],
|
||||||
"publishedDate": pubdate_original,
|
"publishedDate": pubdate_original,
|
||||||
# "img_src": item.get('image_url') or None, # these are not thumbs / to large
|
# "thumbnail": item.get('image_url') or None, # these are not thumbs / to large
|
||||||
"metadata": ' | '.join(metadata),
|
"metadata": ' | '.join(metadata),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -68,7 +68,7 @@ def response(resp):
|
||||||
|
|
||||||
thumbnail = result.xpath('.//div[@class="art"]/img/@src')
|
thumbnail = result.xpath('.//div[@class="art"]/img/@src')
|
||||||
if thumbnail:
|
if thumbnail:
|
||||||
new_result['img_src'] = thumbnail[0]
|
new_result['thumbnail'] = thumbnail[0]
|
||||||
|
|
||||||
result_id = parse_qs(urlparse(link.get('href')).query)["search_item_id"][0]
|
result_id = parse_qs(urlparse(link.get('href')).query)["search_item_id"][0]
|
||||||
itemtype = extract_text(result.xpath('.//div[@class="itemtype"]')).lower()
|
itemtype = extract_text(result.xpath('.//div[@class="itemtype"]')).lower()
|
||||||
|
|
|
@ -80,8 +80,10 @@ def response(resp):
|
||||||
|
|
||||||
for entry in search_results.xpath('./result/doc'):
|
for entry in search_results.xpath('./result/doc'):
|
||||||
content = "No description available"
|
content = "No description available"
|
||||||
|
url = ""
|
||||||
|
title = ""
|
||||||
date = datetime.now() # needed in case no dcdate is available for an item
|
date = datetime.now() # needed in case no dcdate is available for an item
|
||||||
|
|
||||||
for item in entry:
|
for item in entry:
|
||||||
if item.attrib["name"] == "dcdate":
|
if item.attrib["name"] == "dcdate":
|
||||||
date = item.text
|
date = item.text
|
||||||
|
|
|
@ -130,7 +130,7 @@ def response(resp):
|
||||||
'url': url,
|
'url': url,
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': content,
|
'content': content,
|
||||||
'img_src': thumbnail,
|
'thumbnail': thumbnail,
|
||||||
'metadata': metadata,
|
'metadata': metadata,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -40,9 +40,9 @@ def response(resp):
|
||||||
json_resp = resp.json()
|
json_resp = resp.json()
|
||||||
|
|
||||||
for result in json_resp['teaser']:
|
for result in json_resp['teaser']:
|
||||||
img_src = None
|
thumbnail = None
|
||||||
if result['teaser']['image']:
|
if result['teaser']['image']:
|
||||||
img_src = base_url + result['teaser']['image']['sources'][-1]['url']
|
thumbnail = base_url + result['teaser']['image']['sources'][-1]['url']
|
||||||
|
|
||||||
metadata = result['extension']['overline']
|
metadata = result['extension']['overline']
|
||||||
authors = ', '.join(author['name'] for author in result['extension'].get('authors', []))
|
authors = ', '.join(author['name'] for author in result['extension'].get('authors', []))
|
||||||
|
@ -58,7 +58,7 @@ def response(resp):
|
||||||
'url': base_url + result['teaser']['link']['url'],
|
'url': base_url + result['teaser']['link']['url'],
|
||||||
'title': result['teaser']['title'],
|
'title': result['teaser']['title'],
|
||||||
'content': result['teaser']['text'],
|
'content': result['teaser']['text'],
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
'publishedDate': publishedDate,
|
'publishedDate': publishedDate,
|
||||||
'metadata': metadata,
|
'metadata': metadata,
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,7 @@ from lxml import html
|
||||||
from searx import locales
|
from searx import locales
|
||||||
from searx.utils import (
|
from searx.utils import (
|
||||||
extract_text,
|
extract_text,
|
||||||
|
extr,
|
||||||
eval_xpath,
|
eval_xpath,
|
||||||
eval_xpath_list,
|
eval_xpath_list,
|
||||||
eval_xpath_getindex,
|
eval_xpath_getindex,
|
||||||
|
@ -252,11 +253,7 @@ def response(resp):
|
||||||
if brave_category in ('search', 'goggles'):
|
if brave_category in ('search', 'goggles'):
|
||||||
return _parse_search(resp)
|
return _parse_search(resp)
|
||||||
|
|
||||||
datastr = ""
|
datastr = extr(resp.text, "const data = ", ";\n").strip()
|
||||||
for line in resp.text.split("\n"):
|
|
||||||
if "const data = " in line:
|
|
||||||
datastr = line.replace("const data = ", "").strip()[:-1]
|
|
||||||
break
|
|
||||||
|
|
||||||
json_data = js_variable_to_python(datastr)
|
json_data = js_variable_to_python(datastr)
|
||||||
json_resp = json_data[1]['data']['body']['response']
|
json_resp = json_data[1]['data']['body']['response']
|
||||||
|
@ -296,14 +293,14 @@ def _parse_search(resp):
|
||||||
|
|
||||||
content_tag = eval_xpath_getindex(result, './/div[contains(@class, "snippet-description")]', 0, default='')
|
content_tag = eval_xpath_getindex(result, './/div[contains(@class, "snippet-description")]', 0, default='')
|
||||||
pub_date_raw = eval_xpath(result, 'substring-before(.//div[contains(@class, "snippet-description")], "-")')
|
pub_date_raw = eval_xpath(result, 'substring-before(.//div[contains(@class, "snippet-description")], "-")')
|
||||||
img_src = eval_xpath_getindex(result, './/img[contains(@class, "thumb")]/@src', 0, default='')
|
thumbnail = eval_xpath_getindex(result, './/img[contains(@class, "thumb")]/@src', 0, default='')
|
||||||
|
|
||||||
item = {
|
item = {
|
||||||
'url': url,
|
'url': url,
|
||||||
'title': extract_text(title_tag),
|
'title': extract_text(title_tag),
|
||||||
'content': extract_text(content_tag),
|
'content': extract_text(content_tag),
|
||||||
'publishedDate': _extract_published_date(pub_date_raw),
|
'publishedDate': _extract_published_date(pub_date_raw),
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
}
|
}
|
||||||
|
|
||||||
video_tag = eval_xpath_getindex(
|
video_tag = eval_xpath_getindex(
|
||||||
|
@ -324,7 +321,7 @@ def _parse_search(resp):
|
||||||
)
|
)
|
||||||
item['publishedDate'] = _extract_published_date(pub_date_raw)
|
item['publishedDate'] = _extract_published_date(pub_date_raw)
|
||||||
else:
|
else:
|
||||||
item['img_src'] = eval_xpath_getindex(video_tag, './/img/@src', 0, default='')
|
item['thumbnail'] = eval_xpath_getindex(video_tag, './/img/@src', 0, default='')
|
||||||
|
|
||||||
result_list.append(item)
|
result_list.append(item)
|
||||||
|
|
||||||
|
@ -351,7 +348,7 @@ def _parse_news(json_resp):
|
||||||
'publishedDate': _extract_published_date(result['age']),
|
'publishedDate': _extract_published_date(result['age']),
|
||||||
}
|
}
|
||||||
if result['thumbnail'] is not None:
|
if result['thumbnail'] is not None:
|
||||||
item['img_src'] = result['thumbnail']['src']
|
item['thumbnail'] = result['thumbnail']['src']
|
||||||
result_list.append(item)
|
result_list.append(item)
|
||||||
|
|
||||||
return result_list
|
return result_list
|
||||||
|
|
|
@ -46,23 +46,20 @@ def response(resp):
|
||||||
if recipe['submissionDate']:
|
if recipe['submissionDate']:
|
||||||
publishedDate = datetime.strptime(result['recipe']['submissionDate'][:19], "%Y-%m-%dT%H:%M:%S")
|
publishedDate = datetime.strptime(result['recipe']['submissionDate'][:19], "%Y-%m-%dT%H:%M:%S")
|
||||||
|
|
||||||
content = (
|
content = [
|
||||||
"difficulity: "
|
f"Schwierigkeitsstufe (1-3): {recipe['difficulty']}",
|
||||||
+ str(recipe['difficulty'])
|
f"Zubereitungszeit: {recipe['preparationTime']}min",
|
||||||
+ " / preparation time: "
|
f"Anzahl der Zutaten: {recipe['ingredientCount']}",
|
||||||
+ str(recipe['preparationTime'])
|
]
|
||||||
+ "min / ingredient count: "
|
|
||||||
+ str(recipe['ingredientCount'])
|
|
||||||
)
|
|
||||||
|
|
||||||
if recipe['subtitle']:
|
if recipe['subtitle']:
|
||||||
content = f"{recipe['subtitle']} / {content}"
|
content.insert(0, recipe['subtitle'])
|
||||||
|
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
'url': recipe['siteUrl'],
|
'url': recipe['siteUrl'],
|
||||||
'title': recipe['title'],
|
'title': recipe['title'],
|
||||||
'content': content,
|
'content': " | ".join(content),
|
||||||
'thumbnail': recipe['previewImageUrlTemplate'].replace("<format>", thumbnail_format),
|
'thumbnail': recipe['previewImageUrlTemplate'].replace("<format>", thumbnail_format),
|
||||||
'publishedDate': publishedDate,
|
'publishedDate': publishedDate,
|
||||||
}
|
}
|
||||||
|
|
70
searx/engines/crates.py
Normal file
70
searx/engines/crates.py
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Cargo search on crates.io"""
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
|
from dateutil import parser
|
||||||
|
|
||||||
|
about = {
|
||||||
|
"website": "https://crates.io/",
|
||||||
|
"wikidata_id": None,
|
||||||
|
"official_api_documentation": "https://crates.io/data-access",
|
||||||
|
"use_official_api": True,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": "JSON",
|
||||||
|
}
|
||||||
|
|
||||||
|
categories = ["it", "packages", "cargo"]
|
||||||
|
|
||||||
|
|
||||||
|
# engine dependent config
|
||||||
|
paging = True
|
||||||
|
page_size = 10
|
||||||
|
search_url = "https://crates.io/api/v1/crates"
|
||||||
|
|
||||||
|
linked_terms = OrderedDict(
|
||||||
|
[
|
||||||
|
("homepage", "Project homepage"),
|
||||||
|
("documentation", "Documentation"),
|
||||||
|
("repository", "Source code"),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def request(query: str, params):
|
||||||
|
|
||||||
|
args = urlencode({"page": params["pageno"], "q": query, "per_page": page_size})
|
||||||
|
params["url"] = f"{search_url}?{args}"
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
for package in resp.json()["crates"]:
|
||||||
|
|
||||||
|
published_date = package.get("updated_at")
|
||||||
|
published_date = parser.parse(published_date)
|
||||||
|
|
||||||
|
links = {}
|
||||||
|
for k, v in linked_terms.items():
|
||||||
|
l = package.get(k)
|
||||||
|
if l:
|
||||||
|
links[v] = l
|
||||||
|
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
"template": "packages.html",
|
||||||
|
"url": f'https://crates.io/crates/{package["name"]}',
|
||||||
|
"title": package["name"],
|
||||||
|
"package_name": package["name"],
|
||||||
|
"tags": package["keywords"],
|
||||||
|
"content": package["description"],
|
||||||
|
"version": package["newest_version"] or package["max_version"] or package["max_stable_version"],
|
||||||
|
"publishedDate": published_date,
|
||||||
|
"links": links,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
|
@ -47,7 +47,7 @@ def response(resp):
|
||||||
'url': base_url + ("_/" if is_official else "r/") + item.get("slug", ""),
|
'url': base_url + ("_/" if is_official else "r/") + item.get("slug", ""),
|
||||||
'title': item.get("name"),
|
'title': item.get("name"),
|
||||||
'content': item.get("short_description"),
|
'content': item.get("short_description"),
|
||||||
'img_src': item["logo_url"].get("large") or item["logo_url"].get("small"),
|
'thumbnail': item["logo_url"].get("large") or item["logo_url"].get("small"),
|
||||||
'package_name': item.get("name"),
|
'package_name': item.get("name"),
|
||||||
'maintainer': item["publisher"].get("name"),
|
'maintainer': item["publisher"].get("name"),
|
||||||
'publishedDate': parser.parse(item.get("updated_at") or item.get("created_at")),
|
'publishedDate': parser.parse(item.get("updated_at") or item.get("created_at")),
|
||||||
|
|
|
@ -328,6 +328,19 @@ def response(resp):
|
||||||
len_tr_rows = len(tr_rows)
|
len_tr_rows = len(tr_rows)
|
||||||
offset = 0
|
offset = 0
|
||||||
|
|
||||||
|
zero_click_info_xpath = '//html/body/form/div/table[2]/tr[2]/td/text()'
|
||||||
|
zero_click = extract_text(eval_xpath(doc, zero_click_info_xpath)).strip()
|
||||||
|
|
||||||
|
if zero_click and "Your IP address is" not in zero_click:
|
||||||
|
current_query = resp.search_params["data"].get("q")
|
||||||
|
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
'answer': zero_click,
|
||||||
|
'url': "https://duckduckgo.com/?" + urlencode({"q": current_query}),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
while len_tr_rows >= offset + 4:
|
while len_tr_rows >= offset + 4:
|
||||||
|
|
||||||
# assemble table rows we need to scrap
|
# assemble table rows we need to scrap
|
||||||
|
@ -379,7 +392,9 @@ def fetch_traits(engine_traits: EngineTraits):
|
||||||
SearXNG's locale.
|
SearXNG's locale.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-branches, too-many-statements
|
# pylint: disable=too-many-branches, too-many-statements, disable=import-outside-toplevel
|
||||||
|
from searx.utils import extr, js_variable_to_python
|
||||||
|
|
||||||
# fetch regions
|
# fetch regions
|
||||||
|
|
||||||
engine_traits.all_locale = 'wt-wt'
|
engine_traits.all_locale = 'wt-wt'
|
||||||
|
@ -390,11 +405,9 @@ def fetch_traits(engine_traits: EngineTraits):
|
||||||
if not resp.ok: # type: ignore
|
if not resp.ok: # type: ignore
|
||||||
print("ERROR: response from DuckDuckGo is not OK.")
|
print("ERROR: response from DuckDuckGo is not OK.")
|
||||||
|
|
||||||
pos = resp.text.find('regions:{') + 8 # type: ignore
|
js_code = extr(resp.text, 'regions:', ',snippetLengths')
|
||||||
js_code = resp.text[pos:] # type: ignore
|
|
||||||
pos = js_code.find('}') + 1
|
|
||||||
regions = json.loads(js_code[:pos])
|
|
||||||
|
|
||||||
|
regions = json.loads(js_code)
|
||||||
for eng_tag, name in regions.items():
|
for eng_tag, name in regions.items():
|
||||||
|
|
||||||
if eng_tag == 'wt-wt':
|
if eng_tag == 'wt-wt':
|
||||||
|
@ -426,12 +439,9 @@ def fetch_traits(engine_traits: EngineTraits):
|
||||||
|
|
||||||
engine_traits.custom['lang_region'] = {}
|
engine_traits.custom['lang_region'] = {}
|
||||||
|
|
||||||
pos = resp.text.find('languages:{') + 10 # type: ignore
|
js_code = extr(resp.text, 'languages:', ',regions')
|
||||||
js_code = resp.text[pos:] # type: ignore
|
|
||||||
pos = js_code.find('}') + 1
|
|
||||||
js_code = '{"' + js_code[1:pos].replace(':', '":').replace(',', ',"')
|
|
||||||
languages = json.loads(js_code)
|
|
||||||
|
|
||||||
|
languages = js_variable_to_python(js_code)
|
||||||
for eng_lang, name in languages.items():
|
for eng_lang, name in languages.items():
|
||||||
|
|
||||||
if eng_lang == 'wt_WT':
|
if eng_lang == 'wt_WT':
|
||||||
|
|
|
@ -47,8 +47,8 @@ def response(resp):
|
||||||
+ ' - '
|
+ ' - '
|
||||||
+ extract_text(app.xpath('./div/div/span[@class="package-license"]')).strip()
|
+ extract_text(app.xpath('./div/div/span[@class="package-license"]')).strip()
|
||||||
)
|
)
|
||||||
app_img_src = app.xpath('./img[@class="package-icon"]/@src')[0]
|
thumbnail = app.xpath('./img[@class="package-icon"]/@src')[0]
|
||||||
|
|
||||||
results.append({'url': app_url, 'title': app_title, 'content': app_content, 'img_src': app_img_src})
|
results.append({'url': app_url, 'title': app_title, 'content': app_content, 'thumbnail': thumbnail})
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
54
searx/engines/findthatmeme.py
Normal file
54
searx/engines/findthatmeme.py
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""FindThatMeme (Images)"""
|
||||||
|
|
||||||
|
from json import dumps
|
||||||
|
from datetime import datetime
|
||||||
|
from searx.utils import humanize_bytes
|
||||||
|
|
||||||
|
about = {
|
||||||
|
"website": 'https://findthatmeme.com',
|
||||||
|
"official_api_documentation": None,
|
||||||
|
"use_official_api": False,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": "JSON",
|
||||||
|
}
|
||||||
|
|
||||||
|
base_url = "https://findthatmeme.com/api/v1/search"
|
||||||
|
categories = ['images']
|
||||||
|
paging = True
|
||||||
|
|
||||||
|
|
||||||
|
def request(query, params):
|
||||||
|
|
||||||
|
start_index = (params["pageno"] - 1) * 50
|
||||||
|
data = {"search": query, "offset": start_index}
|
||||||
|
params["url"] = base_url
|
||||||
|
params["method"] = 'POST'
|
||||||
|
params['headers']['content-type'] = "application/json"
|
||||||
|
params['data'] = dumps(data)
|
||||||
|
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp):
|
||||||
|
search_res = resp.json()
|
||||||
|
results = []
|
||||||
|
|
||||||
|
for item in search_res:
|
||||||
|
img = 'https://findthatmeme.us-southeast-1.linodeobjects.com/' + item['image_path']
|
||||||
|
thumb = 'https://findthatmeme.us-southeast-1.linodeobjects.com/thumb/' + item.get('thumbnail', '')
|
||||||
|
date = datetime.strptime(item["updated_at"].split("T")[0], "%Y-%m-%d")
|
||||||
|
formatted_date = datetime.utcfromtimestamp(date.timestamp())
|
||||||
|
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
'url': item['source_page_url'],
|
||||||
|
'title': item['source_site'],
|
||||||
|
'img_src': img if item['type'] == 'IMAGE' else thumb,
|
||||||
|
'filesize': humanize_bytes(item['meme_file_size']),
|
||||||
|
'publishedDate': formatted_date,
|
||||||
|
'template': 'images.html',
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
|
@ -50,7 +50,7 @@ def parse_lyric(hit):
|
||||||
'url': hit['result']['url'],
|
'url': hit['result']['url'],
|
||||||
'title': hit['result']['full_title'],
|
'title': hit['result']['full_title'],
|
||||||
'content': content,
|
'content': content,
|
||||||
'img_src': hit['result']['song_art_image_thumbnail_url'],
|
'thumbnail': hit['result']['song_art_image_thumbnail_url'],
|
||||||
}
|
}
|
||||||
if timestamp:
|
if timestamp:
|
||||||
result.update({'publishedDate': datetime.fromtimestamp(timestamp)})
|
result.update({'publishedDate': datetime.fromtimestamp(timestamp)})
|
||||||
|
@ -68,7 +68,7 @@ def parse_artist(hit):
|
||||||
'url': hit['result']['url'],
|
'url': hit['result']['url'],
|
||||||
'title': hit['result']['name'],
|
'title': hit['result']['name'],
|
||||||
'content': '',
|
'content': '',
|
||||||
'img_src': hit['result']['image_url'],
|
'thumbnail': hit['result']['image_url'],
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ def parse_album(hit):
|
||||||
return {
|
return {
|
||||||
'url': res['url'],
|
'url': res['url'],
|
||||||
'title': res['full_title'],
|
'title': res['full_title'],
|
||||||
'img_src': res['cover_art_url'],
|
'thumbnail': res['cover_art_url'],
|
||||||
'content': content.strip(),
|
'content': content.strip(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
109
searx/engines/gitea.py
Normal file
109
searx/engines/gitea.py
Normal file
|
@ -0,0 +1,109 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Engine to search in collaborative software platforms based on Gitea_.
|
||||||
|
|
||||||
|
.. _Gitea: https://about.gitea.com/
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
=============
|
||||||
|
|
||||||
|
The engine has the following mandatory setting:
|
||||||
|
|
||||||
|
- :py:obj:`base_url`
|
||||||
|
|
||||||
|
Optional settings are:
|
||||||
|
|
||||||
|
- :py:obj:`sort`
|
||||||
|
- :py:obj:`order`
|
||||||
|
- :py:obj:`page_size`
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
- name: gitea.com
|
||||||
|
engine: gitea
|
||||||
|
base_url: https://gitea.com
|
||||||
|
shortcut: gitea
|
||||||
|
|
||||||
|
If you would like to use additional instances, just configure new engines in the
|
||||||
|
:ref:`settings <settings engine>` and set the ``base_url``.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
from dateutil import parser
|
||||||
|
|
||||||
|
about = {
|
||||||
|
"website": 'https://about.gitea.com',
|
||||||
|
"wikidata_id": None,
|
||||||
|
"official_api_documentation": 'https://docs.gitea.com/next/development/api-usage',
|
||||||
|
"use_official_api": True,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": 'JSON',
|
||||||
|
}
|
||||||
|
|
||||||
|
categories = ['it', 'repos']
|
||||||
|
paging = True
|
||||||
|
|
||||||
|
base_url: str = ''
|
||||||
|
"""URL of the Gitea_ instance."""
|
||||||
|
|
||||||
|
sort: str = "updated"
|
||||||
|
"""Sort criteria, possible values:
|
||||||
|
|
||||||
|
- ``updated`` (default)
|
||||||
|
- ``alpha``
|
||||||
|
- ``created``
|
||||||
|
- ``size``
|
||||||
|
- ``id``
|
||||||
|
"""
|
||||||
|
|
||||||
|
order = "desc"
|
||||||
|
"""Sort order, possible values:
|
||||||
|
|
||||||
|
- ``desc`` (default)
|
||||||
|
- ``asc``
|
||||||
|
"""
|
||||||
|
|
||||||
|
page_size: int = 10
|
||||||
|
"""Maximum number of results per page (default 10)."""
|
||||||
|
|
||||||
|
|
||||||
|
def init(_):
|
||||||
|
if not base_url:
|
||||||
|
raise ValueError('gitea engine: base_url is unset')
|
||||||
|
|
||||||
|
|
||||||
|
def request(query, params):
|
||||||
|
args = {'q': query, 'limit': page_size, 'sort': sort, 'order': order, 'page': params['pageno']}
|
||||||
|
params['url'] = f"{base_url}/api/v1/repos/search?{urlencode(args)}"
|
||||||
|
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
for item in resp.json().get('data', []):
|
||||||
|
content = [item.get(i) for i in ['language', 'description'] if item.get(i)]
|
||||||
|
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
'template': 'packages.html',
|
||||||
|
'url': item.get('html_url'),
|
||||||
|
'title': item.get('full_name'),
|
||||||
|
'content': ' / '.join(content),
|
||||||
|
'img_src': item.get('owner', {}).get('avatar_url'),
|
||||||
|
'package_name': item.get('name'),
|
||||||
|
'maintainer': item.get('owner', {}).get('login'),
|
||||||
|
'publishedDate': parser.parse(item.get("updated_at") or item.get("created_at")),
|
||||||
|
'tags': item.get('topics', []),
|
||||||
|
'popularity': item.get('stargazers_count'),
|
||||||
|
'homepage': item.get('homepage'),
|
||||||
|
'source_code_url': item.get('clone_url'),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
|
@ -50,7 +50,7 @@ def response(resp):
|
||||||
'url': item.get('html_url'),
|
'url': item.get('html_url'),
|
||||||
'title': item.get('full_name'),
|
'title': item.get('full_name'),
|
||||||
'content': ' / '.join(content),
|
'content': ' / '.join(content),
|
||||||
'img_src': item.get('owner', {}).get('avatar_url'),
|
'thumbnail': item.get('owner', {}).get('avatar_url'),
|
||||||
'package_name': item.get('name'),
|
'package_name': item.get('name'),
|
||||||
# 'version': item.get('updated_at'),
|
# 'version': item.get('updated_at'),
|
||||||
'maintainer': item.get('owner', {}).get('login'),
|
'maintainer': item.get('owner', {}).get('login'),
|
||||||
|
|
|
@ -48,7 +48,7 @@ def response(resp):
|
||||||
{
|
{
|
||||||
'url': base_url + extract_text(eval_xpath(result, url_xpath)),
|
'url': base_url + extract_text(eval_xpath(result, url_xpath)),
|
||||||
'title': extract_text(eval_xpath(result, title_xpath)),
|
'title': extract_text(eval_xpath(result, title_xpath)),
|
||||||
'img_src': extract_text(eval_xpath(result, thumbnail_xpath)),
|
'thumbnail': extract_text(eval_xpath(result, thumbnail_xpath)),
|
||||||
'content': extract_text(eval_xpath(result, info_text_xpath)),
|
'content': extract_text(eval_xpath(result, info_text_xpath)),
|
||||||
'metadata': extract_text(eval_xpath(result, author_xpath)),
|
'metadata': extract_text(eval_xpath(result, author_xpath)),
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ filter_mapping = {0: 'off', 1: 'medium', 2: 'high'}
|
||||||
results_xpath = './/div[contains(@jscontroller, "SC7lYd")]'
|
results_xpath = './/div[contains(@jscontroller, "SC7lYd")]'
|
||||||
title_xpath = './/a/h3[1]'
|
title_xpath = './/a/h3[1]'
|
||||||
href_xpath = './/a[h3]/@href'
|
href_xpath = './/a[h3]/@href'
|
||||||
content_xpath = './/div[@data-sncf]'
|
content_xpath = './/div[@data-sncf="1"]'
|
||||||
|
|
||||||
# Suggestions are links placed in a *card-section*, we extract only the text
|
# Suggestions are links placed in a *card-section*, we extract only the text
|
||||||
# from the links not the links itself.
|
# from the links not the links itself.
|
||||||
|
@ -365,17 +365,17 @@ def response(resp):
|
||||||
logger.debug('ignoring 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
|
continue
|
||||||
|
|
||||||
img_src = content_nodes[0].xpath('.//img/@src')
|
thumbnail = content_nodes[0].xpath('.//img/@src')
|
||||||
if img_src:
|
if thumbnail:
|
||||||
img_src = img_src[0]
|
thumbnail = thumbnail[0]
|
||||||
if img_src.startswith('data:image'):
|
if thumbnail.startswith('data:image'):
|
||||||
img_id = content_nodes[0].xpath('.//img/@id')
|
img_id = content_nodes[0].xpath('.//img/@id')
|
||||||
if img_id:
|
if img_id:
|
||||||
img_src = data_image_map.get(img_id[0])
|
thumbnail = data_image_map.get(img_id[0])
|
||||||
else:
|
else:
|
||||||
img_src = None
|
thumbnail = None
|
||||||
|
|
||||||
results.append({'url': url, 'title': title, 'content': content, 'img_src': img_src})
|
results.append({'url': url, 'title': title, 'content': content, 'thumbnail': thumbnail})
|
||||||
|
|
||||||
except Exception as e: # pylint: disable=broad-except
|
except Exception as e: # pylint: disable=broad-except
|
||||||
logger.error(e, exc_info=True)
|
logger.error(e, exc_info=True)
|
||||||
|
|
|
@ -165,14 +165,14 @@ def response(resp):
|
||||||
# "https://lh3.googleusercontent.com/DjhQh7DMszk.....z=-p-h100-w100"
|
# "https://lh3.googleusercontent.com/DjhQh7DMszk.....z=-p-h100-w100"
|
||||||
# These URL are long but not personalized (double checked via tor).
|
# These URL are long but not personalized (double checked via tor).
|
||||||
|
|
||||||
img_src = extract_text(result.xpath('preceding-sibling::a/figure/img/@src'))
|
thumbnail = extract_text(result.xpath('preceding-sibling::a/figure/img/@src'))
|
||||||
|
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
'url': href,
|
'url': href,
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': content,
|
'content': content,
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -64,13 +64,13 @@ def response_movies(resp):
|
||||||
title = extract_text(eval_xpath(div_2, './div[@title]'))
|
title = extract_text(eval_xpath(div_2, './div[@title]'))
|
||||||
metadata = extract_text(eval_xpath(div_2, './div[@class]'))
|
metadata = extract_text(eval_xpath(div_2, './div[@class]'))
|
||||||
img = eval_xpath(div_1, './/img')[0]
|
img = eval_xpath(div_1, './/img')[0]
|
||||||
img_src = img.get('src')
|
thumbnail = img.get('src')
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
"url": url,
|
"url": url,
|
||||||
"title": title,
|
"title": title,
|
||||||
"content": sec_name,
|
"content": sec_name,
|
||||||
"img_src": img_src,
|
"thumbnail": thumbnail,
|
||||||
'metadata': metadata,
|
'metadata': metadata,
|
||||||
'template': 'videos.html',
|
'template': 'videos.html',
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,8 +107,8 @@ def response(resp):
|
||||||
# parse results
|
# parse results
|
||||||
for result in eval_xpath_list(dom, '//div[contains(@class, "g ")]'):
|
for result in eval_xpath_list(dom, '//div[contains(@class, "g ")]'):
|
||||||
|
|
||||||
img_src = eval_xpath_getindex(result, './/img/@src', 0, None)
|
thumbnail = eval_xpath_getindex(result, './/img/@src', 0, None)
|
||||||
if img_src is None:
|
if thumbnail is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
title = extract_text(eval_xpath_getindex(result, './/a/h3[1]', 0))
|
title = extract_text(eval_xpath_getindex(result, './/a/h3[1]', 0))
|
||||||
|
@ -124,7 +124,7 @@ def response(resp):
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': content,
|
'content': content,
|
||||||
'author': pub_info,
|
'author': pub_info,
|
||||||
'thumbnail': img_src,
|
'thumbnail': thumbnail,
|
||||||
'template': 'videos.html',
|
'template': 'videos.html',
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
81
searx/engines/hex.py
Normal file
81
searx/engines/hex.py
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""hex.pm"""
|
||||||
|
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
from dateutil import parser
|
||||||
|
|
||||||
|
|
||||||
|
about = {
|
||||||
|
# pylint: disable=line-too-long
|
||||||
|
"website": "https://hex.pm/",
|
||||||
|
"wikidata_id": None,
|
||||||
|
"official_api_documentation": "https://github.com/hexpm/hexpm/blob/main/lib/hexpm_web/controllers/api/package_controller.ex",
|
||||||
|
"use_official_api": True,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": "JSON",
|
||||||
|
}
|
||||||
|
|
||||||
|
categories = ["it", "packages"]
|
||||||
|
|
||||||
|
|
||||||
|
# engine dependent config
|
||||||
|
paging = True
|
||||||
|
search_url = "https://hex.pm/api/packages/"
|
||||||
|
# Valid values: name inserted_at updated_at total_downloads recent_downloads
|
||||||
|
sort_criteria = "recent_downloads"
|
||||||
|
page_size = 10
|
||||||
|
|
||||||
|
linked_terms = {
|
||||||
|
# lower-case : replacement
|
||||||
|
"author": "Author",
|
||||||
|
"bitbucket": "Bitbucket",
|
||||||
|
"bug tracker": "Issue tracker",
|
||||||
|
"changelog": "Changelog",
|
||||||
|
"doc": "Documentation",
|
||||||
|
"docs": "Documentation",
|
||||||
|
"documentation": "Documentation",
|
||||||
|
"github repository": "GitHub",
|
||||||
|
"github": "GitHub",
|
||||||
|
"gitlab": "GitLab",
|
||||||
|
"issues": "Issue tracker",
|
||||||
|
"project source code": "Source code",
|
||||||
|
"repository": "Source code",
|
||||||
|
"scm": "Source code",
|
||||||
|
"sourcehut": "SourceHut",
|
||||||
|
"sources": "Source code",
|
||||||
|
"sponsor": "Sponsors",
|
||||||
|
"sponsors": "Sponsors",
|
||||||
|
"website": "Homepage",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def request(query: str, params):
|
||||||
|
args = urlencode({"page": params["pageno"], "per_page": page_size, "sort": sort_criteria, "search": query})
|
||||||
|
params["url"] = f"{search_url}?{args}"
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp):
|
||||||
|
results = []
|
||||||
|
for package in resp.json():
|
||||||
|
meta = package["meta"]
|
||||||
|
published_date = package.get("updated_at")
|
||||||
|
published_date = parser.parse(published_date)
|
||||||
|
links = {linked_terms.get(k.lower(), k): v for k, v in meta.get("links").items()}
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
"template": "packages.html",
|
||||||
|
"url": package["html_url"],
|
||||||
|
"title": package["name"],
|
||||||
|
"package_name": package["name"],
|
||||||
|
"content": meta.get("description", ""),
|
||||||
|
"version": meta.get("latest_version"),
|
||||||
|
"maintainer": ", ".join(meta.get("maintainers", [])),
|
||||||
|
"publishedDate": published_date,
|
||||||
|
"license_name": ", ".join(meta.get("licenses", [])),
|
||||||
|
"homepage": package["docs_html_url"],
|
||||||
|
"links": links,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
|
@ -90,7 +90,7 @@ def response(resp):
|
||||||
"title": title,
|
"title": title,
|
||||||
"url": href_base.format(category=categ, entry_id=entry_id),
|
"url": href_base.format(category=categ, entry_id=entry_id),
|
||||||
"content": content,
|
"content": content,
|
||||||
"img_src": image_url,
|
"thumbnail": image_url,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ def _get_communities(json):
|
||||||
'url': result['community']['actor_id'],
|
'url': result['community']['actor_id'],
|
||||||
'title': result['community']['title'],
|
'title': result['community']['title'],
|
||||||
'content': markdown_to_text(result['community'].get('description', '')),
|
'content': markdown_to_text(result['community'].get('description', '')),
|
||||||
'img_src': result['community'].get('icon', result['community'].get('banner')),
|
'thumbnail': result['community'].get('icon', result['community'].get('banner')),
|
||||||
'publishedDate': datetime.strptime(counts['published'][:19], '%Y-%m-%dT%H:%M:%S'),
|
'publishedDate': datetime.strptime(counts['published'][:19], '%Y-%m-%dT%H:%M:%S'),
|
||||||
'metadata': metadata,
|
'metadata': metadata,
|
||||||
}
|
}
|
||||||
|
@ -120,9 +120,9 @@ def _get_posts(json):
|
||||||
for result in json["posts"]:
|
for result in json["posts"]:
|
||||||
user = result['creator'].get('display_name', result['creator']['name'])
|
user = result['creator'].get('display_name', result['creator']['name'])
|
||||||
|
|
||||||
img_src = None
|
thumbnail = None
|
||||||
if result['post'].get('thumbnail_url'):
|
if result['post'].get('thumbnail_url'):
|
||||||
img_src = result['post']['thumbnail_url'] + '?format=webp&thumbnail=208'
|
thumbnail = result['post']['thumbnail_url'] + '?format=webp&thumbnail=208'
|
||||||
|
|
||||||
metadata = (
|
metadata = (
|
||||||
f"▲ {result['counts']['upvotes']} ▼ {result['counts']['downvotes']}"
|
f"▲ {result['counts']['upvotes']} ▼ {result['counts']['downvotes']}"
|
||||||
|
@ -140,7 +140,7 @@ def _get_posts(json):
|
||||||
'url': result['post']['ap_id'],
|
'url': result['post']['ap_id'],
|
||||||
'title': result['post']['name'],
|
'title': result['post']['name'],
|
||||||
'content': content,
|
'content': content,
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
'publishedDate': datetime.strptime(result['post']['published'][:19], '%Y-%m-%dT%H:%M:%S'),
|
'publishedDate': datetime.strptime(result['post']['published'][:19], '%Y-%m-%dT%H:%M:%S'),
|
||||||
'metadata': metadata,
|
'metadata': metadata,
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ def response(resp):
|
||||||
'url': r_url,
|
'url': r_url,
|
||||||
'title': result['name'],
|
'title': result['name'],
|
||||||
'iframe_src': iframe_src.format(url=r_url),
|
'iframe_src': iframe_src.format(url=r_url),
|
||||||
'img_src': result['pictures']['medium'],
|
'thumbnail': result['pictures']['medium'],
|
||||||
'publishedDate': publishedDate,
|
'publishedDate': publishedDate,
|
||||||
'content': result['user']['name'],
|
'content': result['user']['name'],
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,11 +104,11 @@ def response(resp):
|
||||||
item['metadata'] = html_to_text(result.get('meta_short', ''))
|
item['metadata'] = html_to_text(result.get('meta_short', ''))
|
||||||
|
|
||||||
if result.get('image'):
|
if result.get('image'):
|
||||||
item['img_src'] = image_url.format(image_id=result['image'], filename=result['image_filename'])
|
item['thumbnail'] = image_url.format(image_id=result['image'], filename=result['image_filename'])
|
||||||
else:
|
else:
|
||||||
item['url'] = result['url']
|
item['url'] = result['url']
|
||||||
item['content'] = ', '.join([result['class'], result['info'], result['more']])
|
item['content'] = ', '.join([result['class'], result['info'], result['more']])
|
||||||
item['img_src'] = result['image']
|
item['thumbnail'] = result['image']
|
||||||
|
|
||||||
results.append(item)
|
results.append(item)
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ def response(resp):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
url, osm, geojson = get_url_osm_geojson(result)
|
url, osm, geojson = get_url_osm_geojson(result)
|
||||||
img_src = get_thumbnail(get_img_src(result))
|
thumbnail = get_thumbnail(get_img_src(result))
|
||||||
links, link_keys = get_links(result, user_language)
|
links, link_keys = get_links(result, user_language)
|
||||||
data = get_data(result, user_language, link_keys)
|
data = get_data(result, user_language, link_keys)
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ def response(resp):
|
||||||
'url': url,
|
'url': url,
|
||||||
'osm': osm,
|
'osm': osm,
|
||||||
'geojson': geojson,
|
'geojson': geojson,
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
'links': links,
|
'links': links,
|
||||||
'data': data,
|
'data': data,
|
||||||
'type': get_tag_label(result.get('category'), result.get('type', ''), user_language),
|
'type': get_tag_label(result.get('category'), result.get('type', ''), user_language),
|
||||||
|
|
|
@ -65,18 +65,18 @@ def construct_body(result):
|
||||||
page='',
|
page='',
|
||||||
year=result['release_year'],
|
year=result['release_year'],
|
||||||
)
|
)
|
||||||
img_src = pdbe_preview_url.format(pdb_id=result['pdb_id'])
|
thumbnail = pdbe_preview_url.format(pdb_id=result['pdb_id'])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
content = None
|
content = None
|
||||||
img_src = None
|
thumbnail = None
|
||||||
|
|
||||||
# construct url for preview image
|
# construct url for preview image
|
||||||
try:
|
try:
|
||||||
img_src = pdbe_preview_url.format(pdb_id=result['pdb_id'])
|
thumbnail = pdbe_preview_url.format(pdb_id=result['pdb_id'])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
img_src = None
|
thumbnail = None
|
||||||
|
|
||||||
return [title, content, img_src]
|
return [title, content, thumbnail]
|
||||||
|
|
||||||
|
|
||||||
def response(resp):
|
def response(resp):
|
||||||
|
@ -106,16 +106,16 @@ def response(resp):
|
||||||
)
|
)
|
||||||
|
|
||||||
# obsoleted entries don't have preview images
|
# obsoleted entries don't have preview images
|
||||||
img_src = None
|
thumbnail = None
|
||||||
else:
|
else:
|
||||||
title, content, img_src = construct_body(result)
|
title, content, thumbnail = construct_body(result)
|
||||||
|
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
'url': pdbe_entry_url.format(pdb_id=result['pdb_id']),
|
'url': pdbe_entry_url.format(pdb_id=result['pdb_id']),
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': content,
|
'content': content,
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,7 @@ def response(resp):
|
||||||
|
|
||||||
elif piped_filter == 'music_songs':
|
elif piped_filter == 'music_songs':
|
||||||
item["template"] = "default.html"
|
item["template"] = "default.html"
|
||||||
item["img_src"] = result.get("thumbnail", "")
|
item["thumbnail"] = result.get("thumbnail", "")
|
||||||
item["content"] = result.get("uploaderName", "") or ""
|
item["content"] = result.get("uploaderName", "") or ""
|
||||||
|
|
||||||
results.append(item)
|
results.append(item)
|
||||||
|
|
|
@ -162,7 +162,7 @@ def parse_search_query(json_results):
|
||||||
result = {
|
result = {
|
||||||
'url': item['link'],
|
'url': item['link'],
|
||||||
'title': item['title'],
|
'title': item['title'],
|
||||||
'img_src': item['image'],
|
'thumbnail': item['image'],
|
||||||
'content': '',
|
'content': '',
|
||||||
'metadata': item.get('source'),
|
'metadata': item.get('source'),
|
||||||
}
|
}
|
||||||
|
@ -244,7 +244,7 @@ def response(resp):
|
||||||
'url': item.get('link'),
|
'url': item.get('link'),
|
||||||
'content': '',
|
'content': '',
|
||||||
'metadata': ' / '.join(metadata),
|
'metadata': ' / '.join(metadata),
|
||||||
'img_src': item.get('image'),
|
'thumbnail': item.get('image'),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -257,7 +257,7 @@ def response(resp):
|
||||||
'url': item.get('link'),
|
'url': item.get('link'),
|
||||||
'content': item.get('description', ''),
|
'content': item.get('description', ''),
|
||||||
'metadata': ' / '.join(metadata),
|
'metadata': ' / '.join(metadata),
|
||||||
'img_src': item.get('image'),
|
'thumbnail': item.get('image'),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -242,15 +242,15 @@ def parse_web_api(resp):
|
||||||
if pub_date is not None:
|
if pub_date is not None:
|
||||||
pub_date = datetime.fromtimestamp(pub_date)
|
pub_date = datetime.fromtimestamp(pub_date)
|
||||||
news_media = item.get('media', [])
|
news_media = item.get('media', [])
|
||||||
img_src = None
|
thumbnail = None
|
||||||
if news_media:
|
if news_media:
|
||||||
img_src = news_media[0].get('pict', {}).get('url', None)
|
thumbnail = news_media[0].get('pict', {}).get('url', None)
|
||||||
results.append(
|
results.append(
|
||||||
{
|
{
|
||||||
'title': title,
|
'title': title,
|
||||||
'url': res_url,
|
'url': res_url,
|
||||||
'publishedDate': pub_date,
|
'publishedDate': pub_date,
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -312,13 +312,12 @@ def fetch_traits(engine_traits: EngineTraits):
|
||||||
# pylint: disable=import-outside-toplevel
|
# pylint: disable=import-outside-toplevel
|
||||||
from searx import network
|
from searx import network
|
||||||
from searx.locales import region_tag
|
from searx.locales import region_tag
|
||||||
|
from searx.utils import extr
|
||||||
|
|
||||||
resp = network.get(about['website'])
|
resp = network.get(about['website'])
|
||||||
text = resp.text
|
json_string = extr(resp.text, 'INITIAL_PROPS = ', '</script>')
|
||||||
text = text[text.find('INITIAL_PROPS') :]
|
|
||||||
text = text[text.find('{') : text.find('</script>')]
|
|
||||||
|
|
||||||
q_initial_props = loads(text)
|
q_initial_props = loads(json_string)
|
||||||
q_locales = q_initial_props.get('locales')
|
q_locales = q_initial_props.get('locales')
|
||||||
eng_tag_list = set()
|
eng_tag_list = set()
|
||||||
|
|
||||||
|
|
|
@ -114,7 +114,7 @@ def response(resp):
|
||||||
{
|
{
|
||||||
'url': url,
|
'url': url,
|
||||||
'title': result['name'],
|
'title': result['name'],
|
||||||
'img_src': result.get('favicon', '').replace("http://", "https://"),
|
'thumbnail': result.get('favicon', '').replace("http://", "https://"),
|
||||||
'content': ' | '.join(content),
|
'content': ' | '.join(content),
|
||||||
'metadata': ' | '.join(metadata),
|
'metadata': ' | '.join(metadata),
|
||||||
'iframe_src': result['url_resolved'].replace("http://", "https://"),
|
'iframe_src': result['url_resolved'].replace("http://", "https://"),
|
||||||
|
|
|
@ -133,7 +133,7 @@ def response(resp):
|
||||||
)
|
)
|
||||||
|
|
||||||
if mtype in ['image'] and subtype in ['bmp', 'gif', 'jpeg', 'png']:
|
if mtype in ['image'] and subtype in ['bmp', 'gif', 'jpeg', 'png']:
|
||||||
item['img_src'] = url
|
item['thumbnail'] = url
|
||||||
|
|
||||||
results.append(item)
|
results.append(item)
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ base_url = "https://www.rottentomatoes.com"
|
||||||
results_xpath = "//search-page-media-row"
|
results_xpath = "//search-page-media-row"
|
||||||
url_xpath = "./a[1]/@href"
|
url_xpath = "./a[1]/@href"
|
||||||
title_xpath = "./a/img/@alt"
|
title_xpath = "./a/img/@alt"
|
||||||
img_src_xpath = "./a/img/@src"
|
thumbnail_xpath = "./a/img/@src"
|
||||||
release_year_xpath = "concat('From ', string(./@releaseyear))"
|
release_year_xpath = "concat('From ', string(./@releaseyear))"
|
||||||
score_xpath = "concat('Score: ', string(./@tomatometerscore))"
|
score_xpath = "concat('Score: ', string(./@tomatometerscore))"
|
||||||
cast_xpath = "concat('Starring ', string(./@cast))"
|
cast_xpath = "concat('Starring ', string(./@cast))"
|
||||||
|
@ -52,7 +52,7 @@ def response(resp):
|
||||||
'url': extract_text(eval_xpath(result, url_xpath)),
|
'url': extract_text(eval_xpath(result, url_xpath)),
|
||||||
'title': extract_text(eval_xpath(result, title_xpath)),
|
'title': extract_text(eval_xpath(result, title_xpath)),
|
||||||
'content': ', '.join(content),
|
'content': ', '.join(content),
|
||||||
'img_src': extract_text(eval_xpath(result, img_src_xpath)),
|
'thumbnail': extract_text(eval_xpath(result, thumbnail_xpath)),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -77,8 +77,7 @@ def response(resp):
|
||||||
{
|
{
|
||||||
'url': url + 'structure/' + result['id'],
|
'url': url + 'structure/' + result['id'],
|
||||||
'title': result['label'],
|
'title': result['label'],
|
||||||
# 'thumbnail': thumbnail,
|
'thumbnail': thumbnail,
|
||||||
'img_src': thumbnail,
|
|
||||||
'content': html_to_text(content),
|
'content': html_to_text(content),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -94,9 +94,9 @@ def response(resp):
|
||||||
'publishedDate': parser.parse(result['last_modified']),
|
'publishedDate': parser.parse(result['last_modified']),
|
||||||
'iframe_src': "https://w.soundcloud.com/player/?url=" + uri,
|
'iframe_src': "https://w.soundcloud.com/player/?url=" + uri,
|
||||||
}
|
}
|
||||||
img_src = result['artwork_url'] or result['user']['avatar_url']
|
thumbnail = result['artwork_url'] or result['user']['avatar_url']
|
||||||
if img_src:
|
if thumbnail:
|
||||||
res['img_src'] = img_src
|
res['thumbnail'] = thumbnail
|
||||||
results.append(res)
|
results.append(res)
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
|
@ -78,6 +78,7 @@ Startpage's category (for Web-search, News, Videos, ..) is set by
|
||||||
yet implemented.
|
yet implemented.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
# pylint: disable=too-many-statements
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
from typing import TYPE_CHECKING
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
@ -88,7 +89,7 @@ from datetime import datetime, timedelta
|
||||||
|
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
import lxml.html
|
import lxml.html
|
||||||
import babel
|
import babel.localedata
|
||||||
|
|
||||||
from searx.utils import extract_text, eval_xpath, gen_useragent
|
from searx.utils import extract_text, eval_xpath, gen_useragent
|
||||||
from searx.network import get # see https://github.com/searxng/searxng/issues/762
|
from searx.network import get # see https://github.com/searxng/searxng/issues/762
|
||||||
|
@ -142,9 +143,6 @@ search_url = base_url + '/sp/search'
|
||||||
# specific xpath variables
|
# specific xpath variables
|
||||||
# ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
|
# ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
|
||||||
# not ads: div[@class="result"] are the direct childs of div[@id="results"]
|
# not ads: div[@class="result"] are the direct childs of div[@id="results"]
|
||||||
results_xpath = '//div[@class="w-gl__result__main"]'
|
|
||||||
link_xpath = './/a[@class="w-gl__result-title result-link"]'
|
|
||||||
content_xpath = './/p[@class="w-gl__description"]'
|
|
||||||
search_form_xpath = '//form[@id="search"]'
|
search_form_xpath = '//form[@id="search"]'
|
||||||
"""XPath of Startpage's origin search form
|
"""XPath of Startpage's origin search form
|
||||||
|
|
||||||
|
@ -334,8 +332,8 @@ def _response_cat_web(dom):
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
# parse results
|
# parse results
|
||||||
for result in eval_xpath(dom, results_xpath):
|
for result in eval_xpath(dom, '//div[@class="w-gl"]/div[contains(@class, "result")]'):
|
||||||
links = eval_xpath(result, link_xpath)
|
links = eval_xpath(result, './/a[contains(@class, "result-title result-link")]')
|
||||||
if not links:
|
if not links:
|
||||||
continue
|
continue
|
||||||
link = links[0]
|
link = links[0]
|
||||||
|
@ -349,12 +347,9 @@ def _response_cat_web(dom):
|
||||||
if re.match(r"^http(s|)://(www\.)?startpage\.com/do/search\?.*$", url):
|
if re.match(r"^http(s|)://(www\.)?startpage\.com/do/search\?.*$", url):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
title = extract_text(link)
|
title = extract_text(eval_xpath(link, 'h2'))
|
||||||
|
content = eval_xpath(result, './/p[contains(@class, "description")]')
|
||||||
if eval_xpath(result, content_xpath):
|
content = extract_text(content, allow_none=True) or ''
|
||||||
content: str = extract_text(eval_xpath(result, content_xpath)) # type: ignore
|
|
||||||
else:
|
|
||||||
content = ''
|
|
||||||
|
|
||||||
published_date = None
|
published_date = None
|
||||||
|
|
||||||
|
@ -445,10 +440,12 @@ def fetch_traits(engine_traits: EngineTraits):
|
||||||
|
|
||||||
# get the native name of every language known by babel
|
# get the native name of every language known by babel
|
||||||
|
|
||||||
for lang_code in filter(
|
for lang_code in filter(lambda lang_code: lang_code.find('_') == -1, babel.localedata.locale_identifiers()):
|
||||||
lambda lang_code: lang_code.find('_') == -1, babel.localedata.locale_identifiers() # type: ignore
|
native_name = babel.Locale(lang_code).get_language_name()
|
||||||
):
|
if not native_name:
|
||||||
native_name = babel.Locale(lang_code).get_language_name().lower() # type: ignore
|
print(f"ERROR: language name of startpage's language {lang_code} is unknown by babel")
|
||||||
|
continue
|
||||||
|
native_name = native_name.lower()
|
||||||
# add native name exactly as it is
|
# add native name exactly as it is
|
||||||
catalog_engine2code[native_name] = lang_code
|
catalog_engine2code[native_name] = lang_code
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ from urllib.parse import urlencode
|
||||||
from json import loads
|
from json import loads
|
||||||
from dateutil import parser
|
from dateutil import parser
|
||||||
|
|
||||||
|
from searx.utils import extr
|
||||||
|
|
||||||
# about
|
# about
|
||||||
about = {
|
about = {
|
||||||
"website": 'https://vimeo.com/',
|
"website": 'https://vimeo.com/',
|
||||||
|
@ -23,7 +25,7 @@ paging = True
|
||||||
|
|
||||||
# search-url
|
# search-url
|
||||||
base_url = 'https://vimeo.com/'
|
base_url = 'https://vimeo.com/'
|
||||||
search_url = base_url + '/search/page:{pageno}?{query}'
|
search_url = base_url + 'search/page:{pageno}?{query}'
|
||||||
|
|
||||||
|
|
||||||
# do search-request
|
# do search-request
|
||||||
|
@ -36,9 +38,8 @@ def request(query, params):
|
||||||
# get response from search-request
|
# get response from search-request
|
||||||
def response(resp):
|
def response(resp):
|
||||||
results = []
|
results = []
|
||||||
data_start_pos = resp.text.find('{"filtered"')
|
|
||||||
data_end_pos = resp.text.find(';\n', data_start_pos + 1)
|
data = loads(extr(resp.text, 'var data = ', ';\n'))
|
||||||
data = loads(resp.text[data_start_pos:data_end_pos])
|
|
||||||
|
|
||||||
# parse results
|
# parse results
|
||||||
for result in data['filtered']['data']:
|
for result in data['filtered']['data']:
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import datetime
|
||||||
|
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
# about
|
# about
|
||||||
|
@ -14,6 +16,8 @@ about = {
|
||||||
"require_api_key": False,
|
"require_api_key": False,
|
||||||
"results": 'JSON',
|
"results": 'JSON',
|
||||||
}
|
}
|
||||||
|
categories = ['images']
|
||||||
|
search_type = 'images'
|
||||||
|
|
||||||
base_url = "https://commons.wikimedia.org"
|
base_url = "https://commons.wikimedia.org"
|
||||||
search_prefix = (
|
search_prefix = (
|
||||||
|
@ -29,17 +33,29 @@ search_prefix = (
|
||||||
paging = True
|
paging = True
|
||||||
number_of_results = 10
|
number_of_results = 10
|
||||||
|
|
||||||
|
search_types = {
|
||||||
|
'images': 'bitmap|drawing',
|
||||||
|
'videos': 'video',
|
||||||
|
'audio': 'audio',
|
||||||
|
'files': 'multimedia|office|archive|3d',
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def request(query, params):
|
def request(query, params):
|
||||||
language = 'en'
|
language = 'en'
|
||||||
if params['language'] != 'all':
|
if params['language'] != 'all':
|
||||||
language = params['language'].split('-')[0]
|
language = params['language'].split('-')[0]
|
||||||
|
|
||||||
|
if search_type not in search_types:
|
||||||
|
raise ValueError(f"Unsupported search type: {search_type}")
|
||||||
|
|
||||||
|
filetype = search_types[search_type]
|
||||||
|
|
||||||
args = {
|
args = {
|
||||||
'uselang': language,
|
'uselang': language,
|
||||||
'gsrlimit': number_of_results,
|
'gsrlimit': number_of_results,
|
||||||
'gsroffset': number_of_results * (params["pageno"] - 1),
|
'gsroffset': number_of_results * (params["pageno"] - 1),
|
||||||
'gsrsearch': "filetype:bitmap|drawing " + query,
|
'gsrsearch': f"filetype:{filetype} {query}",
|
||||||
}
|
}
|
||||||
|
|
||||||
params["url"] = f"{base_url}/w/api.php{search_prefix}&{urlencode(args, safe=':|')}"
|
params["url"] = f"{base_url}/w/api.php{search_prefix}&{urlencode(args, safe=':|')}"
|
||||||
|
@ -52,7 +68,6 @@ def response(resp):
|
||||||
|
|
||||||
if not json.get("query", {}).get("pages"):
|
if not json.get("query", {}).get("pages"):
|
||||||
return results
|
return results
|
||||||
|
|
||||||
for item in json["query"]["pages"].values():
|
for item in json["query"]["pages"].values():
|
||||||
imageinfo = item["imageinfo"][0]
|
imageinfo = item["imageinfo"][0]
|
||||||
title = item["title"].replace("File:", "").rsplit('.', 1)[0]
|
title = item["title"].replace("File:", "").rsplit('.', 1)[0]
|
||||||
|
@ -60,11 +75,28 @@ def response(resp):
|
||||||
'url': imageinfo["descriptionurl"],
|
'url': imageinfo["descriptionurl"],
|
||||||
'title': title,
|
'title': title,
|
||||||
'content': item["snippet"],
|
'content': item["snippet"],
|
||||||
'img_src': imageinfo["url"],
|
|
||||||
'resolution': f'{imageinfo["width"]} x {imageinfo["height"]}',
|
|
||||||
'thumbnail_src': imageinfo["thumburl"],
|
|
||||||
'template': 'images.html',
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if search_type == "images":
|
||||||
|
result['template'] = 'images.html'
|
||||||
|
result['img_src'] = imageinfo["url"]
|
||||||
|
result['thumbnail_src'] = imageinfo["thumburl"]
|
||||||
|
result['resolution'] = f'{imageinfo["width"]} x {imageinfo["height"]}'
|
||||||
|
else:
|
||||||
|
result['thumbnail'] = imageinfo["thumburl"]
|
||||||
|
|
||||||
|
if search_type == "videos":
|
||||||
|
result['template'] = 'videos.html'
|
||||||
|
if imageinfo.get('duration'):
|
||||||
|
result['length'] = datetime.timedelta(seconds=int(imageinfo['duration']))
|
||||||
|
result['iframe_src'] = imageinfo['url']
|
||||||
|
elif search_type == "files":
|
||||||
|
result['template'] = 'files.html'
|
||||||
|
result['metadata'] = imageinfo['mime']
|
||||||
|
result['size'] = imageinfo['size']
|
||||||
|
elif search_type == "audio":
|
||||||
|
result['iframe_src'] = imageinfo['url']
|
||||||
|
|
||||||
results.append(result)
|
results.append(result)
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
|
@ -762,7 +762,8 @@ def debug_explain_wikidata_query(query, method='GET'):
|
||||||
|
|
||||||
def init(engine_settings=None): # pylint: disable=unused-argument
|
def init(engine_settings=None): # pylint: disable=unused-argument
|
||||||
# WIKIDATA_PROPERTIES : add unit symbols
|
# WIKIDATA_PROPERTIES : add unit symbols
|
||||||
WIKIDATA_PROPERTIES.update(WIKIDATA_UNITS)
|
for k, v in WIKIDATA_UNITS.items():
|
||||||
|
WIKIDATA_PROPERTIES[k] = v['symbol']
|
||||||
|
|
||||||
# WIKIDATA_PROPERTIES : add property labels
|
# WIKIDATA_PROPERTIES : add property labels
|
||||||
wikidata_property_names = []
|
wikidata_property_names = []
|
||||||
|
|
|
@ -135,7 +135,7 @@ title_xpath = None
|
||||||
'''`XPath selector`_ of result's ``title``.'''
|
'''`XPath selector`_ of result's ``title``.'''
|
||||||
|
|
||||||
thumbnail_xpath = False
|
thumbnail_xpath = False
|
||||||
'''`XPath selector`_ of result's ``img_src``.'''
|
'''`XPath selector`_ of result's ``thumbnail``.'''
|
||||||
|
|
||||||
suggestion_xpath = ''
|
suggestion_xpath = ''
|
||||||
'''`XPath selector`_ of result's ``suggestion``.'''
|
'''`XPath selector`_ of result's ``suggestion``.'''
|
||||||
|
@ -266,7 +266,7 @@ def response(resp): # pylint: disable=too-many-branches
|
||||||
if thumbnail_xpath:
|
if thumbnail_xpath:
|
||||||
thumbnail_xpath_result = eval_xpath_list(result, thumbnail_xpath)
|
thumbnail_xpath_result = eval_xpath_list(result, thumbnail_xpath)
|
||||||
if len(thumbnail_xpath_result) > 0:
|
if len(thumbnail_xpath_result) > 0:
|
||||||
tmp_result['img_src'] = extract_url(thumbnail_xpath_result, search_url)
|
tmp_result['thumbnail'] = extract_url(thumbnail_xpath_result, search_url)
|
||||||
|
|
||||||
# add alternative cached url if available
|
# add alternative cached url if available
|
||||||
if cached_xpath:
|
if cached_xpath:
|
||||||
|
|
|
@ -22,20 +22,26 @@ The engine has the following (additional) settings:
|
||||||
- :py:obj:`search_mode`
|
- :py:obj:`search_mode`
|
||||||
- :py:obj:`search_type`
|
- :py:obj:`search_type`
|
||||||
|
|
||||||
|
The :py:obj:`base_url` has to be set in the engine named `yacy` and is used by
|
||||||
|
all yacy engines.
|
||||||
|
|
||||||
.. code:: yaml
|
.. code:: yaml
|
||||||
|
|
||||||
- name: yacy
|
- name: yacy
|
||||||
engine: yacy
|
engine: yacy
|
||||||
categories: general
|
categories: general
|
||||||
search_type: text
|
search_type: text
|
||||||
base_url: https://yacy.searchlab.eu
|
|
||||||
shortcut: ya
|
shortcut: ya
|
||||||
|
base_url:
|
||||||
|
- https://yacy.searchlab.eu
|
||||||
|
- https://search.lomig.me
|
||||||
|
- https://yacy.ecosys.eu
|
||||||
|
- https://search.webproject.link
|
||||||
|
|
||||||
- name: yacy images
|
- name: yacy images
|
||||||
engine: yacy
|
engine: yacy
|
||||||
categories: images
|
categories: images
|
||||||
search_type: image
|
search_type: image
|
||||||
base_url: https://yacy.searchlab.eu
|
|
||||||
shortcut: yai
|
shortcut: yai
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
|
@ -45,6 +51,9 @@ Implementations
|
||||||
"""
|
"""
|
||||||
# pylint: disable=fixme
|
# pylint: disable=fixme
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import random
|
||||||
from json import loads
|
from json import loads
|
||||||
from urllib.parse import urlencode
|
from urllib.parse import urlencode
|
||||||
from dateutil import parser
|
from dateutil import parser
|
||||||
|
@ -87,15 +96,10 @@ search_type = 'text'
|
||||||
``video`` are not yet implemented (Pull-Requests are welcome).
|
``video`` are not yet implemented (Pull-Requests are welcome).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# search-url
|
base_url: list | str = 'https://yacy.searchlab.eu'
|
||||||
base_url = 'https://yacy.searchlab.eu'
|
"""The value is an URL or a list of URLs. In the latter case instance will be
|
||||||
search_url = (
|
selected randomly.
|
||||||
'/yacysearch.json?{query}'
|
"""
|
||||||
'&startRecord={offset}'
|
|
||||||
'&maximumRecords={limit}'
|
|
||||||
'&contentdom={search_type}'
|
|
||||||
'&resource={resource}'
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def init(_):
|
def init(_):
|
||||||
|
@ -108,23 +112,34 @@ def init(_):
|
||||||
raise ValueError('search_type "%s" is not one of %s' % (search_type, valid_types))
|
raise ValueError('search_type "%s" is not one of %s' % (search_type, valid_types))
|
||||||
|
|
||||||
|
|
||||||
|
def _base_url() -> str:
|
||||||
|
from searx.engines import engines # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
|
url = engines['yacy'].base_url # type: ignore
|
||||||
|
if isinstance(url, list):
|
||||||
|
url = random.choice(url)
|
||||||
|
return url
|
||||||
|
|
||||||
|
|
||||||
def request(query, params):
|
def request(query, params):
|
||||||
|
|
||||||
offset = (params['pageno'] - 1) * number_of_results
|
offset = (params['pageno'] - 1) * number_of_results
|
||||||
|
args = {
|
||||||
params['url'] = base_url + search_url.format(
|
'query': query,
|
||||||
query=urlencode({'query': query}),
|
'startRecord': offset,
|
||||||
offset=offset,
|
'maximumRecords': number_of_results,
|
||||||
limit=number_of_results,
|
'contentdom': search_type,
|
||||||
search_type=search_type,
|
'resource': search_mode,
|
||||||
resource=search_mode,
|
}
|
||||||
)
|
|
||||||
|
|
||||||
if http_digest_auth_user and http_digest_auth_pass:
|
|
||||||
params['auth'] = DigestAuth(http_digest_auth_user, http_digest_auth_pass)
|
|
||||||
|
|
||||||
# add language tag if specified
|
# add language tag if specified
|
||||||
if params['language'] != 'all':
|
if params['language'] != 'all':
|
||||||
params['url'] += '&lr=lang_' + params['language'].split('-')[0]
|
args['lr'] = 'lang_' + params['language'].split('-')[0]
|
||||||
|
|
||||||
|
params["url"] = f"{_base_url()}/yacysearch.json?{urlencode(args)}"
|
||||||
|
|
||||||
|
if http_digest_auth_user and http_digest_auth_pass:
|
||||||
|
params['auth'] = DigestAuth(http_digest_auth_user, http_digest_auth_pass)
|
||||||
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
|
@ -77,9 +77,9 @@ def response(resp):
|
||||||
url = parse_url(url)
|
url = parse_url(url)
|
||||||
title = extract_text(result.xpath('.//h4/a'))
|
title = extract_text(result.xpath('.//h4/a'))
|
||||||
content = extract_text(result.xpath('.//p'))
|
content = extract_text(result.xpath('.//p'))
|
||||||
img_src = eval_xpath_getindex(result, './/img/@data-src', 0, None)
|
thumbnail = eval_xpath_getindex(result, './/img/@data-src', 0, None)
|
||||||
|
|
||||||
item = {'url': url, 'title': title, 'content': content, 'img_src': img_src}
|
item = {'url': url, 'title': title, 'content': content, 'thumbnail': thumbnail}
|
||||||
|
|
||||||
pub_date = extract_text(result.xpath('.//span[contains(@class,"s-time")]'))
|
pub_date = extract_text(result.xpath('.//span[contains(@class,"s-time")]'))
|
||||||
ago = AGO_RE.search(pub_date)
|
ago = AGO_RE.search(pub_date)
|
||||||
|
|
|
@ -7,6 +7,8 @@ from functools import reduce
|
||||||
from json import loads, dumps
|
from json import loads, dumps
|
||||||
from urllib.parse import quote_plus
|
from urllib.parse import quote_plus
|
||||||
|
|
||||||
|
from searx.utils import extr
|
||||||
|
|
||||||
# about
|
# about
|
||||||
about = {
|
about = {
|
||||||
"website": 'https://www.youtube.com/',
|
"website": 'https://www.youtube.com/',
|
||||||
|
@ -109,8 +111,8 @@ def parse_next_page_response(response_text):
|
||||||
|
|
||||||
def parse_first_page_response(response_text):
|
def parse_first_page_response(response_text):
|
||||||
results = []
|
results = []
|
||||||
results_data = response_text[response_text.find('ytInitialData') :]
|
results_data = extr(response_text, 'ytInitialData = ', ';</script>')
|
||||||
results_data = results_data[results_data.find('{') : results_data.find(';</script>')]
|
|
||||||
results_json = loads(results_data) if results_data else {}
|
results_json = loads(results_data) if results_data else {}
|
||||||
sections = (
|
sections = (
|
||||||
results_json.get('contents', {})
|
results_json.get('contents', {})
|
||||||
|
|
|
@ -52,11 +52,11 @@ def response(resp):
|
||||||
if description is not None:
|
if description is not None:
|
||||||
content = markdown_to_text(description['text'])
|
content = markdown_to_text(description['text'])
|
||||||
|
|
||||||
img_src = None
|
thumbnail = None
|
||||||
if result['display']['images']:
|
if result['display']['images']:
|
||||||
img_src = result['display']['images'][0]
|
thumbnail = result['display']['images'][0]
|
||||||
elif result['content']['details']['images']:
|
elif result['content']['details']['images']:
|
||||||
img_src = result['content']['details']['images'][0]['resizableImageUrl']
|
thumbnail = result['content']['details']['images'][0]['resizableImageUrl']
|
||||||
|
|
||||||
url = result['display']['source']['sourceRecipeUrl']
|
url = result['display']['source']['sourceRecipeUrl']
|
||||||
if 'www.yummly.com/private' in url:
|
if 'www.yummly.com/private' in url:
|
||||||
|
@ -67,7 +67,7 @@ def response(resp):
|
||||||
'url': url,
|
'url': url,
|
||||||
'title': result['display']['displayName'],
|
'title': result['display']['displayName'],
|
||||||
'content': content,
|
'content': content,
|
||||||
'img_src': img_src,
|
'thumbnail': thumbnail,
|
||||||
'metadata': gettext('Language') + f": {result['locale'].split('-')[0]}",
|
'metadata': gettext('Language') + f": {result['locale'].split('-')[0]}",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -141,9 +141,12 @@ def _parse_result(item) -> Dict[str, Any]:
|
||||||
"authors": [extract_text(author) for author in author_elements],
|
"authors": [extract_text(author) for author in author_elements],
|
||||||
"publisher": _text(item, './/a[@title="Publisher"]'),
|
"publisher": _text(item, './/a[@title="Publisher"]'),
|
||||||
"type": _text(item, './/div[contains(@class, "property__file")]//div[contains(@class, "property_value")]'),
|
"type": _text(item, './/div[contains(@class, "property__file")]//div[contains(@class, "property_value")]'),
|
||||||
"img_src": _text(item, './/img[contains(@class, "cover")]/@data-src'),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
thumbnail = _text(item, './/img[contains(@class, "cover")]/@data-src')
|
||||||
|
if not thumbnail.startswith('/'):
|
||||||
|
result["thumbnail"] = thumbnail
|
||||||
|
|
||||||
year = _text(item, './/div[contains(@class, "property_year")]//div[contains(@class, "property_value")]')
|
year = _text(item, './/div[contains(@class, "property_year")]//div[contains(@class, "property_value")]')
|
||||||
if year:
|
if year:
|
||||||
result["publishedDate"] = datetime.strptime(year, '%Y')
|
result["publishedDate"] = datetime.strptime(year, '%Y')
|
||||||
|
|
|
@ -17,6 +17,8 @@ Usage in a Flask app route:
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
__all__ = ['InfoPage', 'InfoPageSet']
|
__all__ = ['InfoPage', 'InfoPageSet']
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -37,6 +39,16 @@ from ..locales import LOCALE_NAMES
|
||||||
|
|
||||||
logger = logging.getLogger('searx.infopage')
|
logger = logging.getLogger('searx.infopage')
|
||||||
_INFO_FOLDER = os.path.abspath(os.path.dirname(__file__))
|
_INFO_FOLDER = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
INFO_PAGES: 'InfoPageSet'
|
||||||
|
|
||||||
|
|
||||||
|
def __getattr__(name):
|
||||||
|
if name == 'INFO_PAGES':
|
||||||
|
global INFO_PAGES # pylint: disable=global-statement
|
||||||
|
INFO_PAGES = InfoPageSet()
|
||||||
|
return INFO_PAGES
|
||||||
|
|
||||||
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
||||||
|
|
||||||
|
|
||||||
class InfoPage:
|
class InfoPage:
|
||||||
|
|
88
searx/plugins/calculator.py
Normal file
88
searx/plugins/calculator.py
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Calculate mathematical expressions using ack#eval
|
||||||
|
"""
|
||||||
|
|
||||||
|
import ast
|
||||||
|
import operator
|
||||||
|
|
||||||
|
from flask_babel import gettext
|
||||||
|
from searx import settings
|
||||||
|
|
||||||
|
name = "Basic Calculator"
|
||||||
|
description = gettext("Calculate mathematical expressions via the search bar")
|
||||||
|
default_on = False
|
||||||
|
|
||||||
|
preference_section = 'general'
|
||||||
|
plugin_id = 'calculator'
|
||||||
|
|
||||||
|
operators = {
|
||||||
|
ast.Add: operator.add,
|
||||||
|
ast.Sub: operator.sub,
|
||||||
|
ast.Mult: operator.mul,
|
||||||
|
ast.Div: operator.truediv,
|
||||||
|
ast.Pow: operator.pow,
|
||||||
|
ast.BitXor: operator.xor,
|
||||||
|
ast.USub: operator.neg,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def _eval_expr(expr):
|
||||||
|
"""
|
||||||
|
>>> _eval_expr('2^6')
|
||||||
|
4
|
||||||
|
>>> _eval_expr('2**6')
|
||||||
|
64
|
||||||
|
>>> _eval_expr('1 + 2*3**(4^5) / (6 + -7)')
|
||||||
|
-5.0
|
||||||
|
"""
|
||||||
|
return _eval(ast.parse(expr, mode='eval').body)
|
||||||
|
|
||||||
|
|
||||||
|
def _eval(node):
|
||||||
|
if isinstance(node, ast.Constant) and isinstance(node.value, int):
|
||||||
|
return node.value
|
||||||
|
|
||||||
|
if isinstance(node, ast.BinOp):
|
||||||
|
return operators[type(node.op)](_eval(node.left), _eval(node.right))
|
||||||
|
|
||||||
|
if isinstance(node, ast.UnaryOp):
|
||||||
|
return operators[type(node.op)](_eval(node.operand))
|
||||||
|
|
||||||
|
raise TypeError(node)
|
||||||
|
|
||||||
|
|
||||||
|
def post_search(_request, search):
|
||||||
|
# don't run on public instances due to possible attack surfaces
|
||||||
|
if settings['server']['public_instance']:
|
||||||
|
return True
|
||||||
|
|
||||||
|
# only show the result of the expression on the first page
|
||||||
|
if search.search_query.pageno > 1:
|
||||||
|
return True
|
||||||
|
|
||||||
|
query = search.search_query.query
|
||||||
|
# in order to avoid DoS attacks with long expressions, ignore long expressions
|
||||||
|
if len(query) > 100:
|
||||||
|
return True
|
||||||
|
|
||||||
|
# replace commonly used math operators with their proper Python operator
|
||||||
|
query = query.replace("x", "*").replace(":", "/")
|
||||||
|
|
||||||
|
# only numbers and math operators are accepted
|
||||||
|
if any(str.isalpha(c) for c in query):
|
||||||
|
return True
|
||||||
|
|
||||||
|
# in python, powers are calculated via **
|
||||||
|
query_py_formatted = query.replace("^", "**")
|
||||||
|
try:
|
||||||
|
result = str(_eval_expr(query_py_formatted))
|
||||||
|
if result != query:
|
||||||
|
search.result_container.answers['calculate'] = {'answer': f"{query} = {result}"}
|
||||||
|
except (TypeError, SyntaxError, ArithmeticError):
|
||||||
|
pass
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def is_allowed():
|
||||||
|
return not settings['server']['public_instance']
|
|
@ -1,58 +1,245 @@
|
||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
"""Calculate mathematical expressions using ack#eval
|
"""A plugin for converting measured values from one unit to another unit (a
|
||||||
|
unit converter).
|
||||||
|
|
||||||
|
The plugin looks up the symbols (given in the query term) in a list of
|
||||||
|
converters, each converter is one item in the list (compare
|
||||||
|
:py:obj:`ADDITIONAL_UNITS`). If the symbols are ambiguous, the matching units
|
||||||
|
of measurement are evaluated. The weighting in the evaluation results from the
|
||||||
|
sorting of the :py:obj:`list of unit converters<symbol_to_si>`.
|
||||||
|
|
||||||
|
Enable in ``settings.yml``:
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
enabled_plugins:
|
||||||
|
..
|
||||||
|
- 'Unit converter plugin'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from flask_babel import gettext
|
import re
|
||||||
|
import babel.numbers
|
||||||
|
from flask_babel import gettext, get_locale
|
||||||
|
|
||||||
|
from searx import data
|
||||||
|
|
||||||
from searx.data import WIKIDATA_UNITS
|
|
||||||
|
|
||||||
name = "Unit converter plugin"
|
name = "Unit converter plugin"
|
||||||
description = gettext("Convert between units")
|
description = gettext("Convert between units")
|
||||||
default_on = True
|
default_on = True
|
||||||
|
|
||||||
|
plugin_id = "unit_converter"
|
||||||
|
preference_section = "general"
|
||||||
|
|
||||||
CONVERT_KEYWORDS = ["in", "to", "as"]
|
CONVERT_KEYWORDS = ["in", "to", "as"]
|
||||||
|
|
||||||
|
# inspired from https://stackoverflow.com/a/42475086
|
||||||
def _convert(from_value, source_si_factor, target_si_factor):
|
RE_MEASURE = r'''
|
||||||
return from_value * source_si_factor / target_si_factor
|
(?P<sign>[-+]?) # +/- or nothing for positive
|
||||||
|
(\s*) # separator: white space or nothing
|
||||||
|
(?P<number>[\d\.,]*) # number: 1,000.00 (en) or 1.000,00 (de)
|
||||||
|
(?P<E>[eE][-+]?\d+)? # scientific notation: e(+/-)2 (*10^2)
|
||||||
|
(\s*) # separator: white space or nothing
|
||||||
|
(?P<unit>\S+) # unit of measure
|
||||||
|
'''
|
||||||
|
|
||||||
|
|
||||||
def _parse_text_and_convert(search, splitted_query):
|
ADDITIONAL_UNITS = [
|
||||||
if len(splitted_query) != 2 or splitted_query[0].strip() == "" or splitted_query[1].strip() == "":
|
{
|
||||||
|
"si_name": "Q11579",
|
||||||
|
"symbol": "°C",
|
||||||
|
"to_si": lambda val: val + 273.15,
|
||||||
|
"from_si": lambda val: val - 273.15,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"si_name": "Q11579",
|
||||||
|
"symbol": "°F",
|
||||||
|
"to_si": lambda val: (val + 459.67) * 5 / 9,
|
||||||
|
"from_si": lambda val: (val * 9 / 5) - 459.67,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
"""Additional items to convert from a measure unit to a SI unit (vice versa).
|
||||||
|
|
||||||
|
.. code:: python
|
||||||
|
|
||||||
|
{
|
||||||
|
"si_name": "Q11579", # Wikidata item ID of the SI unit (Kelvin)
|
||||||
|
"symbol": "°C", # symbol of the measure unit
|
||||||
|
"to_si": lambda val: val + 273.15, # convert measure value (val) to SI unit
|
||||||
|
"from_si": lambda val: val - 273.15, # convert SI value (val) measure unit
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"si_name": "Q11573",
|
||||||
|
"symbol": "mi",
|
||||||
|
"to_si": 1609.344, # convert measure value (val) to SI unit
|
||||||
|
"from_si": 1 / 1609.344 # convert SI value (val) measure unit
|
||||||
|
},
|
||||||
|
|
||||||
|
The values of ``to_si`` and ``from_si`` can be of :py:obj:`float` (a multiplier)
|
||||||
|
or a callable_ (val in / converted value returned).
|
||||||
|
|
||||||
|
.. _callable: https://docs.python.org/3/glossary.html#term-callable
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
ALIAS_SYMBOLS = {
|
||||||
|
'°C': ('C',),
|
||||||
|
'°F': ('F',),
|
||||||
|
'mi': ('L',),
|
||||||
|
}
|
||||||
|
"""Alias symbols for known unit of measure symbols / by example::
|
||||||
|
|
||||||
|
'°C': ('C', ...), # list of alias symbols for °C (Q69362731)
|
||||||
|
'°F': ('F', ...), # list of alias symbols for °F (Q99490479)
|
||||||
|
'mi': ('L',), # list of alias symbols for mi (Q253276)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
SYMBOL_TO_SI = []
|
||||||
|
|
||||||
|
|
||||||
|
def symbol_to_si():
|
||||||
|
"""Generates a list of tuples, each tuple is a measure unit and the fields
|
||||||
|
in the tuple are:
|
||||||
|
|
||||||
|
0. Symbol of the measure unit (e.g. 'mi' for measure unit 'miles' Q253276)
|
||||||
|
|
||||||
|
1. SI name of the measure unit (e.g. Q11573 for SI unit 'metre')
|
||||||
|
|
||||||
|
2. Factor to get SI value from measure unit (e.g. 1mi is equal to SI 1m
|
||||||
|
multiplied by 1609.344)
|
||||||
|
|
||||||
|
3. Factor to get measure value from from SI value (e.g. SI 100m is equal to
|
||||||
|
100mi divided by 1609.344)
|
||||||
|
|
||||||
|
The returned list is sorted, the first items are created from
|
||||||
|
``WIKIDATA_UNITS``, the second group of items is build from
|
||||||
|
:py:obj:`ADDITIONAL_UNITS` and items created from :py:obj:`ALIAS_SYMBOLS`.
|
||||||
|
|
||||||
|
If you search this list for a symbol, then a match with a symbol from
|
||||||
|
Wikidata has the highest weighting (first hit in the list), followed by the
|
||||||
|
symbols from the :py:obj:`ADDITIONAL_UNITS` and the lowest weighting is
|
||||||
|
given to the symbols resulting from the aliases :py:obj:`ALIAS_SYMBOLS`.
|
||||||
|
|
||||||
|
"""
|
||||||
|
|
||||||
|
global SYMBOL_TO_SI # pylint: disable=global-statement
|
||||||
|
if SYMBOL_TO_SI:
|
||||||
|
return SYMBOL_TO_SI
|
||||||
|
|
||||||
|
# filter out units which can't be normalized to a SI unit and filter out
|
||||||
|
# units without a symbol / arcsecond does not have a symbol
|
||||||
|
# https://www.wikidata.org/wiki/Q829073
|
||||||
|
|
||||||
|
for item in data.WIKIDATA_UNITS.values():
|
||||||
|
if item['to_si_factor'] and item['symbol']:
|
||||||
|
SYMBOL_TO_SI.append(
|
||||||
|
(
|
||||||
|
item['symbol'],
|
||||||
|
item['si_name'],
|
||||||
|
1 / item['to_si_factor'], # from_si
|
||||||
|
item['to_si_factor'], # to_si
|
||||||
|
item['symbol'],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
for item in ADDITIONAL_UNITS:
|
||||||
|
SYMBOL_TO_SI.append(
|
||||||
|
(
|
||||||
|
item['symbol'],
|
||||||
|
item['si_name'],
|
||||||
|
item['from_si'],
|
||||||
|
item['to_si'],
|
||||||
|
item['symbol'],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
alias_items = []
|
||||||
|
for item in SYMBOL_TO_SI:
|
||||||
|
for alias in ALIAS_SYMBOLS.get(item[0], ()):
|
||||||
|
alias_items.append(
|
||||||
|
(
|
||||||
|
alias,
|
||||||
|
item[1],
|
||||||
|
item[2], # from_si
|
||||||
|
item[3], # to_si
|
||||||
|
item[0], # origin unit
|
||||||
|
)
|
||||||
|
)
|
||||||
|
SYMBOL_TO_SI = SYMBOL_TO_SI + alias_items
|
||||||
|
return SYMBOL_TO_SI
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_text_and_convert(search, from_query, to_query):
|
||||||
|
|
||||||
|
# pylint: disable=too-many-branches, too-many-locals
|
||||||
|
|
||||||
|
if not (from_query and to_query):
|
||||||
return
|
return
|
||||||
|
|
||||||
from_value = ""
|
measured = re.match(RE_MEASURE, from_query, re.VERBOSE)
|
||||||
from_unit_key = ""
|
if not (measured and measured.group('number'), measured.group('unit')):
|
||||||
|
|
||||||
# only parse digits as value that belong together
|
|
||||||
read_alpha = False
|
|
||||||
for c in splitted_query[0]:
|
|
||||||
if not read_alpha and (c in ("-", ".") or str.isdigit(c)):
|
|
||||||
from_value += c
|
|
||||||
read_alpha = True
|
|
||||||
elif c != " ":
|
|
||||||
from_unit_key += c
|
|
||||||
|
|
||||||
to_unit_key = splitted_query[1].strip()
|
|
||||||
|
|
||||||
from_unit = None
|
|
||||||
to_unit = None
|
|
||||||
|
|
||||||
for unit in WIKIDATA_UNITS.values():
|
|
||||||
if unit['symbol'] == from_unit_key:
|
|
||||||
from_unit = unit
|
|
||||||
|
|
||||||
if unit['symbol'] == to_unit_key:
|
|
||||||
to_unit = unit
|
|
||||||
|
|
||||||
if from_unit and to_unit:
|
|
||||||
break
|
|
||||||
|
|
||||||
if from_unit is None or to_unit is None or to_unit.get('si_name') != from_unit.get('si_name'):
|
|
||||||
return
|
return
|
||||||
|
|
||||||
result = _convert(float(from_value), from_unit['to_si_factor'], to_unit['to_si_factor'])
|
# Symbols are not unique, if there are several hits for the from-unit, then
|
||||||
search.result_container.answers['conversion'] = {'answer': f"{result:g} {to_unit['symbol']}"}
|
# the correct one must be determined by comparing it with the to-unit
|
||||||
|
# https://github.com/searxng/searxng/pull/3378#issuecomment-2080974863
|
||||||
|
|
||||||
|
# first: collecting possible units
|
||||||
|
|
||||||
|
source_list, target_list = [], []
|
||||||
|
|
||||||
|
for symbol, si_name, from_si, to_si, orig_symbol in symbol_to_si():
|
||||||
|
|
||||||
|
if symbol == measured.group('unit'):
|
||||||
|
source_list.append((si_name, to_si))
|
||||||
|
if symbol == to_query:
|
||||||
|
target_list.append((si_name, from_si, orig_symbol))
|
||||||
|
|
||||||
|
if not (source_list and target_list):
|
||||||
|
return
|
||||||
|
|
||||||
|
source_to_si = target_from_si = target_symbol = None
|
||||||
|
|
||||||
|
# second: find the right unit by comparing list of from-units with list of to-units
|
||||||
|
|
||||||
|
for source in source_list:
|
||||||
|
for target in target_list:
|
||||||
|
if source[0] == target[0]: # compare si_name
|
||||||
|
source_to_si = source[1]
|
||||||
|
target_from_si = target[1]
|
||||||
|
target_symbol = target[2]
|
||||||
|
|
||||||
|
if not (source_to_si and target_from_si):
|
||||||
|
return
|
||||||
|
|
||||||
|
_locale = get_locale() or 'en_US'
|
||||||
|
|
||||||
|
value = measured.group('sign') + measured.group('number') + (measured.group('E') or '')
|
||||||
|
value = babel.numbers.parse_decimal(value, locale=_locale)
|
||||||
|
|
||||||
|
# convert value to SI unit
|
||||||
|
|
||||||
|
if isinstance(source_to_si, (float, int)):
|
||||||
|
value = float(value) * source_to_si
|
||||||
|
else:
|
||||||
|
value = source_to_si(float(value))
|
||||||
|
|
||||||
|
# convert value from SI unit to target unit
|
||||||
|
|
||||||
|
if isinstance(target_from_si, (float, int)):
|
||||||
|
value = float(value) * target_from_si
|
||||||
|
else:
|
||||||
|
value = target_from_si(float(value))
|
||||||
|
|
||||||
|
if measured.group('E'):
|
||||||
|
# when incomming notation is scientific, outgoing notation is scientific
|
||||||
|
result = babel.numbers.format_scientific(value, locale=_locale)
|
||||||
|
else:
|
||||||
|
result = babel.numbers.format_decimal(value, locale=_locale, format='#,##0.##########;-#')
|
||||||
|
|
||||||
|
search.result_container.answers['conversion'] = {'answer': f'{result} {target_symbol}'}
|
||||||
|
|
||||||
|
|
||||||
def post_search(_request, search):
|
def post_search(_request, search):
|
||||||
|
@ -69,8 +256,8 @@ def post_search(_request, search):
|
||||||
for query_part in query_parts:
|
for query_part in query_parts:
|
||||||
for keyword in CONVERT_KEYWORDS:
|
for keyword in CONVERT_KEYWORDS:
|
||||||
if query_part == keyword:
|
if query_part == keyword:
|
||||||
keyword_split = query.split(keyword, 1)
|
from_query, to_query = query.split(keyword, 1)
|
||||||
_parse_text_and_convert(search, keyword_split)
|
_parse_text_and_convert(search, from_query.strip(), to_query.strip())
|
||||||
return True
|
return True
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -430,21 +430,38 @@ class ResultContainer:
|
||||||
"""Returns the average of results number, returns zero if the average
|
"""Returns the average of results number, returns zero if the average
|
||||||
result number is smaller than the actual result count."""
|
result number is smaller than the actual result count."""
|
||||||
|
|
||||||
resultnum_sum = sum(self._number_of_results)
|
with self._lock:
|
||||||
if not resultnum_sum or not self._number_of_results:
|
if not self._closed:
|
||||||
return 0
|
logger.error("call to ResultContainer.number_of_results before ResultContainer.close")
|
||||||
|
return 0
|
||||||
|
|
||||||
average = int(resultnum_sum / len(self._number_of_results))
|
resultnum_sum = sum(self._number_of_results)
|
||||||
if average < self.results_length():
|
if not resultnum_sum or not self._number_of_results:
|
||||||
average = 0
|
return 0
|
||||||
return average
|
|
||||||
|
average = int(resultnum_sum / len(self._number_of_results))
|
||||||
|
if average < self.results_length():
|
||||||
|
average = 0
|
||||||
|
return average
|
||||||
|
|
||||||
def add_unresponsive_engine(self, engine_name: str, error_type: str, suspended: bool = False):
|
def add_unresponsive_engine(self, engine_name: str, error_type: str, suspended: bool = False):
|
||||||
if engines[engine_name].display_error_messages:
|
with self._lock:
|
||||||
self.unresponsive_engines.add(UnresponsiveEngine(engine_name, error_type, suspended))
|
if self._closed:
|
||||||
|
logger.error("call to ResultContainer.add_unresponsive_engine after ResultContainer.close")
|
||||||
|
return
|
||||||
|
if engines[engine_name].display_error_messages:
|
||||||
|
self.unresponsive_engines.add(UnresponsiveEngine(engine_name, error_type, suspended))
|
||||||
|
|
||||||
def add_timing(self, engine_name: str, engine_time: float, page_load_time: float):
|
def add_timing(self, engine_name: str, engine_time: float, page_load_time: float):
|
||||||
self.timings.append(Timing(engine_name, total=engine_time, load=page_load_time))
|
with self._lock:
|
||||||
|
if self._closed:
|
||||||
|
logger.error("call to ResultContainer.add_timing after ResultContainer.close")
|
||||||
|
return
|
||||||
|
self.timings.append(Timing(engine_name, total=engine_time, load=page_load_time))
|
||||||
|
|
||||||
def get_timings(self):
|
def get_timings(self):
|
||||||
return self.timings
|
with self._lock:
|
||||||
|
if not self._closed:
|
||||||
|
logger.error("call to ResultContainer.get_timings before ResultContainer.close")
|
||||||
|
return []
|
||||||
|
return self.timings
|
||||||
|
|
|
@ -220,6 +220,7 @@ outgoing:
|
||||||
# - 'Ahmia blacklist' # activation depends on outgoing.using_tor_proxy
|
# - 'Ahmia blacklist' # activation depends on outgoing.using_tor_proxy
|
||||||
# # these plugins are disabled if nothing is configured ..
|
# # these plugins are disabled if nothing is configured ..
|
||||||
# - 'Hostname replace' # see hostname_replace configuration below
|
# - 'Hostname replace' # see hostname_replace configuration below
|
||||||
|
# - 'Calculator plugin'
|
||||||
# - 'Open Access DOI rewrite'
|
# - 'Open Access DOI rewrite'
|
||||||
# - 'Tor check plugin'
|
# - 'Tor check plugin'
|
||||||
# # Read the docs before activate: auto-detection of the language could be
|
# # Read the docs before activate: auto-detection of the language could be
|
||||||
|
@ -726,6 +727,11 @@ engines:
|
||||||
shortcut: fd
|
shortcut: fd
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
|
- name: findthatmeme
|
||||||
|
engine: findthatmeme
|
||||||
|
shortcut: ftm
|
||||||
|
disabled: true
|
||||||
|
|
||||||
- name: flickr
|
- name: flickr
|
||||||
categories: images
|
categories: images
|
||||||
shortcut: fl
|
shortcut: fl
|
||||||
|
@ -800,26 +806,18 @@ engines:
|
||||||
engine: github
|
engine: github
|
||||||
shortcut: gh
|
shortcut: gh
|
||||||
|
|
||||||
# This a Gitea service. If you would like to use a different instance,
|
|
||||||
# change codeberg.org to URL of the desired Gitea host. Or you can create a
|
|
||||||
# new engine by copying this and changing the name, shortcut and search_url.
|
|
||||||
|
|
||||||
- name: codeberg
|
- name: codeberg
|
||||||
engine: json_engine
|
# https://docs.searxng.org/dev/engines/online/gitea.html
|
||||||
search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10
|
engine: gitea
|
||||||
url_query: html_url
|
base_url: https://codeberg.org
|
||||||
title_query: name
|
|
||||||
content_query: description
|
|
||||||
categories: [it, repos]
|
|
||||||
shortcut: cb
|
shortcut: cb
|
||||||
disabled: true
|
disabled: true
|
||||||
about:
|
|
||||||
website: https://codeberg.org/
|
- name: gitea.com
|
||||||
wikidata_id:
|
engine: gitea
|
||||||
official_api_documentation: https://try.gitea.io/api/swagger
|
base_url: https://gitea.com
|
||||||
use_official_api: false
|
shortcut: gitea
|
||||||
require_api_key: false
|
disabled: true
|
||||||
results: JSON
|
|
||||||
|
|
||||||
- name: goodreads
|
- name: goodreads
|
||||||
engine: goodreads
|
engine: goodreads
|
||||||
|
@ -926,6 +924,20 @@ engines:
|
||||||
shortcut: hn
|
shortcut: hn
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
|
- name: hex
|
||||||
|
engine: hex
|
||||||
|
shortcut: hex
|
||||||
|
disabled: true
|
||||||
|
# Valid values: name inserted_at updated_at total_downloads recent_downloads
|
||||||
|
sort_criteria: "recent_downloads"
|
||||||
|
page_size: 10
|
||||||
|
|
||||||
|
- name: crates.io
|
||||||
|
engine: crates
|
||||||
|
shortcut: crates
|
||||||
|
disabled: true
|
||||||
|
timeout: 6.0
|
||||||
|
|
||||||
- name: hoogle
|
- name: hoogle
|
||||||
engine: xpath
|
engine: xpath
|
||||||
search_url: https://hoogle.haskell.org/?hoogle={query}
|
search_url: https://hoogle.haskell.org/?hoogle={query}
|
||||||
|
@ -1907,6 +1919,28 @@ engines:
|
||||||
engine: wikicommons
|
engine: wikicommons
|
||||||
shortcut: wc
|
shortcut: wc
|
||||||
categories: images
|
categories: images
|
||||||
|
search_type: images
|
||||||
|
number_of_results: 10
|
||||||
|
|
||||||
|
- name: wikicommons.videos
|
||||||
|
engine: wikicommons
|
||||||
|
shortcut: wcv
|
||||||
|
categories: videos
|
||||||
|
search_type: videos
|
||||||
|
number_of_results: 10
|
||||||
|
|
||||||
|
- name: wikicommons.audio
|
||||||
|
engine: wikicommons
|
||||||
|
shortcut: wca
|
||||||
|
categories: music
|
||||||
|
search_type: audio
|
||||||
|
number_of_results: 10
|
||||||
|
|
||||||
|
- name: wikicommons.files
|
||||||
|
engine: wikicommons
|
||||||
|
shortcut: wcf
|
||||||
|
categories: files
|
||||||
|
search_type: files
|
||||||
number_of_results: 10
|
number_of_results: 10
|
||||||
|
|
||||||
- name: wolframalpha
|
- name: wolframalpha
|
||||||
|
@ -2058,7 +2092,11 @@ engines:
|
||||||
engine: yacy
|
engine: yacy
|
||||||
categories: general
|
categories: general
|
||||||
search_type: text
|
search_type: text
|
||||||
base_url: https://yacy.searchlab.eu
|
base_url:
|
||||||
|
- https://yacy.searchlab.eu
|
||||||
|
- https://search.lomig.me
|
||||||
|
- https://yacy.ecosys.eu
|
||||||
|
- https://search.webproject.link
|
||||||
shortcut: ya
|
shortcut: ya
|
||||||
disabled: true
|
disabled: true
|
||||||
# required if you aren't using HTTPS for your local yacy instance
|
# required if you aren't using HTTPS for your local yacy instance
|
||||||
|
@ -2071,7 +2109,6 @@ engines:
|
||||||
engine: yacy
|
engine: yacy
|
||||||
categories: images
|
categories: images
|
||||||
search_type: image
|
search_type: image
|
||||||
base_url: https://yacy.searchlab.eu
|
|
||||||
shortcut: yai
|
shortcut: yai
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
|
|
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
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
this file is generated automatically by searxng_extra/update/update_pygments.py
|
this file is generated automatically by searxng_extra/update/update_pygments.py
|
||||||
using pygments version 2.17.2
|
using pygments version 2.18.0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -281,24 +281,12 @@ article[data-vim-selected].category-social {
|
||||||
color: var(--color-result-description-highlight-font);
|
color: var(--color-result-description-highlight-font);
|
||||||
}
|
}
|
||||||
|
|
||||||
img {
|
img.thumbnail {
|
||||||
&.thumbnail {
|
.ltr-float-left();
|
||||||
.ltr-float-left();
|
padding-top: 0.6rem;
|
||||||
padding-top: 0.6rem;
|
.ltr-padding-right(1rem);
|
||||||
.ltr-padding-right(1rem);
|
width: 7rem;
|
||||||
width: 20rem;
|
height: unset; // remove heigth value that was needed for lazy loading
|
||||||
height: unset; // remove heigth value that was needed for lazy loading
|
|
||||||
}
|
|
||||||
|
|
||||||
&.image {
|
|
||||||
.ltr-float-left();
|
|
||||||
padding-top: 0.6rem;
|
|
||||||
.ltr-padding-right(1rem);
|
|
||||||
width: 7rem;
|
|
||||||
max-height: 7rem;
|
|
||||||
object-fit: scale-down;
|
|
||||||
object-position: right top;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.break {
|
.break {
|
||||||
|
@ -394,6 +382,16 @@ article[data-vim-selected].category-social {
|
||||||
padding: 10px 0 0 0;
|
padding: 10px 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.result-videos {
|
||||||
|
img.thumbnail {
|
||||||
|
.ltr-float-left();
|
||||||
|
padding-top: 0.6rem;
|
||||||
|
.ltr-padding-right(1rem);
|
||||||
|
width: 20rem;
|
||||||
|
height: unset; // remove heigth value that was needed for lazy loading
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.result-videos .content {
|
.result-videos .content {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,7 @@
|
||||||
<span class="url_o{{loop.index}}"><span class="url_i{{loop.index}}">{{- part -}}</span></span>
|
<span class="url_o{{loop.index}}"><span class="url_i{{loop.index}}">{{- part -}}</span></span>
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
{{- result_close_link() -}}
|
{{- result_close_link() -}}
|
||||||
{%- if result.img_src %}{{ result_open_link(result.url) }}<img class="image" src="{{ image_proxify(result.img_src) }}" title="{{ result.title|striptags }}" loading="lazy" width="200" height="200">{{ result_close_link() }}{% endif -%}
|
{%- if result.thumbnail %}{{ result_open_link(result.url) }}<img class="thumbnail" src="{{ image_proxify(result.thumbnail) }}" title="{{ result.title|striptags }}" loading="lazy">{{ result_close_link() }}{% endif -%}
|
||||||
{%- if result.thumbnail %}{{ result_open_link(result.url) }}<img class="thumbnail" src="{{ image_proxify(result.thumbnail) }}" title="{{ result.title|striptags }}" loading="lazy" width="200" height="200">{{ result_close_link() }}{% endif -%}
|
|
||||||
<h3>{{ result_link(result.url, result.title|safe) }}</h3>
|
<h3>{{ result_link(result.url, result.title|safe) }}</h3>
|
||||||
{%- endmacro -%}
|
{%- endmacro -%}
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
|
|
||||||
{%- macro plugin_preferences(section) -%}
|
{%- macro plugin_preferences(section) -%}
|
||||||
{%- for plugin in plugins -%}
|
{%- for plugin in plugins -%}
|
||||||
{%- if plugin.preference_section == section -%}
|
{%- if plugin.preference_section == section and (plugin.is_allowed() if plugin.is_allowed else True) -%}
|
||||||
<fieldset>{{- '' -}}
|
<fieldset>{{- '' -}}
|
||||||
<legend>{{ _(plugin.name) }}</legend>{{- '' -}}
|
<legend>{{ _(plugin.name) }}</legend>{{- '' -}}
|
||||||
<div class="value">
|
<div class="value">
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
</div>
|
</div>
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
{%- if result.homepage or result.source_code_url -%}
|
{%- if result.homepage or result.source_code_url or result.links -%}
|
||||||
<div class="result_project">{{- '' -}}
|
<div class="result_project">{{- '' -}}
|
||||||
<span>{{ _('Project') }}</span>
|
<span>{{ _('Project') }}</span>
|
||||||
<span>{{- '' -}}
|
<span>{{- '' -}}
|
||||||
|
@ -58,6 +58,14 @@
|
||||||
{%- if result.source_code_url -%}
|
{%- if result.source_code_url -%}
|
||||||
<a href="{{ result.source_code_url }}" target="_blank">{{ _('Source code') }}</a>
|
<a href="{{ result.source_code_url }}" target="_blank">{{ _('Source code') }}</a>
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
|
{%- if result.links %}
|
||||||
|
{%- for name, link in result.links.items() -%}
|
||||||
|
{% if not loop.first or result.homepage or result.source_code_url %} | {% endif %}
|
||||||
|
<a href="{{ link }}" target="_blank">
|
||||||
|
{{- _(name) -}}
|
||||||
|
</a>
|
||||||
|
{%- endfor -%}
|
||||||
|
{%- endif -%}
|
||||||
</span>{{- '' -}}
|
</span>{{- '' -}}
|
||||||
</div>
|
</div>
|
||||||
{%- endif -%}
|
{%- endif -%}
|
||||||
|
|
|
@ -24,8 +24,12 @@
|
||||||
{%- for answer in answers.values() -%}
|
{%- for answer in answers.values() -%}
|
||||||
<div class="answer">
|
<div class="answer">
|
||||||
<span>{{ answer.answer }}</span>
|
<span>{{ answer.answer }}</span>
|
||||||
{% if answer.url -%}
|
{%- if answer.url -%}
|
||||||
<a href="{{ answer.url }}" class="answer-url">{{ urlparse(answer.url).hostname }}</a>
|
<a href="{{ answer.url }}" class="answer-url"
|
||||||
|
{%- if results_on_new_tab %} target="_blank" rel="noopener noreferrer"
|
||||||
|
{%- else -%} rel="noreferrer"
|
||||||
|
{%- endif -%}
|
||||||
|
>{{ urlparse(answer.url).hostname }}</a>
|
||||||
{% endif -%}
|
{% endif -%}
|
||||||
</div>
|
</div>
|
||||||
{%- endfor -%}
|
{%- endfor -%}
|
||||||
|
|
Binary file not shown.
|
@ -13,7 +13,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-03-12 17:28+0000\n"
|
"PO-Revision-Date: 2024-03-12 17:28+0000\n"
|
||||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -488,6 +488,10 @@ msgstr "boekgradering"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "Lêer kwaliteit"
|
msgstr "Lêer kwaliteit"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Skakel snare om na verskillende hash digests."
|
msgstr "Skakel snare om na verskillende hash digests."
|
||||||
|
@ -573,6 +577,10 @@ msgstr "Spoorsnyer URL verwyderaar"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "Verwyder spoorsnyersargumente van die teruggestuurde URL"
|
msgstr "Verwyder spoorsnyersargumente van die teruggestuurde URL"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "Bladsy nie gevind"
|
msgstr "Bladsy nie gevind"
|
||||||
|
@ -750,27 +758,27 @@ msgstr "Koekies"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Antwoord"
|
msgstr "Antwoord"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Aantal resultate"
|
msgstr "Aantal resultate"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Info"
|
msgstr "Info"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Probeer soek na:"
|
msgstr "Probeer soek na:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "Terug na bo"
|
msgstr "Terug na bo"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "Vorige bladsy"
|
msgstr "Vorige bladsy"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "Volgende bladsy"
|
msgstr "Volgende bladsy"
|
||||||
|
|
||||||
|
@ -797,7 +805,7 @@ msgstr "soek"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Daar is tans geen data beskikbaar nie."
|
msgstr "Daar is tans geen data beskikbaar nie."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "Enjin naam"
|
msgstr "Enjin naam"
|
||||||
|
@ -810,12 +818,12 @@ msgstr "Tellings"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "Resultaattelling"
|
msgstr "Resultaattelling"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "Reaksietyd"
|
msgstr "Reaksietyd"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "Betroubaarheid"
|
msgstr "Betroubaarheid"
|
||||||
|
@ -934,7 +942,7 @@ msgstr "Outo-bespeur"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "VeiligeSoek"
|
msgstr "VeiligeSoek"
|
||||||
|
@ -955,7 +963,7 @@ msgid "None"
|
||||||
msgstr "Geen"
|
msgstr "Geen"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Tydreeks"
|
msgstr "Tydreeks"
|
||||||
|
|
||||||
|
@ -1024,7 +1032,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "Gaan terug na die vorige bladsy deur die vorige bladsy-knoppie te gebruik."
|
msgstr "Gaan terug na die vorige bladsy deur die vorige bladsy-knoppie te gebruik."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Laat toe"
|
msgstr "Laat toe"
|
||||||
|
|
||||||
|
@ -1141,19 +1149,27 @@ msgstr ""
|
||||||
"Hierdie oortjie bestaan nie in die gebruikerskoppelvlak nie, maar jy kan "
|
"Hierdie oortjie bestaan nie in die gebruikerskoppelvlak nie, maar jy kan "
|
||||||
"in hierdie enjins soek volgens sy !bangs."
|
"in hierdie enjins soek volgens sy !bangs."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Ondersteun gekose taal"
|
msgstr "Ondersteun gekose taal"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "Gewig"
|
msgstr "Gewig"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "Maks tyd"
|
msgstr "Maks tyd"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -20,7 +20,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-04-21 16:49+0000\n"
|
"PO-Revision-Date: 2024-04-21 16:49+0000\n"
|
||||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -494,6 +494,10 @@ msgstr "تقييم الكتاب"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "جودة الملف"
|
msgstr "جودة الملف"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "يحول السلسلة إلى ملخص التجزئة."
|
msgstr "يحول السلسلة إلى ملخص التجزئة."
|
||||||
|
@ -574,6 +578,10 @@ msgstr ""
|
||||||
"إزالة وسيطات التتبع من \"URL\" الذي تم إرجاعه , إزالة وسيطات التتبع من "
|
"إزالة وسيطات التتبع من \"URL\" الذي تم إرجاعه , إزالة وسيطات التتبع من "
|
||||||
"محدد موقع الموارد الموحد الذي تم إرجاعه"
|
"محدد موقع الموارد الموحد الذي تم إرجاعه"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "تعذر العثور على الصفحة"
|
msgstr "تعذر العثور على الصفحة"
|
||||||
|
@ -749,27 +757,27 @@ msgstr "كعكات الكوكيز"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "الإجابات"
|
msgstr "الإجابات"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "حصيلة نتائج البحث"
|
msgstr "حصيلة نتائج البحث"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "معلومات"
|
msgstr "معلومات"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "حاول البحث عن :"
|
msgstr "حاول البحث عن :"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "العودة للأعلى"
|
msgstr "العودة للأعلى"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "الصفحة السابقة"
|
msgstr "الصفحة السابقة"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "الصفحة التالية"
|
msgstr "الصفحة التالية"
|
||||||
|
|
||||||
|
@ -796,7 +804,7 @@ msgstr "بحث"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "لم يتم العثور على أية بيانات في الوقت الحالي. "
|
msgstr "لم يتم العثور على أية بيانات في الوقت الحالي. "
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "إسم المحرك"
|
msgstr "إسم المحرك"
|
||||||
|
@ -809,12 +817,12 @@ msgstr "نتائج"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "نتيجة العد"
|
msgstr "نتيجة العد"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "مدة الإستجابة"
|
msgstr "مدة الإستجابة"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "إمكانية الإشتغال"
|
msgstr "إمكانية الإشتغال"
|
||||||
|
@ -933,7 +941,7 @@ msgstr "الاكتشاف التلقائي"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "البحث المؤمَّن"
|
msgstr "البحث المؤمَّن"
|
||||||
|
@ -954,7 +962,7 @@ msgid "None"
|
||||||
msgstr "لا شيء"
|
msgstr "لا شيء"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "الفترة"
|
msgstr "الفترة"
|
||||||
|
|
||||||
|
@ -1023,7 +1031,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "إرجع إلى الصفحة السابقة باستخدام زر العودة."
|
msgstr "إرجع إلى الصفحة السابقة باستخدام زر العودة."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "تمكين"
|
msgstr "تمكين"
|
||||||
|
|
||||||
|
@ -1140,19 +1148,27 @@ msgstr ""
|
||||||
"علامة التبويب هذه غير موجودة في واجهة المستخدم ، ولكن يمكنك البحث في هذه "
|
"علامة التبويب هذه غير موجودة في واجهة المستخدم ، ولكن يمكنك البحث في هذه "
|
||||||
"المحركات من خلال !bangs"
|
"المحركات من خلال !bangs"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "يدعم اللغة المختارة"
|
msgstr "يدعم اللغة المختارة"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "وَزن"
|
msgstr "وَزن"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "أقصى مدّة"
|
msgstr "أقصى مدّة"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -15,8 +15,8 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-03-22 07:09+0000\n"
|
"PO-Revision-Date: 2024-04-28 18:18+0000\n"
|
||||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||||
"\n"
|
"\n"
|
||||||
"Language: bg\n"
|
"Language: bg\n"
|
||||||
|
@ -76,7 +76,7 @@ msgstr "радио"
|
||||||
#. CATEGORY_NAMES['TV']
|
#. CATEGORY_NAMES['TV']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "tv"
|
msgid "tv"
|
||||||
msgstr ""
|
msgstr "телевизия"
|
||||||
|
|
||||||
#. CATEGORY_NAMES['IT']
|
#. CATEGORY_NAMES['IT']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -201,12 +201,12 @@ msgstr "Вечер"
|
||||||
#. WEATHER_TERMS['FEELS LIKE']
|
#. WEATHER_TERMS['FEELS LIKE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Feels like"
|
msgid "Feels like"
|
||||||
msgstr ""
|
msgstr "Усеща се като"
|
||||||
|
|
||||||
#. WEATHER_TERMS['HUMIDITY']
|
#. WEATHER_TERMS['HUMIDITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Humidity"
|
msgid "Humidity"
|
||||||
msgstr ""
|
msgstr "Влажност"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MAX TEMP.']
|
#. WEATHER_TERMS['MAX TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -236,47 +236,47 @@ msgstr "Обяд"
|
||||||
#. WEATHER_TERMS['PRESSURE']
|
#. WEATHER_TERMS['PRESSURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Pressure"
|
msgid "Pressure"
|
||||||
msgstr ""
|
msgstr "Налягане"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNRISE']
|
#. WEATHER_TERMS['SUNRISE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunrise"
|
msgid "Sunrise"
|
||||||
msgstr ""
|
msgstr "Изгрев"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNSET']
|
#. WEATHER_TERMS['SUNSET']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunset"
|
msgid "Sunset"
|
||||||
msgstr ""
|
msgstr "Залез"
|
||||||
|
|
||||||
#. WEATHER_TERMS['TEMPERATURE']
|
#. WEATHER_TERMS['TEMPERATURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Temperature"
|
msgid "Temperature"
|
||||||
msgstr ""
|
msgstr "Температура"
|
||||||
|
|
||||||
#. WEATHER_TERMS['UV INDEX']
|
#. WEATHER_TERMS['UV INDEX']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "UV index"
|
msgid "UV index"
|
||||||
msgstr ""
|
msgstr "UV индекс"
|
||||||
|
|
||||||
#. WEATHER_TERMS['VISIBILITY']
|
#. WEATHER_TERMS['VISIBILITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr ""
|
msgstr "Видимост"
|
||||||
|
|
||||||
#. WEATHER_TERMS['WIND']
|
#. WEATHER_TERMS['WIND']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Wind"
|
msgid "Wind"
|
||||||
msgstr ""
|
msgstr "Вятър"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "subscribers"
|
msgid "subscribers"
|
||||||
msgstr ""
|
msgstr "Абонати"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr "Публикации"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -286,12 +286,12 @@ msgstr ""
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "comments"
|
msgid "comments"
|
||||||
msgstr ""
|
msgstr "Коментари"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['USER']
|
#. SOCIAL_MEDIA_TERMS['USER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "user"
|
msgid "user"
|
||||||
msgstr ""
|
msgstr "Потребител"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -301,17 +301,17 @@ msgstr ""
|
||||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "points"
|
msgid "points"
|
||||||
msgstr ""
|
msgstr "Точки"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr "Заглавие"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "author"
|
msgid "author"
|
||||||
msgstr ""
|
msgstr "Автор"
|
||||||
|
|
||||||
#: searx/webapp.py:330
|
#: searx/webapp.py:330
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
|
@ -490,6 +490,10 @@ msgstr "Рейтинг на книги"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "Качество на файл"
|
msgstr "Качество на файл"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Преобразува низове в различни хаш-извлечение."
|
msgstr "Преобразува низове в различни хаш-извлечение."
|
||||||
|
@ -568,6 +572,10 @@ msgstr "Премахвач на URL тракери"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "Премахни следящите аргументи от върнатия URL"
|
msgstr "Премахни следящите аргументи от върнатия URL"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "Страницата не е намерена"
|
msgstr "Страницата не е намерена"
|
||||||
|
@ -747,27 +755,27 @@ msgstr "Бисквитки"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Отговори"
|
msgstr "Отговори"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Брой резултати"
|
msgstr "Брой резултати"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Инф."
|
msgstr "Инф."
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Пробвайте да потърсите:"
|
msgstr "Пробвайте да потърсите:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "Обратно към началото"
|
msgstr "Обратно към началото"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "Предишна страница"
|
msgstr "Предишна страница"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "Следваща страница"
|
msgstr "Следваща страница"
|
||||||
|
|
||||||
|
@ -794,7 +802,7 @@ msgstr "търси"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Няма налична достъпна информация."
|
msgstr "Няма налична достъпна информация."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "Име на търсачка"
|
msgstr "Име на търсачка"
|
||||||
|
@ -807,12 +815,12 @@ msgstr "Резултати"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "Брой резултати"
|
msgstr "Брой резултати"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "Време за отговор"
|
msgstr "Време за отговор"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "Надеждност"
|
msgstr "Надеждност"
|
||||||
|
@ -931,7 +939,7 @@ msgstr "Автоматично разпознаване"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "Безопасно търсене"
|
msgstr "Безопасно търсене"
|
||||||
|
@ -952,7 +960,7 @@ msgid "None"
|
||||||
msgstr "Нищо"
|
msgstr "Нищо"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Времева зона"
|
msgstr "Времева зона"
|
||||||
|
|
||||||
|
@ -1021,7 +1029,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Позволи"
|
msgstr "Позволи"
|
||||||
|
|
||||||
|
@ -1141,19 +1149,27 @@ msgstr ""
|
||||||
"Този раздел несъществува в потребителския интерфейс, но може да търсиш "
|
"Този раздел несъществува в потребителския интерфейс, но може да търсиш "
|
||||||
"със следните търсачки по !bangs."
|
"със следните търсачки по !bangs."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Поддържка на избраният език"
|
msgstr "Поддържка на избраният език"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "Тегло"
|
msgstr "Тегло"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "Максимално време"
|
msgstr "Максимално време"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -11,21 +11,22 @@
|
||||||
# MonsoonFire <re1qnb5mq@mozmail.com>, 2023.
|
# MonsoonFire <re1qnb5mq@mozmail.com>, 2023.
|
||||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||||
# MonsoonRain <MonsoonRain@users.noreply.translate.codeberg.org>, 2024.
|
# MonsoonRain <MonsoonRain@users.noreply.translate.codeberg.org>, 2024.
|
||||||
|
# Utsushime <Utsushime@users.noreply.translate.codeberg.org>, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-03-16 19:53+0000\n"
|
"PO-Revision-Date: 2024-05-17 06:18+0000\n"
|
||||||
"Last-Translator: MonsoonRain "
|
"Last-Translator: Utsushime <Utsushime@users.noreply.translate.codeberg.org>\n"
|
||||||
"<MonsoonRain@users.noreply.translate.codeberg.org>\n"
|
"Language-Team: Bengali <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/bn/>\n"
|
||||||
"Language: bn\n"
|
"Language: bn\n"
|
||||||
"Language-Team: Bengali "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/bn/>\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||||
|
"X-Generator: Weblate 5.5.5\n"
|
||||||
"Generated-By: Babel 2.14.0\n"
|
"Generated-By: Babel 2.14.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
|
@ -76,7 +77,7 @@ msgstr "বেতার"
|
||||||
#. CATEGORY_NAMES['TV']
|
#. CATEGORY_NAMES['TV']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "tv"
|
msgid "tv"
|
||||||
msgstr ""
|
msgstr "দূরদর্শন"
|
||||||
|
|
||||||
#. CATEGORY_NAMES['IT']
|
#. CATEGORY_NAMES['IT']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -176,22 +177,22 @@ msgstr "সম্বন্ধে"
|
||||||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Average temp."
|
msgid "Average temp."
|
||||||
msgstr ""
|
msgstr "গড় তাপমাত্রা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CLOUD COVER']
|
#. WEATHER_TERMS['CLOUD COVER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Cloud cover"
|
msgid "Cloud cover"
|
||||||
msgstr ""
|
msgstr "মেঘলা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CONDITION']
|
#. WEATHER_TERMS['CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Condition"
|
msgid "Condition"
|
||||||
msgstr ""
|
msgstr "অবস্থা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Current condition"
|
msgid "Current condition"
|
||||||
msgstr ""
|
msgstr "বর্তমান অবস্থা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['EVENING']
|
#. WEATHER_TERMS['EVENING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -201,22 +202,22 @@ msgstr "সন্ধ্যা"
|
||||||
#. WEATHER_TERMS['FEELS LIKE']
|
#. WEATHER_TERMS['FEELS LIKE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Feels like"
|
msgid "Feels like"
|
||||||
msgstr ""
|
msgstr "অনুভব হয়"
|
||||||
|
|
||||||
#. WEATHER_TERMS['HUMIDITY']
|
#. WEATHER_TERMS['HUMIDITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Humidity"
|
msgid "Humidity"
|
||||||
msgstr ""
|
msgstr "আদ্রতা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MAX TEMP.']
|
#. WEATHER_TERMS['MAX TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Max temp."
|
msgid "Max temp."
|
||||||
msgstr ""
|
msgstr "সর্বোচ্চ তাপমাত্রা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MIN TEMP.']
|
#. WEATHER_TERMS['MIN TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Min temp."
|
msgid "Min temp."
|
||||||
msgstr ""
|
msgstr "সর্বনিন্ম তাপমাত্রা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MORNING']
|
#. WEATHER_TERMS['MORNING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -236,82 +237,82 @@ msgstr "দুপুর"
|
||||||
#. WEATHER_TERMS['PRESSURE']
|
#. WEATHER_TERMS['PRESSURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Pressure"
|
msgid "Pressure"
|
||||||
msgstr ""
|
msgstr "চাপ"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNRISE']
|
#. WEATHER_TERMS['SUNRISE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunrise"
|
msgid "Sunrise"
|
||||||
msgstr ""
|
msgstr "সূর্যোদয়"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNSET']
|
#. WEATHER_TERMS['SUNSET']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunset"
|
msgid "Sunset"
|
||||||
msgstr ""
|
msgstr "সূর্যাস্ত"
|
||||||
|
|
||||||
#. WEATHER_TERMS['TEMPERATURE']
|
#. WEATHER_TERMS['TEMPERATURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Temperature"
|
msgid "Temperature"
|
||||||
msgstr ""
|
msgstr "তাপমাত্রা"
|
||||||
|
|
||||||
#. WEATHER_TERMS['UV INDEX']
|
#. WEATHER_TERMS['UV INDEX']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "UV index"
|
msgid "UV index"
|
||||||
msgstr ""
|
msgstr "ইউ ভি ইনডেক্স"
|
||||||
|
|
||||||
#. WEATHER_TERMS['VISIBILITY']
|
#. WEATHER_TERMS['VISIBILITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr ""
|
msgstr "দৃশ্যগোচর"
|
||||||
|
|
||||||
#. WEATHER_TERMS['WIND']
|
#. WEATHER_TERMS['WIND']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Wind"
|
msgid "Wind"
|
||||||
msgstr ""
|
msgstr "বায়ু"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "subscribers"
|
msgid "subscribers"
|
||||||
msgstr ""
|
msgstr "সাবস্ক্রাইবারস"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr "পোস্টস"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "active users"
|
msgid "active users"
|
||||||
msgstr ""
|
msgstr "সক্রিয় ইউজারস"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "comments"
|
msgid "comments"
|
||||||
msgstr ""
|
msgstr "কমেন্ট"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['USER']
|
#. SOCIAL_MEDIA_TERMS['USER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "user"
|
msgid "user"
|
||||||
msgstr ""
|
msgstr "ইউজার"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "community"
|
msgid "community"
|
||||||
msgstr ""
|
msgstr "কমিউনিটি"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "points"
|
msgid "points"
|
||||||
msgstr ""
|
msgstr "পয়েন্টস"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr "শিরোনাম"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "author"
|
msgid "author"
|
||||||
msgstr ""
|
msgstr "লেখক"
|
||||||
|
|
||||||
#: searx/webapp.py:330
|
#: searx/webapp.py:330
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
|
@ -489,6 +490,10 @@ msgstr "বই পর্যালোচনা"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "নথি মান"
|
msgstr "নথি মান"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "স্ট্রিংগুলিকে বিভিন্ন হ্যাশ ডাইজেস্টে রূপান্তর করে।"
|
msgstr "স্ট্রিংগুলিকে বিভিন্ন হ্যাশ ডাইজেস্টে রূপান্তর করে।"
|
||||||
|
@ -570,6 +575,10 @@ msgstr "ট্র্যাকার URL রিমুভার"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "ফিরে আসা URL থেকে ট্র্যাকার আর্গুমেন্টগুলি সরান৷"
|
msgstr "ফিরে আসা URL থেকে ট্র্যাকার আর্গুমেন্টগুলি সরান৷"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "পৃষ্ঠা খুঁজে পাওয়া যায়নি"
|
msgstr "পৃষ্ঠা খুঁজে পাওয়া যায়নি"
|
||||||
|
@ -749,27 +758,27 @@ msgstr "কুকি"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "উত্তর"
|
msgstr "উত্তর"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "ফলাফলের সংখ্যা"
|
msgstr "ফলাফলের সংখ্যা"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "তথ্য"
|
msgstr "তথ্য"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "এটি খোঁজার চেষ্টা করুন:"
|
msgstr "এটি খোঁজার চেষ্টা করুন:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "উপরে ফিরে যান"
|
msgstr "উপরে ফিরে যান"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "পূর্ববর্তী পেইজ"
|
msgstr "পূর্ববর্তী পেইজ"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "পরবর্তী পেইজ"
|
msgstr "পরবর্তী পেইজ"
|
||||||
|
|
||||||
|
@ -796,7 +805,7 @@ msgstr "অনুসন্ধান"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "বর্তমানে কোন তথ্য পাওয়া যায়নি."
|
msgstr "বর্তমানে কোন তথ্য পাওয়া যায়নি."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "ইঞ্জিনের নাম"
|
msgstr "ইঞ্জিনের নাম"
|
||||||
|
@ -809,12 +818,12 @@ msgstr "স্কোর"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "ফলাফল গণনা"
|
msgstr "ফলাফল গণনা"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "প্রতিক্রিয়া সময়"
|
msgstr "প্রতিক্রিয়া সময়"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "নির্ভরযোগ্যতা"
|
msgstr "নির্ভরযোগ্যতা"
|
||||||
|
@ -933,7 +942,7 @@ msgstr "স্বয়ং সনাক্ত"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "নিরাপদ সার্চ"
|
msgstr "নিরাপদ সার্চ"
|
||||||
|
@ -954,7 +963,7 @@ msgid "None"
|
||||||
msgstr "নেই"
|
msgstr "নেই"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "সময়সীমা"
|
msgstr "সময়সীমা"
|
||||||
|
|
||||||
|
@ -1023,7 +1032,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "আগের পাতায় ফিরত যেতে পিছনে যাওয়ার বোতামে টিপ দাও।"
|
msgstr "আগের পাতায় ফিরত যেতে পিছনে যাওয়ার বোতামে টিপ দাও।"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "অনুমোদন"
|
msgstr "অনুমোদন"
|
||||||
|
|
||||||
|
@ -1138,19 +1147,27 @@ msgstr ""
|
||||||
"এই ট্যাবটি ইউজার ইন্টারফেসে নেই, কিন্তু আপনি এই ইঞ্জিনের !bangs ব্যবহার "
|
"এই ট্যাবটি ইউজার ইন্টারফেসে নেই, কিন্তু আপনি এই ইঞ্জিনের !bangs ব্যবহার "
|
||||||
"করে সার্চ করতে পারেন।"
|
"করে সার্চ করতে পারেন।"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "নির্বাচিত ভাষা সমর্থন করে"
|
msgstr "নির্বাচিত ভাষা সমর্থন করে"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "ওজন"
|
msgstr "ওজন"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "সর্বোচ্চ সময়"
|
msgstr "সর্বোচ্চ সময়"
|
||||||
|
|
||||||
|
@ -1653,4 +1670,3 @@ msgstr "ভিডিও লুকিয়ে ফেলুন"
|
||||||
#~ "আমরা কোন ফলাফল খুঁজে পাইনি. অনুগ্রহ "
|
#~ "আমরা কোন ফলাফল খুঁজে পাইনি. অনুগ্রহ "
|
||||||
#~ "করে অন্য কোনো প্রশ্ন ব্যবহার করুন "
|
#~ "করে অন্য কোনো প্রশ্ন ব্যবহার করুন "
|
||||||
#~ "বা আরও বিভাগে অনুসন্ধান করুন।"
|
#~ "বা আরও বিভাগে অনুসন্ধান করুন।"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -10,7 +10,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2023-06-02 07:07+0000\n"
|
"PO-Revision-Date: 2023-06-02 07:07+0000\n"
|
||||||
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
||||||
"Language: bo\n"
|
"Language: bo\n"
|
||||||
|
@ -476,6 +476,10 @@ msgstr ""
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -546,6 +550,10 @@ msgstr "དྲ་གནས་རྗེས་འདེད་སྤོ་འབུ
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "དྲ་ངོས་རྙེད་རྒྱུ་མ་བྱུང་།"
|
msgstr "དྲ་ངོས་རྙེད་རྒྱུ་མ་བྱུང་།"
|
||||||
|
@ -721,27 +729,27 @@ msgstr "རྐང་རྗེས།"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "ལན།"
|
msgstr "ལན།"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "འཚོལ་འབྲས་ཀྱི་ཁ་གྲངས།"
|
msgstr "འཚོལ་འབྲས་ཀྱི་ཁ་གྲངས།"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "འཚོལ་བཤེར་ནང་དོན་ནི།"
|
msgstr "འཚོལ་བཤེར་ནང་དོན་ནི།"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -768,7 +776,7 @@ msgstr ""
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "ཉེ་བར་ཐོབ་རུང་བའི་ཡིག་ཆ་གང་ཡང་མེད།"
|
msgstr "ཉེ་བར་ཐོབ་རུང་བའི་ཡིག་ཆ་གང་ཡང་མེད།"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "སྒུལ་བྱེད་ཀྱི་མིང་།"
|
msgstr "སྒུལ་བྱེད་ཀྱི་མིང་།"
|
||||||
|
@ -781,12 +789,12 @@ msgstr "ཐོབ་སྐར།"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -905,7 +913,7 @@ msgstr ""
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "བདེ་འཇགས་འཚོལ་བཤེར།"
|
msgstr "བདེ་འཇགས་འཚོལ་བཤེར།"
|
||||||
|
@ -926,7 +934,7 @@ msgid "None"
|
||||||
msgstr "གང་ཡང་མེད།"
|
msgstr "གང་ཡང་མེད།"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "དུས་ཀྱི་ཁྱབ་ཁོངས།"
|
msgstr "དུས་ཀྱི་ཁྱབ་ཁོངས།"
|
||||||
|
|
||||||
|
@ -995,7 +1003,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "ཆོག་མཆན།"
|
msgstr "ཆོག་མཆན།"
|
||||||
|
|
||||||
|
@ -1104,19 +1112,27 @@ msgid ""
|
||||||
"these engines by its !bangs."
|
"these engines by its !bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "རྒྱབ་སྐྱོར་ཐོབ་པའི་སྐད་རིགས་གདམ་གསེས།"
|
msgstr "རྒྱབ་སྐྱོར་ཐོབ་པའི་སྐད་རིགས་གདམ་གསེས།"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "མང་མཐའི་དུས་ཚོད།"
|
msgstr "མང་མཐའི་དུས་ཚོད།"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -21,7 +21,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-04-06 00:18+0000\n"
|
"PO-Revision-Date: 2024-04-06 00:18+0000\n"
|
||||||
"Last-Translator: sserra <sserra@users.noreply.translate.codeberg.org>\n"
|
"Last-Translator: sserra <sserra@users.noreply.translate.codeberg.org>\n"
|
||||||
"Language: ca\n"
|
"Language: ca\n"
|
||||||
|
@ -494,6 +494,10 @@ msgstr "Valoració de llibre"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "Qualitat del fitxer"
|
msgstr "Qualitat del fitxer"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Converteix cadenes en diferents empremtes de hash."
|
msgstr "Converteix cadenes en diferents empremtes de hash."
|
||||||
|
@ -573,6 +577,10 @@ msgstr "Suprimeix l'URL de rastreig"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "Suprimeix els arguments de rastreig dels URL retornats"
|
msgstr "Suprimeix els arguments de rastreig dels URL retornats"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "No s'ha trobat la pàgina"
|
msgstr "No s'ha trobat la pàgina"
|
||||||
|
@ -752,27 +760,27 @@ msgstr "Galetes"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Respostes"
|
msgstr "Respostes"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Nombre de resultats"
|
msgstr "Nombre de resultats"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Informació"
|
msgstr "Informació"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Proveu a cercar:"
|
msgstr "Proveu a cercar:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "Torna al capdemunt"
|
msgstr "Torna al capdemunt"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "Pàgina anterior"
|
msgstr "Pàgina anterior"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "Pàgina següent"
|
msgstr "Pàgina següent"
|
||||||
|
|
||||||
|
@ -799,7 +807,7 @@ msgstr "cerca"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Actualment no hi ha dades disponibles. "
|
msgstr "Actualment no hi ha dades disponibles. "
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "Nom del cercador"
|
msgstr "Nom del cercador"
|
||||||
|
@ -812,12 +820,12 @@ msgstr "Valoració"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "Resultats"
|
msgstr "Resultats"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "Temps de resposta"
|
msgstr "Temps de resposta"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "Fiabilitat"
|
msgstr "Fiabilitat"
|
||||||
|
@ -936,7 +944,7 @@ msgstr "Detecció automàtica"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "Cerca segura"
|
msgstr "Cerca segura"
|
||||||
|
@ -957,7 +965,7 @@ msgid "None"
|
||||||
msgstr "Desactivat"
|
msgstr "Desactivat"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Interval de temps"
|
msgstr "Interval de temps"
|
||||||
|
|
||||||
|
@ -1026,7 +1034,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "Torna a la pàgina anterior usant el botó de pàgina anterior."
|
msgstr "Torna a la pàgina anterior usant el botó de pàgina anterior."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Permetre"
|
msgstr "Permetre"
|
||||||
|
|
||||||
|
@ -1144,19 +1152,27 @@ msgstr ""
|
||||||
"Aquesta pestanya no existeix en la interfície d'usuari, però pots buscar "
|
"Aquesta pestanya no existeix en la interfície d'usuari, però pots buscar "
|
||||||
"en aquests motors de cerca mitjançant els seus !bangs."
|
"en aquests motors de cerca mitjançant els seus !bangs."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Suporta la llengua seleccionada"
|
msgstr "Suporta la llengua seleccionada"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "Pes"
|
msgstr "Pes"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "Temps màxim"
|
msgstr "Temps màxim"
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -13,21 +13,23 @@
|
||||||
# zenobit <zen@osowoso.xyz>, 2023.
|
# zenobit <zen@osowoso.xyz>, 2023.
|
||||||
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
||||||
# Fjuro <ifjuro@proton.me>, 2023, 2024.
|
# Fjuro <ifjuro@proton.me>, 2023, 2024.
|
||||||
|
# Fjuro <fjuro@alius.cz>, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-02-26 16:56+0000\n"
|
"PO-Revision-Date: 2024-05-10 06:13+0000\n"
|
||||||
"Last-Translator: Fjuro <ifjuro@proton.me>\n"
|
"Last-Translator: Fjuro <fjuro@alius.cz>\n"
|
||||||
|
"Language-Team: Czech <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/cs/>\n"
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"Language-Team: Czech "
|
|
||||||
"<https://translate.codeberg.org/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"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=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 5.5.2\n"
|
||||||
"Generated-By: Babel 2.14.0\n"
|
"Generated-By: Babel 2.14.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
|
@ -78,7 +80,7 @@ msgstr "rádio"
|
||||||
#. CATEGORY_NAMES['TV']
|
#. CATEGORY_NAMES['TV']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "tv"
|
msgid "tv"
|
||||||
msgstr ""
|
msgstr "tv"
|
||||||
|
|
||||||
#. CATEGORY_NAMES['IT']
|
#. CATEGORY_NAMES['IT']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -178,22 +180,22 @@ msgstr "O SearXNG"
|
||||||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Average temp."
|
msgid "Average temp."
|
||||||
msgstr ""
|
msgstr "Prům. teplota"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CLOUD COVER']
|
#. WEATHER_TERMS['CLOUD COVER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Cloud cover"
|
msgid "Cloud cover"
|
||||||
msgstr ""
|
msgstr "Pokrytí mraky"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CONDITION']
|
#. WEATHER_TERMS['CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Condition"
|
msgid "Condition"
|
||||||
msgstr ""
|
msgstr "Stav"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Current condition"
|
msgid "Current condition"
|
||||||
msgstr ""
|
msgstr "Aktuální stav"
|
||||||
|
|
||||||
#. WEATHER_TERMS['EVENING']
|
#. WEATHER_TERMS['EVENING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -203,22 +205,22 @@ msgstr "Večer"
|
||||||
#. WEATHER_TERMS['FEELS LIKE']
|
#. WEATHER_TERMS['FEELS LIKE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Feels like"
|
msgid "Feels like"
|
||||||
msgstr ""
|
msgstr "Pocitová teplota"
|
||||||
|
|
||||||
#. WEATHER_TERMS['HUMIDITY']
|
#. WEATHER_TERMS['HUMIDITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Humidity"
|
msgid "Humidity"
|
||||||
msgstr ""
|
msgstr "Vlhkost"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MAX TEMP.']
|
#. WEATHER_TERMS['MAX TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Max temp."
|
msgid "Max temp."
|
||||||
msgstr ""
|
msgstr "Max. teplota"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MIN TEMP.']
|
#. WEATHER_TERMS['MIN TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Min temp."
|
msgid "Min temp."
|
||||||
msgstr ""
|
msgstr "Min. teplota"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MORNING']
|
#. WEATHER_TERMS['MORNING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -238,82 +240,82 @@ msgstr "Poledne"
|
||||||
#. WEATHER_TERMS['PRESSURE']
|
#. WEATHER_TERMS['PRESSURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Pressure"
|
msgid "Pressure"
|
||||||
msgstr ""
|
msgstr "Tlak"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNRISE']
|
#. WEATHER_TERMS['SUNRISE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunrise"
|
msgid "Sunrise"
|
||||||
msgstr ""
|
msgstr "Východ slunce"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNSET']
|
#. WEATHER_TERMS['SUNSET']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunset"
|
msgid "Sunset"
|
||||||
msgstr ""
|
msgstr "Západ slunce"
|
||||||
|
|
||||||
#. WEATHER_TERMS['TEMPERATURE']
|
#. WEATHER_TERMS['TEMPERATURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Temperature"
|
msgid "Temperature"
|
||||||
msgstr ""
|
msgstr "Teplota"
|
||||||
|
|
||||||
#. WEATHER_TERMS['UV INDEX']
|
#. WEATHER_TERMS['UV INDEX']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "UV index"
|
msgid "UV index"
|
||||||
msgstr ""
|
msgstr "UV index"
|
||||||
|
|
||||||
#. WEATHER_TERMS['VISIBILITY']
|
#. WEATHER_TERMS['VISIBILITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr ""
|
msgstr "Viditelnost"
|
||||||
|
|
||||||
#. WEATHER_TERMS['WIND']
|
#. WEATHER_TERMS['WIND']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Wind"
|
msgid "Wind"
|
||||||
msgstr ""
|
msgstr "Vítr"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "subscribers"
|
msgid "subscribers"
|
||||||
msgstr ""
|
msgstr "odběratelé"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr "příspěvky"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "active users"
|
msgid "active users"
|
||||||
msgstr ""
|
msgstr "aktivní uživatelé"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "comments"
|
msgid "comments"
|
||||||
msgstr ""
|
msgstr "komentáře"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['USER']
|
#. SOCIAL_MEDIA_TERMS['USER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "user"
|
msgid "user"
|
||||||
msgstr ""
|
msgstr "uživatel"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "community"
|
msgid "community"
|
||||||
msgstr ""
|
msgstr "komunita"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "points"
|
msgid "points"
|
||||||
msgstr ""
|
msgstr "body"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr "název"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "author"
|
msgid "author"
|
||||||
msgstr ""
|
msgstr "autor"
|
||||||
|
|
||||||
#: searx/webapp.py:330
|
#: searx/webapp.py:330
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
|
@ -491,6 +493,10 @@ msgstr "Hodnocení knih"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "Množství souborů"
|
msgstr "Množství souborů"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr "Vypočítejte matematické výrazy pomocí vyhledávací lišty"
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Převádí řetězce na různé hash hodnoty."
|
msgstr "Převádí řetězce na různé hash hodnoty."
|
||||||
|
@ -570,6 +576,10 @@ msgstr "Odstraňovač sledovacích URL"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "Odstranit sledovací parametry z načtených URL"
|
msgstr "Odstranit sledovací parametry z načtených URL"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr "Převod mezi jednotkami"
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "Stránka nenalezena"
|
msgstr "Stránka nenalezena"
|
||||||
|
@ -747,27 +757,27 @@ msgstr "Cookies"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Odpovědi"
|
msgstr "Odpovědi"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Počet výsledků"
|
msgstr "Počet výsledků"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Informace"
|
msgstr "Informace"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Zkuste vyhledat:"
|
msgstr "Zkuste vyhledat:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "Nahoru"
|
msgstr "Nahoru"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "Předchozí stránka"
|
msgstr "Předchozí stránka"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "Další stránka"
|
msgstr "Další stránka"
|
||||||
|
|
||||||
|
@ -794,7 +804,7 @@ msgstr "vyhledat"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Aktuálně nejsou k dispozici žádná data. "
|
msgstr "Aktuálně nejsou k dispozici žádná data. "
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "Jméno vyhledávače"
|
msgstr "Jméno vyhledávače"
|
||||||
|
@ -807,12 +817,12 @@ msgstr "Skóre"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "Počet výsledků"
|
msgstr "Počet výsledků"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "Čas odpovědi"
|
msgstr "Čas odpovědi"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "Spolehlivost"
|
msgstr "Spolehlivost"
|
||||||
|
@ -931,7 +941,7 @@ msgstr "Automatická detekce"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "Bezpečné vyhledávání"
|
msgstr "Bezpečné vyhledávání"
|
||||||
|
@ -952,7 +962,7 @@ msgid "None"
|
||||||
msgstr "Vypnuto"
|
msgstr "Vypnuto"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Čásový interval"
|
msgstr "Čásový interval"
|
||||||
|
|
||||||
|
@ -1021,7 +1031,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "Vrátit se zpět na předchozí stranu."
|
msgstr "Vrátit se zpět na předchozí stranu."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Povolit"
|
msgstr "Povolit"
|
||||||
|
|
||||||
|
@ -1138,19 +1148,27 @@ msgstr ""
|
||||||
"Tato karta v uživatelském rozhraní neexistuje, ale můžete v těchto "
|
"Tato karta v uživatelském rozhraní neexistuje, ale můžete v těchto "
|
||||||
"vyhledávačích vyhledávat podle jejích !bang."
|
"vyhledávačích vyhledávat podle jejích !bang."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr "Povolit vše"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr "Zakázat vše"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Podporuje vybraný jazyk"
|
msgstr "Podporuje vybraný jazyk"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "Váha"
|
msgstr "Váha"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "Max. čas"
|
msgstr "Max. čas"
|
||||||
|
|
||||||
|
@ -1905,4 +1923,3 @@ msgstr "skrýt video"
|
||||||
#~ "Nenašli jsme žádné výsledky. Použijte "
|
#~ "Nenašli jsme žádné výsledky. Použijte "
|
||||||
#~ "prosím jiný dotaz nebo hledejte ve "
|
#~ "prosím jiný dotaz nebo hledejte ve "
|
||||||
#~ "více kategoriích."
|
#~ "více kategoriích."
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -12,7 +12,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2023-11-23 06:13+0000\n"
|
"PO-Revision-Date: 2023-11-23 06:13+0000\n"
|
||||||
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
||||||
"Language: cy\n"
|
"Language: cy\n"
|
||||||
|
@ -486,6 +486,10 @@ msgstr "Gradd llyfr"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Trosi llinynnau i wahanol dreuliadau hash."
|
msgstr "Trosi llinynnau i wahanol dreuliadau hash."
|
||||||
|
@ -556,6 +560,10 @@ msgstr ""
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -731,27 +739,27 @@ msgstr "Cwcis"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Atebion"
|
msgstr "Atebion"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Nifer o ganlyniadau"
|
msgstr "Nifer o ganlyniadau"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Gwybodaeth"
|
msgstr "Gwybodaeth"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Rho gynnig ar chwilio am:"
|
msgstr "Rho gynnig ar chwilio am:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -778,7 +786,7 @@ msgstr "chwilio"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Does dim data ar gael ar hyn o bryd."
|
msgstr "Does dim data ar gael ar hyn o bryd."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -791,12 +799,12 @@ msgstr "Sgoriau"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -915,7 +923,7 @@ msgstr ""
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -936,7 +944,7 @@ msgid "None"
|
||||||
msgstr "Dim"
|
msgstr "Dim"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Cyfnod amser"
|
msgstr "Cyfnod amser"
|
||||||
|
|
||||||
|
@ -1005,7 +1013,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Caniatáu"
|
msgstr "Caniatáu"
|
||||||
|
|
||||||
|
@ -1114,19 +1122,27 @@ msgid ""
|
||||||
"these engines by its !bangs."
|
"these engines by its !bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Cefnogir yr iaith a ddewiswyd"
|
msgstr "Cefnogir yr iaith a ddewiswyd"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -8,21 +8,22 @@
|
||||||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||||
# return42 <markus.heiser@darmarit.de>, 2023.
|
# return42 <markus.heiser@darmarit.de>, 2023.
|
||||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||||
|
# lolmeOzzi <lolmeOzzi@users.noreply.translate.codeberg.org>, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-04-04 14:18+0000\n"
|
"PO-Revision-Date: 2024-05-23 23:17+0000\n"
|
||||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
"Last-Translator: lolmeOzzi <lolmeOzzi@users.noreply.translate.codeberg.org>\n"
|
||||||
"\n"
|
"Language-Team: Danish <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/da/>\n"
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
"Language-Team: Danish "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/da/>\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Weblate 5.5.5\n"
|
||||||
"Generated-By: Babel 2.14.0\n"
|
"Generated-By: Babel 2.14.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
|
@ -73,7 +74,7 @@ msgstr "Radio"
|
||||||
#. CATEGORY_NAMES['TV']
|
#. CATEGORY_NAMES['TV']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "tv"
|
msgid "tv"
|
||||||
msgstr ""
|
msgstr "tv"
|
||||||
|
|
||||||
#. CATEGORY_NAMES['IT']
|
#. CATEGORY_NAMES['IT']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -173,22 +174,22 @@ msgstr "Om"
|
||||||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Average temp."
|
msgid "Average temp."
|
||||||
msgstr ""
|
msgstr "Gennemsnitlig temp."
|
||||||
|
|
||||||
#. WEATHER_TERMS['CLOUD COVER']
|
#. WEATHER_TERMS['CLOUD COVER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Cloud cover"
|
msgid "Cloud cover"
|
||||||
msgstr ""
|
msgstr "Skydække"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CONDITION']
|
#. WEATHER_TERMS['CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Condition"
|
msgid "Condition"
|
||||||
msgstr ""
|
msgstr "Forhold"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Current condition"
|
msgid "Current condition"
|
||||||
msgstr ""
|
msgstr "Nuværende forhold"
|
||||||
|
|
||||||
#. WEATHER_TERMS['EVENING']
|
#. WEATHER_TERMS['EVENING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -198,22 +199,22 @@ msgstr "Aften"
|
||||||
#. WEATHER_TERMS['FEELS LIKE']
|
#. WEATHER_TERMS['FEELS LIKE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Feels like"
|
msgid "Feels like"
|
||||||
msgstr ""
|
msgstr "Føles som"
|
||||||
|
|
||||||
#. WEATHER_TERMS['HUMIDITY']
|
#. WEATHER_TERMS['HUMIDITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Humidity"
|
msgid "Humidity"
|
||||||
msgstr ""
|
msgstr "Luftfugtighed"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MAX TEMP.']
|
#. WEATHER_TERMS['MAX TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Max temp."
|
msgid "Max temp."
|
||||||
msgstr ""
|
msgstr "Maks. temp."
|
||||||
|
|
||||||
#. WEATHER_TERMS['MIN TEMP.']
|
#. WEATHER_TERMS['MIN TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Min temp."
|
msgid "Min temp."
|
||||||
msgstr ""
|
msgstr "Min. temp."
|
||||||
|
|
||||||
#. WEATHER_TERMS['MORNING']
|
#. WEATHER_TERMS['MORNING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -233,82 +234,82 @@ msgstr "Middag"
|
||||||
#. WEATHER_TERMS['PRESSURE']
|
#. WEATHER_TERMS['PRESSURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Pressure"
|
msgid "Pressure"
|
||||||
msgstr ""
|
msgstr "Tryk"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNRISE']
|
#. WEATHER_TERMS['SUNRISE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunrise"
|
msgid "Sunrise"
|
||||||
msgstr ""
|
msgstr "Solopgang"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNSET']
|
#. WEATHER_TERMS['SUNSET']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunset"
|
msgid "Sunset"
|
||||||
msgstr ""
|
msgstr "Solnedgang"
|
||||||
|
|
||||||
#. WEATHER_TERMS['TEMPERATURE']
|
#. WEATHER_TERMS['TEMPERATURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Temperature"
|
msgid "Temperature"
|
||||||
msgstr ""
|
msgstr "Temperatur"
|
||||||
|
|
||||||
#. WEATHER_TERMS['UV INDEX']
|
#. WEATHER_TERMS['UV INDEX']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "UV index"
|
msgid "UV index"
|
||||||
msgstr ""
|
msgstr "UV index"
|
||||||
|
|
||||||
#. WEATHER_TERMS['VISIBILITY']
|
#. WEATHER_TERMS['VISIBILITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr ""
|
msgstr "Sigtbarhed"
|
||||||
|
|
||||||
#. WEATHER_TERMS['WIND']
|
#. WEATHER_TERMS['WIND']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Wind"
|
msgid "Wind"
|
||||||
msgstr ""
|
msgstr "Vind"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "subscribers"
|
msgid "subscribers"
|
||||||
msgstr ""
|
msgstr "abonnenter"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr "opslag"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "active users"
|
msgid "active users"
|
||||||
msgstr ""
|
msgstr "aktive brugere"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "comments"
|
msgid "comments"
|
||||||
msgstr ""
|
msgstr "kommentare"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['USER']
|
#. SOCIAL_MEDIA_TERMS['USER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "user"
|
msgid "user"
|
||||||
msgstr ""
|
msgstr "bruger"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "community"
|
msgid "community"
|
||||||
msgstr ""
|
msgstr "fællesskab"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "points"
|
msgid "points"
|
||||||
msgstr ""
|
msgstr "point"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr "titel"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "author"
|
msgid "author"
|
||||||
msgstr ""
|
msgstr "forfatter"
|
||||||
|
|
||||||
#: searx/webapp.py:330
|
#: searx/webapp.py:330
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
|
@ -487,6 +488,10 @@ msgstr "Bogbedømmelse"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "Filkvalitet"
|
msgstr "Filkvalitet"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr "Udregn matematiske udtryk via søgefeltet"
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Konverterer strenge til forskellige hash-digests."
|
msgstr "Konverterer strenge til forskellige hash-digests."
|
||||||
|
@ -568,6 +573,10 @@ msgstr "Fjernelse af tracker URL"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "Fjern trackeres parametre fra den returnerede URL"
|
msgstr "Fjern trackeres parametre fra den returnerede URL"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr "Konverter mellem enheder"
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "Side ikke fundet"
|
msgstr "Side ikke fundet"
|
||||||
|
@ -747,27 +756,27 @@ msgstr "Cookies"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Svar"
|
msgstr "Svar"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Antal resultater"
|
msgstr "Antal resultater"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Info"
|
msgstr "Info"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Prøv at søge efter:"
|
msgstr "Prøv at søge efter:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "Tilbage til toppen"
|
msgstr "Tilbage til toppen"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "Forrige side"
|
msgstr "Forrige side"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "Næste side"
|
msgstr "Næste side"
|
||||||
|
|
||||||
|
@ -794,7 +803,7 @@ msgstr "søg"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Der er pt. ingen tilgængelige data. "
|
msgstr "Der er pt. ingen tilgængelige data. "
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "Søgemaskinenavn"
|
msgstr "Søgemaskinenavn"
|
||||||
|
@ -807,12 +816,12 @@ msgstr "Vægtninger"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "Antal resultater"
|
msgstr "Antal resultater"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "Svartid"
|
msgstr "Svartid"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "Driftsikkerhed"
|
msgstr "Driftsikkerhed"
|
||||||
|
@ -931,7 +940,7 @@ msgstr "Automatisk registrering"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "Sikker Søgning"
|
msgstr "Sikker Søgning"
|
||||||
|
@ -952,7 +961,7 @@ msgid "None"
|
||||||
msgstr "Ingen"
|
msgstr "Ingen"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Tidsinterval"
|
msgstr "Tidsinterval"
|
||||||
|
|
||||||
|
@ -1021,7 +1030,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "Gå til den forrige side med Forrige-side-knappen."
|
msgstr "Gå til den forrige side med Forrige-side-knappen."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Tillad"
|
msgstr "Tillad"
|
||||||
|
|
||||||
|
@ -1121,7 +1130,7 @@ msgstr "Indsæt kopieret indstillinger-hash (uden URL) for at gendanne"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:59
|
#: searx/templates/simple/preferences/cookies.html:59
|
||||||
msgid "Preferences hash"
|
msgid "Preferences hash"
|
||||||
msgstr ""
|
msgstr "Præference hash"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/doi_resolver.html:2
|
#: searx/templates/simple/preferences/doi_resolver.html:2
|
||||||
msgid "Open Access DOI resolver"
|
msgid "Open Access DOI resolver"
|
||||||
|
@ -1139,19 +1148,27 @@ msgstr ""
|
||||||
"Denne fane eksisterer ikke i brugergrænsefladen, men du kan søge i disse "
|
"Denne fane eksisterer ikke i brugergrænsefladen, men du kan søge i disse "
|
||||||
"søgemaskiner via dens !bangs."
|
"søgemaskiner via dens !bangs."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr "Aktiver alle"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr "Deaktiver alle"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Understøtter valgte sprog"
|
msgstr "Understøtter valgte sprog"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "Vægt"
|
msgstr "Vægt"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "Maks-tid"
|
msgstr "Maks-tid"
|
||||||
|
|
||||||
|
@ -1397,11 +1414,11 @@ msgstr "Version"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:18
|
#: searx/templates/simple/result_templates/packages.html:18
|
||||||
msgid "Maintainer"
|
msgid "Maintainer"
|
||||||
msgstr ""
|
msgstr "Vedligeholder"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:24
|
#: searx/templates/simple/result_templates/packages.html:24
|
||||||
msgid "Updated at"
|
msgid "Updated at"
|
||||||
msgstr ""
|
msgstr "Opdateret ved"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:30
|
#: searx/templates/simple/result_templates/packages.html:30
|
||||||
#: searx/templates/simple/result_templates/paper.html:25
|
#: searx/templates/simple/result_templates/paper.html:25
|
||||||
|
@ -1410,7 +1427,7 @@ msgstr "Tags"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:36
|
#: searx/templates/simple/result_templates/packages.html:36
|
||||||
msgid "Popularity"
|
msgid "Popularity"
|
||||||
msgstr ""
|
msgstr "Popularitet"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:42
|
#: searx/templates/simple/result_templates/packages.html:42
|
||||||
msgid "License"
|
msgid "License"
|
||||||
|
@ -1418,11 +1435,11 @@ msgstr "Licens"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:52
|
#: searx/templates/simple/result_templates/packages.html:52
|
||||||
msgid "Project"
|
msgid "Project"
|
||||||
msgstr ""
|
msgstr "Projekt"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/packages.html:55
|
#: searx/templates/simple/result_templates/packages.html:55
|
||||||
msgid "Project homepage"
|
msgid "Project homepage"
|
||||||
msgstr ""
|
msgstr "Projekt hjemmeside"
|
||||||
|
|
||||||
#: searx/templates/simple/result_templates/paper.html:5
|
#: searx/templates/simple/result_templates/paper.html:5
|
||||||
msgid "Published date"
|
msgid "Published date"
|
||||||
|
@ -1906,4 +1923,3 @@ msgstr "skjul video"
|
||||||
#~ "Vi fandt ingen resultater. Benyt "
|
#~ "Vi fandt ingen resultater. Benyt "
|
||||||
#~ "venligst en anden søge-streng eller "
|
#~ "venligst en anden søge-streng eller "
|
||||||
#~ "søg i flere kategorier."
|
#~ "søg i flere kategorier."
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -20,26 +20,29 @@
|
||||||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||||
# Peter Martin <weblate@pe7er.com>, 2022.
|
# Peter Martin <weblate@pe7er.com>, 2022.
|
||||||
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
||||||
|
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||||
|
# German <German@users.noreply.translate.codeberg.org>, 2024.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2024-02-26 16:56+0000\n"
|
"PO-Revision-Date: 2024-05-10 06:13+0000\n"
|
||||||
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
"Last-Translator: German <German@users.noreply.translate.codeberg.org>\n"
|
||||||
|
"Language-Team: German <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/de/>\n"
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Language-Team: German "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/de/>\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Weblate 5.5.2\n"
|
||||||
"Generated-By: Babel 2.14.0\n"
|
"Generated-By: Babel 2.14.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "without further subgrouping"
|
msgid "without further subgrouping"
|
||||||
msgstr "ohne weitere Untergruppierung"
|
msgstr "keine weitere Untergruppierung"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['DEFAULT_CATEGORY']
|
#. CONSTANT_NAMES['DEFAULT_CATEGORY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -84,7 +87,7 @@ msgstr "Radio"
|
||||||
#. CATEGORY_NAMES['TV']
|
#. CATEGORY_NAMES['TV']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "tv"
|
msgid "tv"
|
||||||
msgstr ""
|
msgstr "TV"
|
||||||
|
|
||||||
#. CATEGORY_NAMES['IT']
|
#. CATEGORY_NAMES['IT']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -104,7 +107,7 @@ msgstr "Karte"
|
||||||
#. CATEGORY_NAMES['ONIONS']
|
#. CATEGORY_NAMES['ONIONS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "onions"
|
msgid "onions"
|
||||||
msgstr "Onion"
|
msgstr "Zwiebel"
|
||||||
|
|
||||||
#. CATEGORY_NAMES['SCIENCE']
|
#. CATEGORY_NAMES['SCIENCE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -159,7 +162,7 @@ msgstr "wissenschaftliche Veröffentlichungen"
|
||||||
#. STYLE_NAMES['AUTO']
|
#. STYLE_NAMES['AUTO']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "auto"
|
msgid "auto"
|
||||||
msgstr "auto"
|
msgstr "automatisch"
|
||||||
|
|
||||||
#. STYLE_NAMES['LIGHT']
|
#. STYLE_NAMES['LIGHT']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
|
@ -184,22 +187,22 @@ msgstr "Über"
|
||||||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Average temp."
|
msgid "Average temp."
|
||||||
msgstr ""
|
msgstr "Mittlere Temp."
|
||||||
|
|
||||||
#. WEATHER_TERMS['CLOUD COVER']
|
#. WEATHER_TERMS['CLOUD COVER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Cloud cover"
|
msgid "Cloud cover"
|
||||||
msgstr ""
|
msgstr "Bewölkung"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CONDITION']
|
#. WEATHER_TERMS['CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Condition"
|
msgid "Condition"
|
||||||
msgstr ""
|
msgstr "Bedingung"
|
||||||
|
|
||||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Current condition"
|
msgid "Current condition"
|
||||||
msgstr ""
|
msgstr "Aktuelle Bedingung"
|
||||||
|
|
||||||
#. WEATHER_TERMS['EVENING']
|
#. WEATHER_TERMS['EVENING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -209,22 +212,22 @@ msgstr "Abends"
|
||||||
#. WEATHER_TERMS['FEELS LIKE']
|
#. WEATHER_TERMS['FEELS LIKE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Feels like"
|
msgid "Feels like"
|
||||||
msgstr ""
|
msgstr "Gefühlt wie"
|
||||||
|
|
||||||
#. WEATHER_TERMS['HUMIDITY']
|
#. WEATHER_TERMS['HUMIDITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Humidity"
|
msgid "Humidity"
|
||||||
msgstr ""
|
msgstr "Luftfeuchtigkeit"
|
||||||
|
|
||||||
#. WEATHER_TERMS['MAX TEMP.']
|
#. WEATHER_TERMS['MAX TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Max temp."
|
msgid "Max temp."
|
||||||
msgstr ""
|
msgstr "Max."
|
||||||
|
|
||||||
#. WEATHER_TERMS['MIN TEMP.']
|
#. WEATHER_TERMS['MIN TEMP.']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Min temp."
|
msgid "Min temp."
|
||||||
msgstr ""
|
msgstr "Min."
|
||||||
|
|
||||||
#. WEATHER_TERMS['MORNING']
|
#. WEATHER_TERMS['MORNING']
|
||||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||||
|
@ -244,82 +247,82 @@ msgstr "Mittags"
|
||||||
#. WEATHER_TERMS['PRESSURE']
|
#. WEATHER_TERMS['PRESSURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Pressure"
|
msgid "Pressure"
|
||||||
msgstr ""
|
msgstr "Luftdruck"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNRISE']
|
#. WEATHER_TERMS['SUNRISE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunrise"
|
msgid "Sunrise"
|
||||||
msgstr ""
|
msgstr "Sonnenaufgang"
|
||||||
|
|
||||||
#. WEATHER_TERMS['SUNSET']
|
#. WEATHER_TERMS['SUNSET']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Sunset"
|
msgid "Sunset"
|
||||||
msgstr ""
|
msgstr "Sonnenuntergang"
|
||||||
|
|
||||||
#. WEATHER_TERMS['TEMPERATURE']
|
#. WEATHER_TERMS['TEMPERATURE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Temperature"
|
msgid "Temperature"
|
||||||
msgstr ""
|
msgstr "Temperatur"
|
||||||
|
|
||||||
#. WEATHER_TERMS['UV INDEX']
|
#. WEATHER_TERMS['UV INDEX']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "UV index"
|
msgid "UV index"
|
||||||
msgstr ""
|
msgstr "UV-Index"
|
||||||
|
|
||||||
#. WEATHER_TERMS['VISIBILITY']
|
#. WEATHER_TERMS['VISIBILITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Visibility"
|
msgid "Visibility"
|
||||||
msgstr ""
|
msgstr "Sichtweite"
|
||||||
|
|
||||||
#. WEATHER_TERMS['WIND']
|
#. WEATHER_TERMS['WIND']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "Wind"
|
msgid "Wind"
|
||||||
msgstr ""
|
msgstr "Sturm"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "subscribers"
|
msgid "subscribers"
|
||||||
msgstr ""
|
msgstr "Abonnenten"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "posts"
|
msgid "posts"
|
||||||
msgstr ""
|
msgstr "Beiträge"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "active users"
|
msgid "active users"
|
||||||
msgstr ""
|
msgstr "aktive Nutzer"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "comments"
|
msgid "comments"
|
||||||
msgstr ""
|
msgstr "Kommentare"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['USER']
|
#. SOCIAL_MEDIA_TERMS['USER']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "user"
|
msgid "user"
|
||||||
msgstr ""
|
msgstr "Benutzer"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "community"
|
msgid "community"
|
||||||
msgstr ""
|
msgstr "Community"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "points"
|
msgid "points"
|
||||||
msgstr ""
|
msgstr "Punkte"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "title"
|
msgid "title"
|
||||||
msgstr ""
|
msgstr "Titel"
|
||||||
|
|
||||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "author"
|
msgid "author"
|
||||||
msgstr ""
|
msgstr "Autor/-in"
|
||||||
|
|
||||||
#: searx/webapp.py:330
|
#: searx/webapp.py:330
|
||||||
msgid "No item found"
|
msgid "No item found"
|
||||||
|
@ -498,6 +501,10 @@ msgstr "Buchbewertung"
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr "Dateiqualität"
|
msgstr "Dateiqualität"
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr "Rechne mathematische Ausdrücke mit der Suchleiste aus"
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr "Konvertiert Zeichenketten in verschiedene Hashwerte."
|
msgstr "Konvertiert Zeichenketten in verschiedene Hashwerte."
|
||||||
|
@ -583,6 +590,10 @@ msgstr "Tracker-URL-Entferner"
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr "Tracker-Argumente von den zurückgegebenen URLs entfernen"
|
msgstr "Tracker-Argumente von den zurückgegebenen URLs entfernen"
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr "Einheiten umrechnen"
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr "Seite nicht gefunden"
|
msgstr "Seite nicht gefunden"
|
||||||
|
@ -764,27 +775,27 @@ msgstr "Cookies"
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr "Antworten"
|
msgstr "Antworten"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr "Trefferanzahl"
|
msgstr "Trefferanzahl"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr "Information"
|
msgstr "Information"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr "Suche nach:"
|
msgstr "Suche nach:"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr "Zurück zum Anfang"
|
msgstr "Zurück zum Anfang"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr "Vorherige Seite"
|
msgstr "Vorherige Seite"
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr "Nächste Seite"
|
msgstr "Nächste Seite"
|
||||||
|
|
||||||
|
@ -811,7 +822,7 @@ msgstr "suchen"
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr "Es sind derzeit keine Daten vorhanden. "
|
msgstr "Es sind derzeit keine Daten vorhanden. "
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr "Suchmaschinenname"
|
msgstr "Suchmaschinenname"
|
||||||
|
@ -824,12 +835,12 @@ msgstr "Punkte"
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr "Ergebnisanzahl"
|
msgstr "Ergebnisanzahl"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr "Antwortzeit"
|
msgstr "Antwortzeit"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr "Zuverlässigkeit"
|
msgstr "Zuverlässigkeit"
|
||||||
|
@ -948,7 +959,7 @@ msgstr "Spracherkennung"
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr "Sichere Suche"
|
msgstr "Sichere Suche"
|
||||||
|
@ -969,7 +980,7 @@ msgid "None"
|
||||||
msgstr "Keine"
|
msgstr "Keine"
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr "Zeitbereich"
|
msgstr "Zeitbereich"
|
||||||
|
|
||||||
|
@ -1015,15 +1026,15 @@ msgstr "Es gibt keine weiteren Ergebnisse zu dem Suchbegriff:"
|
||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:19
|
#: searx/templates/simple/messages/no_results.html:19
|
||||||
msgid "Refresh the page."
|
msgid "Refresh the page."
|
||||||
msgstr "Suche wiederholen"
|
msgstr "Die Seite neuladen."
|
||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:20
|
#: searx/templates/simple/messages/no_results.html:20
|
||||||
msgid "Search for another query or select another category (above)."
|
msgid "Search for another query or select another category (above)."
|
||||||
msgstr "einen anderen Suchbegriff verwenden oder die Kategorie (oben) wechseln"
|
msgstr "Einen anderen Suchbegriff verwenden oder die Kategorie (oben) wechseln."
|
||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:21
|
#: searx/templates/simple/messages/no_results.html:21
|
||||||
msgid "Change the search engine used in the preferences:"
|
msgid "Change the search engine used in the preferences:"
|
||||||
msgstr "Anpassen der verwendeten Suchmaschinen in den Einstellungen"
|
msgstr "Ändern der verwendeten Suchmaschinen in den Einstellungen:"
|
||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:22
|
#: searx/templates/simple/messages/no_results.html:22
|
||||||
msgid "Switch to another instance:"
|
msgid "Switch to another instance:"
|
||||||
|
@ -1038,7 +1049,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr "Zurück zur vorherigen Seite über unten stehenden Button."
|
msgstr "Zurück zur vorherigen Seite über unten stehenden Button."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr "Erlauben"
|
msgstr "Erlauben"
|
||||||
|
|
||||||
|
@ -1156,19 +1167,27 @@ msgstr ""
|
||||||
"Diese Registerkarte ist in der Benutzeroberfläche nicht vorhanden, aber "
|
"Diese Registerkarte ist in der Benutzeroberfläche nicht vorhanden, aber "
|
||||||
"in Suchmaschinen kann mittels !bang gesucht werden."
|
"in Suchmaschinen kann mittels !bang gesucht werden."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr "Alle aktivieren"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr "Alle deaktivieren"
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr "!bang"
|
msgstr "!bang"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr "Sprachen"
|
msgstr "Sprachen"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr "Gewichtung"
|
msgstr "Gewichtung"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr "max. Zeit"
|
msgstr "max. Zeit"
|
||||||
|
|
||||||
|
@ -1202,7 +1221,7 @@ msgstr "Zurück"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/hotkeys.html:2
|
#: searx/templates/simple/preferences/hotkeys.html:2
|
||||||
msgid "Hotkeys"
|
msgid "Hotkeys"
|
||||||
msgstr "Hotkeys"
|
msgstr "Funktionstasten"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/hotkeys.html:13
|
#: searx/templates/simple/preferences/hotkeys.html:13
|
||||||
msgid "Vim-like"
|
msgid "Vim-like"
|
||||||
|
@ -1939,4 +1958,3 @@ msgstr "Video verstecken"
|
||||||
#~ "werden. Bitte nutze einen anderen "
|
#~ "werden. Bitte nutze einen anderen "
|
||||||
#~ "Suchbegriff, oder suche das gewünschte "
|
#~ "Suchbegriff, oder suche das gewünschte "
|
||||||
#~ "in einer anderen Kategorie."
|
#~ "in einer anderen Kategorie."
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||||
"PO-Revision-Date: 2022-11-04 07:18+0000\n"
|
"PO-Revision-Date: 2022-11-04 07:18+0000\n"
|
||||||
"Last-Translator: Landhoo School Students "
|
"Last-Translator: Landhoo School Students "
|
||||||
"<landhooschoolstudents@gmail.com>\n"
|
"<landhooschoolstudents@gmail.com>\n"
|
||||||
|
@ -474,6 +474,10 @@ msgstr ""
|
||||||
msgid "File quality"
|
msgid "File quality"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/plugins/calculator.py:12
|
||||||
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:10
|
#: searx/plugins/hash_plugin.py:10
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -544,6 +548,10 @@ msgstr ""
|
||||||
msgid "Remove trackers arguments from the returned URL"
|
msgid "Remove trackers arguments from the returned URL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/plugins/unit_converter.py:29
|
||||||
|
msgid "Convert between units"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -719,27 +727,27 @@ msgstr ""
|
||||||
msgid "Answers"
|
msgid "Answers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:38
|
#: searx/templates/simple/results.html:42
|
||||||
msgid "Number of results"
|
msgid "Number of results"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:44
|
#: searx/templates/simple/results.html:48
|
||||||
msgid "Info"
|
msgid "Info"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:73
|
#: searx/templates/simple/results.html:77
|
||||||
msgid "Try searching for:"
|
msgid "Try searching for:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:105
|
#: searx/templates/simple/results.html:109
|
||||||
msgid "Back to top"
|
msgid "Back to top"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:123
|
#: searx/templates/simple/results.html:127
|
||||||
msgid "Previous page"
|
msgid "Previous page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/results.html:141
|
#: searx/templates/simple/results.html:145
|
||||||
msgid "Next page"
|
msgid "Next page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -766,7 +774,7 @@ msgstr ""
|
||||||
msgid "There is currently no data available. "
|
msgid "There is currently no data available. "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:18
|
#: searx/templates/simple/preferences/engines.html:24
|
||||||
#: searx/templates/simple/stats.html:25
|
#: searx/templates/simple/stats.html:25
|
||||||
msgid "Engine name"
|
msgid "Engine name"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -779,12 +787,12 @@ msgstr ""
|
||||||
msgid "Result count"
|
msgid "Result count"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:25
|
#: searx/templates/simple/preferences/engines.html:31
|
||||||
#: searx/templates/simple/stats.html:28
|
#: searx/templates/simple/stats.html:28
|
||||||
msgid "Response time"
|
msgid "Response time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:29
|
#: searx/templates/simple/preferences/engines.html:35
|
||||||
#: searx/templates/simple/stats.html:29
|
#: searx/templates/simple/stats.html:29
|
||||||
msgid "Reliability"
|
msgid "Reliability"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -903,7 +911,7 @@ msgstr ""
|
||||||
#: searx/templates/simple/filters/safesearch.html:2
|
#: searx/templates/simple/filters/safesearch.html:2
|
||||||
#: searx/templates/simple/filters/safesearch.html:3
|
#: searx/templates/simple/filters/safesearch.html:3
|
||||||
#: searx/templates/simple/filters/safesearch.html:4
|
#: searx/templates/simple/filters/safesearch.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:21
|
#: searx/templates/simple/preferences/engines.html:27
|
||||||
#: searx/templates/simple/preferences/safesearch.html:2
|
#: searx/templates/simple/preferences/safesearch.html:2
|
||||||
msgid "SafeSearch"
|
msgid "SafeSearch"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -924,7 +932,7 @@ msgid "None"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/filters/time_range.html:1
|
#: searx/templates/simple/filters/time_range.html:1
|
||||||
#: searx/templates/simple/preferences/engines.html:22
|
#: searx/templates/simple/preferences/engines.html:28
|
||||||
msgid "Time range"
|
msgid "Time range"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -993,7 +1001,7 @@ msgid "Go back to the previous page using the previous page button."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:4
|
#: searx/templates/simple/preferences/answerers.html:4
|
||||||
#: searx/templates/simple/preferences/engines.html:17
|
#: searx/templates/simple/preferences/engines.html:23
|
||||||
msgid "Allow"
|
msgid "Allow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1102,19 +1110,27 @@ msgid ""
|
||||||
"these engines by its !bangs."
|
"these engines by its !bangs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:19
|
#: searx/templates/simple/preferences/engines.html:15
|
||||||
|
msgid "Enable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:16
|
||||||
|
msgid "Disable all"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: searx/templates/simple/preferences/engines.html:25
|
||||||
msgid "!bang"
|
msgid "!bang"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:20
|
#: searx/templates/simple/preferences/engines.html:26
|
||||||
msgid "Supports selected language"
|
msgid "Supports selected language"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:23
|
#: searx/templates/simple/preferences/engines.html:29
|
||||||
msgid "Weight"
|
msgid "Weight"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/engines.html:27
|
#: searx/templates/simple/preferences/engines.html:33
|
||||||
msgid "Max time"
|
msgid "Max time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue