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>`
|
||||
- Austin Olacsi `<https://github.com/Austin-Olacsi>`
|
||||
- @micsthepick
|
||||
- Daniel Kukula `<https://github.com/dkuku>`
|
||||
|
|
|
@ -563,3 +563,7 @@ type.
|
|||
* - source_code_url
|
||||
- :py:class:`str`
|
||||
- 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>`
|
||||
- script & cookies are optional
|
||||
- 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 100 `well maintained <https://uptime.searxng.org/>`__ instances on searx.space_
|
||||
- :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
|
||||
nose2[coverage_plugin]==0.14.1
|
||||
nose2[coverage_plugin]==0.14.2
|
||||
cov-core==1.15.0
|
||||
black==24.3.0
|
||||
pylint==3.1.0
|
||||
pylint==3.2.2
|
||||
splinter==0.21.0
|
||||
selenium==4.20.0
|
||||
Pallets-Sphinx-Themes==2.1.2
|
||||
selenium==4.21.0
|
||||
Pallets-Sphinx-Themes==2.1.3
|
||||
Sphinx<=7.1.2; python_version == '3.8'
|
||||
Sphinx==7.3.7; python_version > '3.8'
|
||||
sphinx-issues==4.1.0
|
||||
|
@ -13,10 +13,13 @@ sphinx-jinja==2.0.2
|
|||
sphinx-tabs==3.4.5
|
||||
sphinxcontrib-programoutput==0.17
|
||||
sphinx-autobuild==2021.3.14
|
||||
sphinx-notfound-page==1.0.0
|
||||
myst-parser==2.0.0
|
||||
linuxdoc==20231020
|
||||
sphinx-notfound-page==1.0.2
|
||||
myst-parser==3.0.1
|
||||
linuxdoc==20240509
|
||||
aiounittest==1.4.2
|
||||
yamllint==1.35.1
|
||||
wlc==1.14
|
||||
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
|
||||
babel==2.14.0
|
||||
babel==2.15.0
|
||||
flask-babel==4.0.0
|
||||
flask==3.0.3
|
||||
jinja2==3.1.3
|
||||
lxml==5.2.1
|
||||
pygments==2.17.2
|
||||
jinja2==3.1.4
|
||||
lxml==5.2.2
|
||||
pygments==2.18.0
|
||||
python-dateutil==2.9.0.post0
|
||||
pyyaml==6.0.1
|
||||
httpx[http2]==0.24.1
|
||||
|
@ -15,4 +15,4 @@ setproctitle==1.3.3
|
|||
redis==5.0.4
|
||||
markdown-it-py==3.0.0
|
||||
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 logging
|
||||
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']
|
||||
|
||||
|
@ -61,7 +72,7 @@ class Config:
|
|||
# init schema
|
||||
|
||||
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():
|
||||
log.warning("missing config file: %s", cfg_file)
|
||||
return cfg
|
||||
|
@ -69,12 +80,7 @@ class Config:
|
|||
# load configuration
|
||||
|
||||
log.debug("load config file: %s", cfg_file)
|
||||
try:
|
||||
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
|
||||
upd_cfg = toml_load(cfg_file)
|
||||
|
||||
is_valid, issue_list = cfg.validate(upd_cfg)
|
||||
for msg in issue_list:
|
||||
|
@ -176,6 +182,25 @@ class Config:
|
|||
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
|
||||
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -569,6 +569,7 @@
|
|||
"pl": "Dinar Bahrajnu",
|
||||
"pt": "dinar bareinita",
|
||||
"ru": "бахрейнский динар",
|
||||
"sl": "bahrajnski dinar",
|
||||
"sr": "бахреински динар",
|
||||
"sv": "Bahrainsk dinar",
|
||||
"ta": "பஹ்ரேன் தினார்",
|
||||
|
@ -601,6 +602,7 @@
|
|||
"pt": "Franco do Burúndi",
|
||||
"ro": "franc burundez",
|
||||
"ru": "бурундийский франк",
|
||||
"sl": "burundijski frank",
|
||||
"sr": "бурундски франак",
|
||||
"sv": "Burundisk franc",
|
||||
"ta": "புரூண்டி பிராங்க்",
|
||||
|
@ -1461,6 +1463,7 @@
|
|||
"eu": "Peso dominikar",
|
||||
"fi": "Dominikaanisen tasavallan peso",
|
||||
"fr": "peso dominicain",
|
||||
"gl": "peso dominicano",
|
||||
"he": "פסו דומיניקני",
|
||||
"hr": "Dominikanski pezo",
|
||||
"hu": "dominikai peso",
|
||||
|
@ -1735,6 +1738,7 @@
|
|||
"pt": "libra das Malvinas",
|
||||
"ro": "Liră din Insulele Falkland",
|
||||
"ru": "фунт Фолклендских островов",
|
||||
"sl": "falklandski funt",
|
||||
"sv": "Falklandspund",
|
||||
"tr": "Falkland Adaları poundu",
|
||||
"uk": "Фолклендський фунт"
|
||||
|
@ -2116,9 +2120,9 @@
|
|||
"ar": "جوردة هايتية",
|
||||
"ca": "gourde",
|
||||
"cs": "Haitský gourde",
|
||||
"da": "Gourde",
|
||||
"da": "gourde",
|
||||
"de": "Gourde",
|
||||
"en": "Gourde",
|
||||
"en": "gourde",
|
||||
"eo": "haitia gurdo",
|
||||
"es": "gourde",
|
||||
"eu": "Gourde",
|
||||
|
@ -2127,20 +2131,20 @@
|
|||
"he": "גורד",
|
||||
"hr": "Haićanski gourd",
|
||||
"hu": "haiti gourde",
|
||||
"id": "Gourde Haiti",
|
||||
"it": "Gourde haitiano",
|
||||
"id": "gourde Haiti",
|
||||
"it": "gourde haitiano",
|
||||
"ja": "グールド",
|
||||
"ko": "아이티 구르드",
|
||||
"lt": "Gurdas",
|
||||
"ms": "Gourde Haiti",
|
||||
"ms": "gourde Haiti",
|
||||
"nl": "Haïtiaanse gourde",
|
||||
"pa": "ਹੈਤੀਆਈ ਗੂਰਦ",
|
||||
"pl": "Gourde",
|
||||
"pt": "Gourde",
|
||||
"pl": "gourde",
|
||||
"pt": "gourde",
|
||||
"ru": "гаитянский гурд",
|
||||
"sr": "хаићански гурд",
|
||||
"sv": "Gourde",
|
||||
"tr": "Gourde",
|
||||
"sv": "gourde",
|
||||
"tr": "gourde",
|
||||
"uk": "Гаїтянський гурд"
|
||||
},
|
||||
"HUF": {
|
||||
|
@ -2790,6 +2794,7 @@
|
|||
"pl": "Dinar kuwejcki",
|
||||
"pt": "dinar kuwaitiano",
|
||||
"ru": "кувейтский динар",
|
||||
"sl": "kuvajtski dinar",
|
||||
"sr": "кувајтски динар",
|
||||
"sv": "Kuwaitisk dinar",
|
||||
"ta": "குவைத் தினார்",
|
||||
|
@ -3665,7 +3670,7 @@
|
|||
"oc": "Córdoba (moneda)",
|
||||
"pa": "ਨਿਕਾਰਾਗੁਆਈ ਕੋਰਦੋਬਾ",
|
||||
"pl": "Cordoba oro",
|
||||
"pt": "Córdoba (moeda)",
|
||||
"pt": "Córdoba",
|
||||
"ro": "Córdoba",
|
||||
"ru": "никарагуанская кордоба",
|
||||
"sr": "никарагванска кордоба",
|
||||
|
@ -3823,6 +3828,7 @@
|
|||
"pl": "Rial omański",
|
||||
"pt": "Rial omanense",
|
||||
"ru": "оманский риал",
|
||||
"sl": "omanski rial",
|
||||
"sr": "омански ријал",
|
||||
"sv": "Omansk rial",
|
||||
"ta": "ஓமானி ரியால்",
|
||||
|
@ -3924,6 +3930,7 @@
|
|||
"pt": "Kina",
|
||||
"ro": "Kina",
|
||||
"ru": "Кина",
|
||||
"sl": "kina",
|
||||
"sr": "папуанска кина",
|
||||
"sv": "Papuansk Kina",
|
||||
"th": "กีนา",
|
||||
|
@ -4324,6 +4331,7 @@
|
|||
"bn": "সৌদি রিয়াল",
|
||||
"ca": "riyal saudita",
|
||||
"cs": "saúdský rijál",
|
||||
"da": "Saudiske riyal",
|
||||
"de": "Saudi-Rial",
|
||||
"en": "Saudi riyal",
|
||||
"eo": "sauda rialo",
|
||||
|
@ -5734,7 +5742,7 @@
|
|||
"ca": "rial iemenita",
|
||||
"cs": "Jemenský rijál",
|
||||
"de": "Jemen-Rial",
|
||||
"en": "Yemeni rial",
|
||||
"en": "rial",
|
||||
"eo": "jemena rialo",
|
||||
"es": "rial yemení",
|
||||
"fi": "Jemenin rial",
|
||||
|
@ -6278,6 +6286,7 @@
|
|||
"bahraini dinar": "BHD",
|
||||
"bahrainin dinaari": "BHD",
|
||||
"bahrainsk dinar": "BHD",
|
||||
"bahrajnski dinar": "BHD",
|
||||
"bahrajnský dinár": "BHD",
|
||||
"bahreini dinár": "BHD",
|
||||
"bahreino dinaras": "BHD",
|
||||
|
@ -6554,6 +6563,7 @@
|
|||
"burundi frangı": "BIF",
|
||||
"burundi frank": "BIF",
|
||||
"burundian franc": "BIF",
|
||||
"burundijski frank": "BIF",
|
||||
"burundin frangi": "BIF",
|
||||
"burundisk franc": "BIF",
|
||||
"burundski franak": "BIF",
|
||||
|
@ -7824,6 +7834,7 @@
|
|||
"falklandin punta": "FKP",
|
||||
"falklandska funta": "FKP",
|
||||
"falklandská libra": "FKP",
|
||||
"falklandski funt": "FKP",
|
||||
"falklandspund": "FKP",
|
||||
"fas dirhemi": "MAD",
|
||||
"fbu": "BIF",
|
||||
|
@ -9835,6 +9846,7 @@
|
|||
"ny sol": "PEN",
|
||||
"ny taiwan dollar": "TWD",
|
||||
"nyderlandų antilų guldenas": "ANG",
|
||||
"nytaiwanske dollar": "TWD",
|
||||
"nyzeeländsk dollar": "NZD",
|
||||
"nz$": "NZD",
|
||||
"nzd": "NZD",
|
||||
|
@ -9855,6 +9867,7 @@
|
|||
"omanitische rial": "OMR",
|
||||
"omano rialas": "OMR",
|
||||
"omansk rial": "OMR",
|
||||
"omanski rial": "OMR",
|
||||
"omanski rijal": "OMR",
|
||||
"ománi riál": "OMR",
|
||||
"ománský rial": "OMR",
|
||||
|
@ -10225,7 +10238,6 @@
|
|||
"pound sudan selatan": "SSP",
|
||||
"pound suriah": "SYP",
|
||||
"pounds": "GBP",
|
||||
"poundsterling": "GBP",
|
||||
"põhja korea vonn": "KPW",
|
||||
"põhja korea won": "KPW",
|
||||
"põhja makedoonia denaar": "MKD",
|
||||
|
@ -10325,6 +10337,7 @@
|
|||
"rf.": "MVR",
|
||||
"rial": [
|
||||
"YER",
|
||||
"OMR",
|
||||
"SAR",
|
||||
"IRR"
|
||||
],
|
||||
|
@ -10724,6 +10737,7 @@
|
|||
"saudiarabisk rial": "SAR",
|
||||
"saudijski rijal": "SAR",
|
||||
"saudische riyal": "SAR",
|
||||
"saudiske riyal": "SAR",
|
||||
"saudo arabijos rialas": "SAR",
|
||||
"saudski rial": "SAR",
|
||||
"saúdský rijál": "SAR",
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -1746,7 +1746,9 @@
|
|||
"custom": {
|
||||
"ui_lang": {
|
||||
"ca": "ca",
|
||||
"cs": "cs",
|
||||
"de-DE": "de-de",
|
||||
"el": "el",
|
||||
"en-CA": "en-ca",
|
||||
"en-GB": "en-gb",
|
||||
"en-US": "en-us",
|
||||
|
@ -1754,13 +1756,17 @@
|
|||
"fi-FI": "fi-fi",
|
||||
"fr-CA": "fr-ca",
|
||||
"fr-FR": "fr-fr",
|
||||
"hr": "hr",
|
||||
"hu": "hu",
|
||||
"it": "it",
|
||||
"ja-JP": "ja-jp",
|
||||
"nl": "nl",
|
||||
"pl": "pl",
|
||||
"pt-BR": "pt-br",
|
||||
"ro": "ro",
|
||||
"sq-AL": "sq-al",
|
||||
"sw-KE": "sw-ke"
|
||||
"sw-KE": "sw-ke",
|
||||
"tr": "tr"
|
||||
}
|
||||
},
|
||||
"data_type": "traits_v1",
|
||||
|
@ -1821,7 +1827,9 @@
|
|||
"custom": {
|
||||
"ui_lang": {
|
||||
"ca": "ca",
|
||||
"cs": "cs",
|
||||
"de-DE": "de-de",
|
||||
"el": "el",
|
||||
"en-CA": "en-ca",
|
||||
"en-GB": "en-gb",
|
||||
"en-US": "en-us",
|
||||
|
@ -1829,13 +1837,17 @@
|
|||
"fi-FI": "fi-fi",
|
||||
"fr-CA": "fr-ca",
|
||||
"fr-FR": "fr-fr",
|
||||
"hr": "hr",
|
||||
"hu": "hu",
|
||||
"it": "it",
|
||||
"ja-JP": "ja-jp",
|
||||
"nl": "nl",
|
||||
"pl": "pl",
|
||||
"pt-BR": "pt-br",
|
||||
"ro": "ro",
|
||||
"sq-AL": "sq-al",
|
||||
"sw-KE": "sw-ke"
|
||||
"sw-KE": "sw-ke",
|
||||
"tr": "tr"
|
||||
}
|
||||
},
|
||||
"data_type": "traits_v1",
|
||||
|
@ -1896,7 +1908,9 @@
|
|||
"custom": {
|
||||
"ui_lang": {
|
||||
"ca": "ca",
|
||||
"cs": "cs",
|
||||
"de-DE": "de-de",
|
||||
"el": "el",
|
||||
"en-CA": "en-ca",
|
||||
"en-GB": "en-gb",
|
||||
"en-US": "en-us",
|
||||
|
@ -1904,13 +1918,17 @@
|
|||
"fi-FI": "fi-fi",
|
||||
"fr-CA": "fr-ca",
|
||||
"fr-FR": "fr-fr",
|
||||
"hr": "hr",
|
||||
"hu": "hu",
|
||||
"it": "it",
|
||||
"ja-JP": "ja-jp",
|
||||
"nl": "nl",
|
||||
"pl": "pl",
|
||||
"pt-BR": "pt-br",
|
||||
"ro": "ro",
|
||||
"sq-AL": "sq-al",
|
||||
"sw-KE": "sw-ke"
|
||||
"sw-KE": "sw-ke",
|
||||
"tr": "tr"
|
||||
}
|
||||
},
|
||||
"data_type": "traits_v1",
|
||||
|
@ -1971,7 +1989,9 @@
|
|||
"custom": {
|
||||
"ui_lang": {
|
||||
"ca": "ca",
|
||||
"cs": "cs",
|
||||
"de-DE": "de-de",
|
||||
"el": "el",
|
||||
"en-CA": "en-ca",
|
||||
"en-GB": "en-gb",
|
||||
"en-US": "en-us",
|
||||
|
@ -1979,13 +1999,17 @@
|
|||
"fi-FI": "fi-fi",
|
||||
"fr-CA": "fr-ca",
|
||||
"fr-FR": "fr-fr",
|
||||
"hr": "hr",
|
||||
"hu": "hu",
|
||||
"it": "it",
|
||||
"ja-JP": "ja-jp",
|
||||
"nl": "nl",
|
||||
"pl": "pl",
|
||||
"pt-BR": "pt-br",
|
||||
"ro": "ro",
|
||||
"sq-AL": "sq-al",
|
||||
"sw-KE": "sw-ke"
|
||||
"sw-KE": "sw-ke",
|
||||
"tr": "tr"
|
||||
}
|
||||
},
|
||||
"data_type": "traits_v1",
|
||||
|
@ -6380,9 +6404,11 @@
|
|||
"wo": "wolof",
|
||||
"xh": "xhosa",
|
||||
"yi": "yiddish",
|
||||
"yo": "yoruba",
|
||||
"yue": "cantonese",
|
||||
"zh": "chinese",
|
||||
"zh_Hans": "mandarin"
|
||||
"zh_Hans": "mandarin",
|
||||
"zu": "zulu"
|
||||
},
|
||||
"regions": {}
|
||||
},
|
||||
|
@ -6515,6 +6541,7 @@
|
|||
"en-AU": "en_AU",
|
||||
"en-CA": "en_CA",
|
||||
"en-GB": "en-GB_GB",
|
||||
"en-ID": "en_ID",
|
||||
"en-IE": "en_IE",
|
||||
"en-IN": "en_IN",
|
||||
"en-MY": "en_MY",
|
||||
|
@ -6745,6 +6772,7 @@
|
|||
"din",
|
||||
"diq",
|
||||
"dsb",
|
||||
"dtp",
|
||||
"dty",
|
||||
"dv",
|
||||
"dz",
|
||||
|
@ -7841,6 +7869,7 @@
|
|||
"xh": "xhosa",
|
||||
"yi": "yiddish",
|
||||
"yo": "yoruba",
|
||||
"za": "zhuang",
|
||||
"zh": "chinese",
|
||||
"zu": "zulu"
|
||||
},
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
],
|
||||
"ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
|
||||
"versions": [
|
||||
"125.0",
|
||||
"124.0"
|
||||
"126.0",
|
||||
"125.0"
|
||||
]
|
||||
}
|
|
@ -1084,41 +1084,6 @@
|
|||
"symbol": "cr",
|
||||
"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": {
|
||||
"si_name": null,
|
||||
"symbol": "Zb",
|
||||
|
@ -1404,6 +1369,141 @@
|
|||
"symbol": "cm H₂O",
|
||||
"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": {
|
||||
"si_name": "Q11570",
|
||||
"symbol": "cwt",
|
||||
|
@ -4506,7 +4606,7 @@
|
|||
},
|
||||
"Q829073": {
|
||||
"si_name": "Q33680",
|
||||
"symbol": null,
|
||||
"symbol": "\"",
|
||||
"to_si_factor": 4.84813681109536e-06
|
||||
},
|
||||
"Q83216": {
|
||||
|
|
|
@ -133,7 +133,7 @@ def _get_result(item):
|
|||
'publisher': extract_text(eval_xpath(item, './/div[contains(@class, "text-sm")]')),
|
||||
'authors': [extract_text(eval_xpath(item, './/div[contains(@class, "italic")]'))],
|
||||
'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'
|
||||
title = extract_text(link)
|
||||
img_src = base_url + eval_xpath_getindex(result, './/img/@src', 0)
|
||||
res = {'url': url, 'title': title, 'img_src': img_src}
|
||||
thumbnail = base_url + eval_xpath_getindex(result, './/img/@src', 0)
|
||||
res = {'url': url, 'title': title, 'thumbnail': thumbnail}
|
||||
|
||||
results.append(res)
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ def response(resp):
|
|||
'url': result['trackViewUrl'],
|
||||
'title': result['trackName'],
|
||||
'content': result['description'],
|
||||
'img_src': result['artworkUrl100'],
|
||||
'thumbnail': result['artworkUrl100'],
|
||||
'publishedDate': parse(result['currentVersionReleaseDate']),
|
||||
'author': result['sellerName'],
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ def response(resp):
|
|||
"title": item['title'],
|
||||
"content": item['abstract'],
|
||||
"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),
|
||||
}
|
||||
)
|
||||
|
|
|
@ -68,7 +68,7 @@ def response(resp):
|
|||
|
||||
thumbnail = result.xpath('.//div[@class="art"]/img/@src')
|
||||
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]
|
||||
itemtype = extract_text(result.xpath('.//div[@class="itemtype"]')).lower()
|
||||
|
|
|
@ -80,8 +80,10 @@ def response(resp):
|
|||
|
||||
for entry in search_results.xpath('./result/doc'):
|
||||
content = "No description available"
|
||||
|
||||
url = ""
|
||||
title = ""
|
||||
date = datetime.now() # needed in case no dcdate is available for an item
|
||||
|
||||
for item in entry:
|
||||
if item.attrib["name"] == "dcdate":
|
||||
date = item.text
|
||||
|
|
|
@ -130,7 +130,7 @@ def response(resp):
|
|||
'url': url,
|
||||
'title': title,
|
||||
'content': content,
|
||||
'img_src': thumbnail,
|
||||
'thumbnail': thumbnail,
|
||||
'metadata': metadata,
|
||||
}
|
||||
)
|
||||
|
|
|
@ -40,9 +40,9 @@ def response(resp):
|
|||
json_resp = resp.json()
|
||||
|
||||
for result in json_resp['teaser']:
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
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']
|
||||
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'],
|
||||
'title': result['teaser']['title'],
|
||||
'content': result['teaser']['text'],
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
'publishedDate': publishedDate,
|
||||
'metadata': metadata,
|
||||
}
|
||||
|
|
|
@ -132,6 +132,7 @@ from lxml import html
|
|||
from searx import locales
|
||||
from searx.utils import (
|
||||
extract_text,
|
||||
extr,
|
||||
eval_xpath,
|
||||
eval_xpath_list,
|
||||
eval_xpath_getindex,
|
||||
|
@ -252,11 +253,7 @@ def response(resp):
|
|||
if brave_category in ('search', 'goggles'):
|
||||
return _parse_search(resp)
|
||||
|
||||
datastr = ""
|
||||
for line in resp.text.split("\n"):
|
||||
if "const data = " in line:
|
||||
datastr = line.replace("const data = ", "").strip()[:-1]
|
||||
break
|
||||
datastr = extr(resp.text, "const data = ", ";\n").strip()
|
||||
|
||||
json_data = js_variable_to_python(datastr)
|
||||
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='')
|
||||
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 = {
|
||||
'url': url,
|
||||
'title': extract_text(title_tag),
|
||||
'content': extract_text(content_tag),
|
||||
'publishedDate': _extract_published_date(pub_date_raw),
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
|
||||
video_tag = eval_xpath_getindex(
|
||||
|
@ -324,7 +321,7 @@ def _parse_search(resp):
|
|||
)
|
||||
item['publishedDate'] = _extract_published_date(pub_date_raw)
|
||||
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)
|
||||
|
||||
|
@ -351,7 +348,7 @@ def _parse_news(json_resp):
|
|||
'publishedDate': _extract_published_date(result['age']),
|
||||
}
|
||||
if result['thumbnail'] is not None:
|
||||
item['img_src'] = result['thumbnail']['src']
|
||||
item['thumbnail'] = result['thumbnail']['src']
|
||||
result_list.append(item)
|
||||
|
||||
return result_list
|
||||
|
|
|
@ -46,23 +46,20 @@ def response(resp):
|
|||
if recipe['submissionDate']:
|
||||
publishedDate = datetime.strptime(result['recipe']['submissionDate'][:19], "%Y-%m-%dT%H:%M:%S")
|
||||
|
||||
content = (
|
||||
"difficulity: "
|
||||
+ str(recipe['difficulty'])
|
||||
+ " / preparation time: "
|
||||
+ str(recipe['preparationTime'])
|
||||
+ "min / ingredient count: "
|
||||
+ str(recipe['ingredientCount'])
|
||||
)
|
||||
content = [
|
||||
f"Schwierigkeitsstufe (1-3): {recipe['difficulty']}",
|
||||
f"Zubereitungszeit: {recipe['preparationTime']}min",
|
||||
f"Anzahl der Zutaten: {recipe['ingredientCount']}",
|
||||
]
|
||||
|
||||
if recipe['subtitle']:
|
||||
content = f"{recipe['subtitle']} / {content}"
|
||||
content.insert(0, recipe['subtitle'])
|
||||
|
||||
results.append(
|
||||
{
|
||||
'url': recipe['siteUrl'],
|
||||
'title': recipe['title'],
|
||||
'content': content,
|
||||
'content': " | ".join(content),
|
||||
'thumbnail': recipe['previewImageUrlTemplate'].replace("<format>", thumbnail_format),
|
||||
'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", ""),
|
||||
'title': item.get("name"),
|
||||
'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"),
|
||||
'maintainer': item["publisher"].get("name"),
|
||||
'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)
|
||||
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:
|
||||
|
||||
# assemble table rows we need to scrap
|
||||
|
@ -379,7 +392,9 @@ def fetch_traits(engine_traits: EngineTraits):
|
|||
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
|
||||
|
||||
engine_traits.all_locale = 'wt-wt'
|
||||
|
@ -390,11 +405,9 @@ def fetch_traits(engine_traits: EngineTraits):
|
|||
if not resp.ok: # type: ignore
|
||||
print("ERROR: response from DuckDuckGo is not OK.")
|
||||
|
||||
pos = resp.text.find('regions:{') + 8 # type: ignore
|
||||
js_code = resp.text[pos:] # type: ignore
|
||||
pos = js_code.find('}') + 1
|
||||
regions = json.loads(js_code[:pos])
|
||||
js_code = extr(resp.text, 'regions:', ',snippetLengths')
|
||||
|
||||
regions = json.loads(js_code)
|
||||
for eng_tag, name in regions.items():
|
||||
|
||||
if eng_tag == 'wt-wt':
|
||||
|
@ -426,12 +439,9 @@ def fetch_traits(engine_traits: EngineTraits):
|
|||
|
||||
engine_traits.custom['lang_region'] = {}
|
||||
|
||||
pos = resp.text.find('languages:{') + 10 # type: ignore
|
||||
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)
|
||||
js_code = extr(resp.text, 'languages:', ',regions')
|
||||
|
||||
languages = js_variable_to_python(js_code)
|
||||
for eng_lang, name in languages.items():
|
||||
|
||||
if eng_lang == 'wt_WT':
|
||||
|
|
|
@ -47,8 +47,8 @@ def response(resp):
|
|||
+ ' - '
|
||||
+ 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
|
||||
|
|
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'],
|
||||
'title': hit['result']['full_title'],
|
||||
'content': content,
|
||||
'img_src': hit['result']['song_art_image_thumbnail_url'],
|
||||
'thumbnail': hit['result']['song_art_image_thumbnail_url'],
|
||||
}
|
||||
if timestamp:
|
||||
result.update({'publishedDate': datetime.fromtimestamp(timestamp)})
|
||||
|
@ -68,7 +68,7 @@ def parse_artist(hit):
|
|||
'url': hit['result']['url'],
|
||||
'title': hit['result']['name'],
|
||||
'content': '',
|
||||
'img_src': hit['result']['image_url'],
|
||||
'thumbnail': hit['result']['image_url'],
|
||||
}
|
||||
return result
|
||||
|
||||
|
@ -84,7 +84,7 @@ def parse_album(hit):
|
|||
return {
|
||||
'url': res['url'],
|
||||
'title': res['full_title'],
|
||||
'img_src': res['cover_art_url'],
|
||||
'thumbnail': res['cover_art_url'],
|
||||
'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'),
|
||||
'title': item.get('full_name'),
|
||||
'content': ' / '.join(content),
|
||||
'img_src': item.get('owner', {}).get('avatar_url'),
|
||||
'thumbnail': item.get('owner', {}).get('avatar_url'),
|
||||
'package_name': item.get('name'),
|
||||
# 'version': item.get('updated_at'),
|
||||
'maintainer': item.get('owner', {}).get('login'),
|
||||
|
|
|
@ -48,7 +48,7 @@ def response(resp):
|
|||
{
|
||||
'url': base_url + extract_text(eval_xpath(result, url_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)),
|
||||
'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")]'
|
||||
title_xpath = './/a/h3[1]'
|
||||
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
|
||||
# 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)
|
||||
continue
|
||||
|
||||
img_src = content_nodes[0].xpath('.//img/@src')
|
||||
if img_src:
|
||||
img_src = img_src[0]
|
||||
if img_src.startswith('data:image'):
|
||||
thumbnail = content_nodes[0].xpath('.//img/@src')
|
||||
if thumbnail:
|
||||
thumbnail = thumbnail[0]
|
||||
if thumbnail.startswith('data:image'):
|
||||
img_id = content_nodes[0].xpath('.//img/@id')
|
||||
if img_id:
|
||||
img_src = data_image_map.get(img_id[0])
|
||||
thumbnail = data_image_map.get(img_id[0])
|
||||
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
|
||||
logger.error(e, exc_info=True)
|
||||
|
|
|
@ -165,14 +165,14 @@ def response(resp):
|
|||
# "https://lh3.googleusercontent.com/DjhQh7DMszk.....z=-p-h100-w100"
|
||||
# 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(
|
||||
{
|
||||
'url': href,
|
||||
'title': title,
|
||||
'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]'))
|
||||
metadata = extract_text(eval_xpath(div_2, './div[@class]'))
|
||||
img = eval_xpath(div_1, './/img')[0]
|
||||
img_src = img.get('src')
|
||||
thumbnail = img.get('src')
|
||||
results.append(
|
||||
{
|
||||
"url": url,
|
||||
"title": title,
|
||||
"content": sec_name,
|
||||
"img_src": img_src,
|
||||
"thumbnail": thumbnail,
|
||||
'metadata': metadata,
|
||||
'template': 'videos.html',
|
||||
}
|
||||
|
|
|
@ -107,8 +107,8 @@ def response(resp):
|
|||
# parse results
|
||||
for result in eval_xpath_list(dom, '//div[contains(@class, "g ")]'):
|
||||
|
||||
img_src = eval_xpath_getindex(result, './/img/@src', 0, None)
|
||||
if img_src is None:
|
||||
thumbnail = eval_xpath_getindex(result, './/img/@src', 0, None)
|
||||
if thumbnail is None:
|
||||
continue
|
||||
|
||||
title = extract_text(eval_xpath_getindex(result, './/a/h3[1]', 0))
|
||||
|
@ -124,7 +124,7 @@ def response(resp):
|
|||
'title': title,
|
||||
'content': content,
|
||||
'author': pub_info,
|
||||
'thumbnail': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
'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,
|
||||
"url": href_base.format(category=categ, entry_id=entry_id),
|
||||
"content": content,
|
||||
"img_src": image_url,
|
||||
"thumbnail": image_url,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -91,7 +91,7 @@ def _get_communities(json):
|
|||
'url': result['community']['actor_id'],
|
||||
'title': result['community']['title'],
|
||||
'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'),
|
||||
'metadata': metadata,
|
||||
}
|
||||
|
@ -120,9 +120,9 @@ def _get_posts(json):
|
|||
for result in json["posts"]:
|
||||
user = result['creator'].get('display_name', result['creator']['name'])
|
||||
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
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 = (
|
||||
f"▲ {result['counts']['upvotes']} ▼ {result['counts']['downvotes']}"
|
||||
|
@ -140,7 +140,7 @@ def _get_posts(json):
|
|||
'url': result['post']['ap_id'],
|
||||
'title': result['post']['name'],
|
||||
'content': content,
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
'publishedDate': datetime.strptime(result['post']['published'][:19], '%Y-%m-%dT%H:%M:%S'),
|
||||
'metadata': metadata,
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ def response(resp):
|
|||
'url': r_url,
|
||||
'title': result['name'],
|
||||
'iframe_src': iframe_src.format(url=r_url),
|
||||
'img_src': result['pictures']['medium'],
|
||||
'thumbnail': result['pictures']['medium'],
|
||||
'publishedDate': publishedDate,
|
||||
'content': result['user']['name'],
|
||||
}
|
||||
|
|
|
@ -104,11 +104,11 @@ def response(resp):
|
|||
item['metadata'] = html_to_text(result.get('meta_short', ''))
|
||||
|
||||
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:
|
||||
item['url'] = result['url']
|
||||
item['content'] = ', '.join([result['class'], result['info'], result['more']])
|
||||
item['img_src'] = result['image']
|
||||
item['thumbnail'] = result['image']
|
||||
|
||||
results.append(item)
|
||||
|
||||
|
|
|
@ -178,7 +178,7 @@ def response(resp):
|
|||
continue
|
||||
|
||||
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)
|
||||
data = get_data(result, user_language, link_keys)
|
||||
|
||||
|
@ -191,7 +191,7 @@ def response(resp):
|
|||
'url': url,
|
||||
'osm': osm,
|
||||
'geojson': geojson,
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
'links': links,
|
||||
'data': data,
|
||||
'type': get_tag_label(result.get('category'), result.get('type', ''), user_language),
|
||||
|
|
|
@ -65,18 +65,18 @@ def construct_body(result):
|
|||
page='',
|
||||
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:
|
||||
content = None
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
|
||||
# construct url for preview image
|
||||
try:
|
||||
img_src = pdbe_preview_url.format(pdb_id=result['pdb_id'])
|
||||
thumbnail = pdbe_preview_url.format(pdb_id=result['pdb_id'])
|
||||
except KeyError:
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
|
||||
return [title, content, img_src]
|
||||
return [title, content, thumbnail]
|
||||
|
||||
|
||||
def response(resp):
|
||||
|
@ -106,16 +106,16 @@ def response(resp):
|
|||
)
|
||||
|
||||
# obsoleted entries don't have preview images
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
else:
|
||||
title, content, img_src = construct_body(result)
|
||||
title, content, thumbnail = construct_body(result)
|
||||
|
||||
results.append(
|
||||
{
|
||||
'url': pdbe_entry_url.format(pdb_id=result['pdb_id']),
|
||||
'title': title,
|
||||
'content': content,
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -151,7 +151,7 @@ def response(resp):
|
|||
|
||||
elif piped_filter == 'music_songs':
|
||||
item["template"] = "default.html"
|
||||
item["img_src"] = result.get("thumbnail", "")
|
||||
item["thumbnail"] = result.get("thumbnail", "")
|
||||
item["content"] = result.get("uploaderName", "") or ""
|
||||
|
||||
results.append(item)
|
||||
|
|
|
@ -162,7 +162,7 @@ def parse_search_query(json_results):
|
|||
result = {
|
||||
'url': item['link'],
|
||||
'title': item['title'],
|
||||
'img_src': item['image'],
|
||||
'thumbnail': item['image'],
|
||||
'content': '',
|
||||
'metadata': item.get('source'),
|
||||
}
|
||||
|
@ -244,7 +244,7 @@ def response(resp):
|
|||
'url': item.get('link'),
|
||||
'content': '',
|
||||
'metadata': ' / '.join(metadata),
|
||||
'img_src': item.get('image'),
|
||||
'thumbnail': item.get('image'),
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -257,7 +257,7 @@ def response(resp):
|
|||
'url': item.get('link'),
|
||||
'content': item.get('description', ''),
|
||||
'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:
|
||||
pub_date = datetime.fromtimestamp(pub_date)
|
||||
news_media = item.get('media', [])
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
if news_media:
|
||||
img_src = news_media[0].get('pict', {}).get('url', None)
|
||||
thumbnail = news_media[0].get('pict', {}).get('url', None)
|
||||
results.append(
|
||||
{
|
||||
'title': title,
|
||||
'url': res_url,
|
||||
'publishedDate': pub_date,
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -312,13 +312,12 @@ def fetch_traits(engine_traits: EngineTraits):
|
|||
# pylint: disable=import-outside-toplevel
|
||||
from searx import network
|
||||
from searx.locales import region_tag
|
||||
from searx.utils import extr
|
||||
|
||||
resp = network.get(about['website'])
|
||||
text = resp.text
|
||||
text = text[text.find('INITIAL_PROPS') :]
|
||||
text = text[text.find('{') : text.find('</script>')]
|
||||
json_string = extr(resp.text, 'INITIAL_PROPS = ', '</script>')
|
||||
|
||||
q_initial_props = loads(text)
|
||||
q_initial_props = loads(json_string)
|
||||
q_locales = q_initial_props.get('locales')
|
||||
eng_tag_list = set()
|
||||
|
||||
|
|
|
@ -114,7 +114,7 @@ def response(resp):
|
|||
{
|
||||
'url': url,
|
||||
'title': result['name'],
|
||||
'img_src': result.get('favicon', '').replace("http://", "https://"),
|
||||
'thumbnail': result.get('favicon', '').replace("http://", "https://"),
|
||||
'content': ' | '.join(content),
|
||||
'metadata': ' | '.join(metadata),
|
||||
'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']:
|
||||
item['img_src'] = url
|
||||
item['thumbnail'] = url
|
||||
|
||||
results.append(item)
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ base_url = "https://www.rottentomatoes.com"
|
|||
results_xpath = "//search-page-media-row"
|
||||
url_xpath = "./a[1]/@href"
|
||||
title_xpath = "./a/img/@alt"
|
||||
img_src_xpath = "./a/img/@src"
|
||||
thumbnail_xpath = "./a/img/@src"
|
||||
release_year_xpath = "concat('From ', string(./@releaseyear))"
|
||||
score_xpath = "concat('Score: ', string(./@tomatometerscore))"
|
||||
cast_xpath = "concat('Starring ', string(./@cast))"
|
||||
|
@ -52,7 +52,7 @@ def response(resp):
|
|||
'url': extract_text(eval_xpath(result, url_xpath)),
|
||||
'title': extract_text(eval_xpath(result, title_xpath)),
|
||||
'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'],
|
||||
'title': result['label'],
|
||||
# 'thumbnail': thumbnail,
|
||||
'img_src': thumbnail,
|
||||
'thumbnail': thumbnail,
|
||||
'content': html_to_text(content),
|
||||
}
|
||||
)
|
||||
|
|
|
@ -94,9 +94,9 @@ def response(resp):
|
|||
'publishedDate': parser.parse(result['last_modified']),
|
||||
'iframe_src': "https://w.soundcloud.com/player/?url=" + uri,
|
||||
}
|
||||
img_src = result['artwork_url'] or result['user']['avatar_url']
|
||||
if img_src:
|
||||
res['img_src'] = img_src
|
||||
thumbnail = result['artwork_url'] or result['user']['avatar_url']
|
||||
if thumbnail:
|
||||
res['thumbnail'] = thumbnail
|
||||
results.append(res)
|
||||
|
||||
return results
|
||||
|
|
|
@ -78,6 +78,7 @@ Startpage's category (for Web-search, News, Videos, ..) is set by
|
|||
yet implemented.
|
||||
|
||||
"""
|
||||
# pylint: disable=too-many-statements
|
||||
|
||||
from typing import TYPE_CHECKING
|
||||
from collections import OrderedDict
|
||||
|
@ -88,7 +89,7 @@ from datetime import datetime, timedelta
|
|||
|
||||
import dateutil.parser
|
||||
import lxml.html
|
||||
import babel
|
||||
import babel.localedata
|
||||
|
||||
from searx.utils import extract_text, eval_xpath, gen_useragent
|
||||
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
|
||||
# ads xpath //div[@id="results"]/div[@id="sponsored"]//div[@class="result"]
|
||||
# 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"]'
|
||||
"""XPath of Startpage's origin search form
|
||||
|
||||
|
@ -334,8 +332,8 @@ def _response_cat_web(dom):
|
|||
results = []
|
||||
|
||||
# parse results
|
||||
for result in eval_xpath(dom, results_xpath):
|
||||
links = eval_xpath(result, link_xpath)
|
||||
for result in eval_xpath(dom, '//div[@class="w-gl"]/div[contains(@class, "result")]'):
|
||||
links = eval_xpath(result, './/a[contains(@class, "result-title result-link")]')
|
||||
if not links:
|
||||
continue
|
||||
link = links[0]
|
||||
|
@ -349,12 +347,9 @@ def _response_cat_web(dom):
|
|||
if re.match(r"^http(s|)://(www\.)?startpage\.com/do/search\?.*$", url):
|
||||
continue
|
||||
|
||||
title = extract_text(link)
|
||||
|
||||
if eval_xpath(result, content_xpath):
|
||||
content: str = extract_text(eval_xpath(result, content_xpath)) # type: ignore
|
||||
else:
|
||||
content = ''
|
||||
title = extract_text(eval_xpath(link, 'h2'))
|
||||
content = eval_xpath(result, './/p[contains(@class, "description")]')
|
||||
content = extract_text(content, allow_none=True) or ''
|
||||
|
||||
published_date = None
|
||||
|
||||
|
@ -445,10 +440,12 @@ def fetch_traits(engine_traits: EngineTraits):
|
|||
|
||||
# get the native name of every language known by babel
|
||||
|
||||
for lang_code in filter(
|
||||
lambda lang_code: lang_code.find('_') == -1, babel.localedata.locale_identifiers() # type: ignore
|
||||
):
|
||||
native_name = babel.Locale(lang_code).get_language_name().lower() # type: ignore
|
||||
for lang_code in filter(lambda lang_code: lang_code.find('_') == -1, babel.localedata.locale_identifiers()):
|
||||
native_name = babel.Locale(lang_code).get_language_name()
|
||||
if not native_name:
|
||||
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
|
||||
catalog_engine2code[native_name] = lang_code
|
||||
|
||||
|
|
|
@ -7,6 +7,8 @@ from urllib.parse import urlencode
|
|||
from json import loads
|
||||
from dateutil import parser
|
||||
|
||||
from searx.utils import extr
|
||||
|
||||
# about
|
||||
about = {
|
||||
"website": 'https://vimeo.com/',
|
||||
|
@ -23,7 +25,7 @@ paging = True
|
|||
|
||||
# search-url
|
||||
base_url = 'https://vimeo.com/'
|
||||
search_url = base_url + '/search/page:{pageno}?{query}'
|
||||
search_url = base_url + 'search/page:{pageno}?{query}'
|
||||
|
||||
|
||||
# do search-request
|
||||
|
@ -36,9 +38,8 @@ def request(query, params):
|
|||
# get response from search-request
|
||||
def response(resp):
|
||||
results = []
|
||||
data_start_pos = resp.text.find('{"filtered"')
|
||||
data_end_pos = resp.text.find(';\n', data_start_pos + 1)
|
||||
data = loads(resp.text[data_start_pos:data_end_pos])
|
||||
|
||||
data = loads(extr(resp.text, 'var data = ', ';\n'))
|
||||
|
||||
# parse results
|
||||
for result in data['filtered']['data']:
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
|
||||
"""
|
||||
|
||||
import datetime
|
||||
|
||||
from urllib.parse import urlencode
|
||||
|
||||
# about
|
||||
|
@ -14,6 +16,8 @@ about = {
|
|||
"require_api_key": False,
|
||||
"results": 'JSON',
|
||||
}
|
||||
categories = ['images']
|
||||
search_type = 'images'
|
||||
|
||||
base_url = "https://commons.wikimedia.org"
|
||||
search_prefix = (
|
||||
|
@ -29,17 +33,29 @@ search_prefix = (
|
|||
paging = True
|
||||
number_of_results = 10
|
||||
|
||||
search_types = {
|
||||
'images': 'bitmap|drawing',
|
||||
'videos': 'video',
|
||||
'audio': 'audio',
|
||||
'files': 'multimedia|office|archive|3d',
|
||||
}
|
||||
|
||||
|
||||
def request(query, params):
|
||||
language = 'en'
|
||||
if params['language'] != 'all':
|
||||
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 = {
|
||||
'uselang': language,
|
||||
'gsrlimit': number_of_results,
|
||||
'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=':|')}"
|
||||
|
@ -52,7 +68,6 @@ def response(resp):
|
|||
|
||||
if not json.get("query", {}).get("pages"):
|
||||
return results
|
||||
|
||||
for item in json["query"]["pages"].values():
|
||||
imageinfo = item["imageinfo"][0]
|
||||
title = item["title"].replace("File:", "").rsplit('.', 1)[0]
|
||||
|
@ -60,11 +75,28 @@ def response(resp):
|
|||
'url': imageinfo["descriptionurl"],
|
||||
'title': title,
|
||||
'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)
|
||||
|
||||
return results
|
||||
|
|
|
@ -762,7 +762,8 @@ def debug_explain_wikidata_query(query, method='GET'):
|
|||
|
||||
def init(engine_settings=None): # pylint: disable=unused-argument
|
||||
# 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_property_names = []
|
||||
|
|
|
@ -135,7 +135,7 @@ title_xpath = None
|
|||
'''`XPath selector`_ of result's ``title``.'''
|
||||
|
||||
thumbnail_xpath = False
|
||||
'''`XPath selector`_ of result's ``img_src``.'''
|
||||
'''`XPath selector`_ of result's ``thumbnail``.'''
|
||||
|
||||
suggestion_xpath = ''
|
||||
'''`XPath selector`_ of result's ``suggestion``.'''
|
||||
|
@ -266,7 +266,7 @@ def response(resp): # pylint: disable=too-many-branches
|
|||
if thumbnail_xpath:
|
||||
thumbnail_xpath_result = eval_xpath_list(result, thumbnail_xpath)
|
||||
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
|
||||
if cached_xpath:
|
||||
|
|
|
@ -22,20 +22,26 @@ The engine has the following (additional) settings:
|
|||
- :py:obj:`search_mode`
|
||||
- :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
|
||||
|
||||
- name: yacy
|
||||
engine: yacy
|
||||
categories: general
|
||||
search_type: text
|
||||
base_url: https://yacy.searchlab.eu
|
||||
shortcut: ya
|
||||
base_url:
|
||||
- https://yacy.searchlab.eu
|
||||
- https://search.lomig.me
|
||||
- https://yacy.ecosys.eu
|
||||
- https://search.webproject.link
|
||||
|
||||
- name: yacy images
|
||||
engine: yacy
|
||||
categories: images
|
||||
search_type: image
|
||||
base_url: https://yacy.searchlab.eu
|
||||
shortcut: yai
|
||||
disabled: true
|
||||
|
||||
|
@ -45,6 +51,9 @@ Implementations
|
|||
"""
|
||||
# pylint: disable=fixme
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import random
|
||||
from json import loads
|
||||
from urllib.parse import urlencode
|
||||
from dateutil import parser
|
||||
|
@ -87,15 +96,10 @@ search_type = 'text'
|
|||
``video`` are not yet implemented (Pull-Requests are welcome).
|
||||
"""
|
||||
|
||||
# search-url
|
||||
base_url = 'https://yacy.searchlab.eu'
|
||||
search_url = (
|
||||
'/yacysearch.json?{query}'
|
||||
'&startRecord={offset}'
|
||||
'&maximumRecords={limit}'
|
||||
'&contentdom={search_type}'
|
||||
'&resource={resource}'
|
||||
)
|
||||
base_url: list | str = 'https://yacy.searchlab.eu'
|
||||
"""The value is an URL or a list of URLs. In the latter case instance will be
|
||||
selected randomly.
|
||||
"""
|
||||
|
||||
|
||||
def init(_):
|
||||
|
@ -108,23 +112,34 @@ def init(_):
|
|||
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):
|
||||
|
||||
offset = (params['pageno'] - 1) * number_of_results
|
||||
|
||||
params['url'] = base_url + search_url.format(
|
||||
query=urlencode({'query': query}),
|
||||
offset=offset,
|
||||
limit=number_of_results,
|
||||
search_type=search_type,
|
||||
resource=search_mode,
|
||||
)
|
||||
|
||||
if http_digest_auth_user and http_digest_auth_pass:
|
||||
params['auth'] = DigestAuth(http_digest_auth_user, http_digest_auth_pass)
|
||||
args = {
|
||||
'query': query,
|
||||
'startRecord': offset,
|
||||
'maximumRecords': number_of_results,
|
||||
'contentdom': search_type,
|
||||
'resource': search_mode,
|
||||
}
|
||||
|
||||
# add language tag if specified
|
||||
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
|
||||
|
||||
|
|
|
@ -77,9 +77,9 @@ def response(resp):
|
|||
url = parse_url(url)
|
||||
title = extract_text(result.xpath('.//h4/a'))
|
||||
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")]'))
|
||||
ago = AGO_RE.search(pub_date)
|
||||
|
|
|
@ -7,6 +7,8 @@ from functools import reduce
|
|||
from json import loads, dumps
|
||||
from urllib.parse import quote_plus
|
||||
|
||||
from searx.utils import extr
|
||||
|
||||
# about
|
||||
about = {
|
||||
"website": 'https://www.youtube.com/',
|
||||
|
@ -109,8 +111,8 @@ def parse_next_page_response(response_text):
|
|||
|
||||
def parse_first_page_response(response_text):
|
||||
results = []
|
||||
results_data = response_text[response_text.find('ytInitialData') :]
|
||||
results_data = results_data[results_data.find('{') : results_data.find(';</script>')]
|
||||
results_data = extr(response_text, 'ytInitialData = ', ';</script>')
|
||||
|
||||
results_json = loads(results_data) if results_data else {}
|
||||
sections = (
|
||||
results_json.get('contents', {})
|
||||
|
|
|
@ -52,11 +52,11 @@ def response(resp):
|
|||
if description is not None:
|
||||
content = markdown_to_text(description['text'])
|
||||
|
||||
img_src = None
|
||||
thumbnail = None
|
||||
if result['display']['images']:
|
||||
img_src = result['display']['images'][0]
|
||||
thumbnail = result['display']['images'][0]
|
||||
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']
|
||||
if 'www.yummly.com/private' in url:
|
||||
|
@ -67,7 +67,7 @@ def response(resp):
|
|||
'url': url,
|
||||
'title': result['display']['displayName'],
|
||||
'content': content,
|
||||
'img_src': img_src,
|
||||
'thumbnail': thumbnail,
|
||||
'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],
|
||||
"publisher": _text(item, './/a[@title="Publisher"]'),
|
||||
"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")]')
|
||||
if year:
|
||||
result["publishedDate"] = datetime.strptime(year, '%Y')
|
||||
|
|
|
@ -17,6 +17,8 @@ Usage in a Flask app route:
|
|||
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
__all__ = ['InfoPage', 'InfoPageSet']
|
||||
|
||||
import os
|
||||
|
@ -37,6 +39,16 @@ from ..locales import LOCALE_NAMES
|
|||
|
||||
logger = logging.getLogger('searx.infopage')
|
||||
_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:
|
||||
|
|
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
|
||||
"""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"
|
||||
description = gettext("Convert between units")
|
||||
default_on = True
|
||||
|
||||
plugin_id = "unit_converter"
|
||||
preference_section = "general"
|
||||
|
||||
CONVERT_KEYWORDS = ["in", "to", "as"]
|
||||
|
||||
|
||||
def _convert(from_value, source_si_factor, target_si_factor):
|
||||
return from_value * source_si_factor / target_si_factor
|
||||
# inspired from https://stackoverflow.com/a/42475086
|
||||
RE_MEASURE = r'''
|
||||
(?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):
|
||||
if len(splitted_query) != 2 or splitted_query[0].strip() == "" or splitted_query[1].strip() == "":
|
||||
ADDITIONAL_UNITS = [
|
||||
{
|
||||
"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
|
||||
|
||||
from_value = ""
|
||||
from_unit_key = ""
|
||||
|
||||
# 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'):
|
||||
measured = re.match(RE_MEASURE, from_query, re.VERBOSE)
|
||||
if not (measured and measured.group('number'), measured.group('unit')):
|
||||
return
|
||||
|
||||
result = _convert(float(from_value), from_unit['to_si_factor'], to_unit['to_si_factor'])
|
||||
search.result_container.answers['conversion'] = {'answer': f"{result:g} {to_unit['symbol']}"}
|
||||
# Symbols are not unique, if there are several hits for the from-unit, then
|
||||
# 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):
|
||||
|
@ -69,8 +256,8 @@ def post_search(_request, search):
|
|||
for query_part in query_parts:
|
||||
for keyword in CONVERT_KEYWORDS:
|
||||
if query_part == keyword:
|
||||
keyword_split = query.split(keyword, 1)
|
||||
_parse_text_and_convert(search, keyword_split)
|
||||
from_query, to_query = query.split(keyword, 1)
|
||||
_parse_text_and_convert(search, from_query.strip(), to_query.strip())
|
||||
return True
|
||||
|
||||
return True
|
||||
|
|
|
@ -430,21 +430,38 @@ class ResultContainer:
|
|||
"""Returns the average of results number, returns zero if the average
|
||||
result number is smaller than the actual result count."""
|
||||
|
||||
resultnum_sum = sum(self._number_of_results)
|
||||
if not resultnum_sum or not self._number_of_results:
|
||||
return 0
|
||||
with self._lock:
|
||||
if not self._closed:
|
||||
logger.error("call to ResultContainer.number_of_results before ResultContainer.close")
|
||||
return 0
|
||||
|
||||
average = int(resultnum_sum / len(self._number_of_results))
|
||||
if average < self.results_length():
|
||||
average = 0
|
||||
return average
|
||||
resultnum_sum = sum(self._number_of_results)
|
||||
if not resultnum_sum or not self._number_of_results:
|
||||
return 0
|
||||
|
||||
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):
|
||||
if engines[engine_name].display_error_messages:
|
||||
self.unresponsive_engines.add(UnresponsiveEngine(engine_name, error_type, suspended))
|
||||
with self._lock:
|
||||
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):
|
||||
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):
|
||||
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
|
||||
# # these plugins are disabled if nothing is configured ..
|
||||
# - 'Hostname replace' # see hostname_replace configuration below
|
||||
# - 'Calculator plugin'
|
||||
# - 'Open Access DOI rewrite'
|
||||
# - 'Tor check plugin'
|
||||
# # Read the docs before activate: auto-detection of the language could be
|
||||
|
@ -726,6 +727,11 @@ engines:
|
|||
shortcut: fd
|
||||
disabled: true
|
||||
|
||||
- name: findthatmeme
|
||||
engine: findthatmeme
|
||||
shortcut: ftm
|
||||
disabled: true
|
||||
|
||||
- name: flickr
|
||||
categories: images
|
||||
shortcut: fl
|
||||
|
@ -800,26 +806,18 @@ engines:
|
|||
engine: github
|
||||
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
|
||||
engine: json_engine
|
||||
search_url: https://codeberg.org/api/v1/repos/search?q={query}&limit=10
|
||||
url_query: html_url
|
||||
title_query: name
|
||||
content_query: description
|
||||
categories: [it, repos]
|
||||
# https://docs.searxng.org/dev/engines/online/gitea.html
|
||||
engine: gitea
|
||||
base_url: https://codeberg.org
|
||||
shortcut: cb
|
||||
disabled: true
|
||||
about:
|
||||
website: https://codeberg.org/
|
||||
wikidata_id:
|
||||
official_api_documentation: https://try.gitea.io/api/swagger
|
||||
use_official_api: false
|
||||
require_api_key: false
|
||||
results: JSON
|
||||
|
||||
- name: gitea.com
|
||||
engine: gitea
|
||||
base_url: https://gitea.com
|
||||
shortcut: gitea
|
||||
disabled: true
|
||||
|
||||
- name: goodreads
|
||||
engine: goodreads
|
||||
|
@ -926,6 +924,20 @@ engines:
|
|||
shortcut: hn
|
||||
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
|
||||
engine: xpath
|
||||
search_url: https://hoogle.haskell.org/?hoogle={query}
|
||||
|
@ -1907,6 +1919,28 @@ engines:
|
|||
engine: wikicommons
|
||||
shortcut: wc
|
||||
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
|
||||
|
||||
- name: wolframalpha
|
||||
|
@ -2058,7 +2092,11 @@ engines:
|
|||
engine: yacy
|
||||
categories: general
|
||||
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
|
||||
disabled: true
|
||||
# required if you aren't using HTTPS for your local yacy instance
|
||||
|
@ -2071,7 +2109,6 @@ engines:
|
|||
engine: yacy
|
||||
categories: images
|
||||
search_type: image
|
||||
base_url: https://yacy.searchlab.eu
|
||||
shortcut: yai
|
||||
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
|
||||
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);
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
||||
&.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;
|
||||
}
|
||||
img.thumbnail {
|
||||
.ltr-float-left();
|
||||
padding-top: 0.6rem;
|
||||
.ltr-padding-right(1rem);
|
||||
width: 7rem;
|
||||
height: unset; // remove heigth value that was needed for lazy loading
|
||||
}
|
||||
|
||||
.break {
|
||||
|
@ -394,6 +382,16 @@ article[data-vim-selected].category-social {
|
|||
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 {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
|
|
@ -25,8 +25,7 @@
|
|||
<span class="url_o{{loop.index}}"><span class="url_i{{loop.index}}">{{- part -}}</span></span>
|
||||
{%- endfor %}
|
||||
{{- 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" 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 -%}
|
||||
<h3>{{ result_link(result.url, result.title|safe) }}</h3>
|
||||
{%- endmacro -%}
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
{%- macro plugin_preferences(section) -%}
|
||||
{%- 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>{{- '' -}}
|
||||
<legend>{{ _(plugin.name) }}</legend>{{- '' -}}
|
||||
<div class="value">
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
{%- endif -%}
|
||||
</div>
|
||||
{%- endif -%}
|
||||
{%- if result.homepage or result.source_code_url -%}
|
||||
{%- if result.homepage or result.source_code_url or result.links -%}
|
||||
<div class="result_project">{{- '' -}}
|
||||
<span>{{ _('Project') }}</span>
|
||||
<span>{{- '' -}}
|
||||
|
@ -58,6 +58,14 @@
|
|||
{%- if result.source_code_url -%}
|
||||
<a href="{{ result.source_code_url }}" target="_blank">{{ _('Source code') }}</a>
|
||||
{%- 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>{{- '' -}}
|
||||
</div>
|
||||
{%- endif -%}
|
||||
|
|
|
@ -24,8 +24,12 @@
|
|||
{%- for answer in answers.values() -%}
|
||||
<div class="answer">
|
||||
<span>{{ answer.answer }}</span>
|
||||
{% if answer.url -%}
|
||||
<a href="{{ answer.url }}" class="answer-url">{{ urlparse(answer.url).hostname }}</a>
|
||||
{%- if answer.url -%}
|
||||
<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 -%}
|
||||
</div>
|
||||
{%- endfor -%}
|
||||
|
|
Binary file not shown.
|
@ -13,7 +13,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\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"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
|
@ -488,6 +488,10 @@ msgstr "boekgradering"
|
|||
msgid "File quality"
|
||||
msgstr "Lêer kwaliteit"
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different 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"
|
||||
msgstr "Verwyder spoorsnyersargumente van die teruggestuurde URL"
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr "Bladsy nie gevind"
|
||||
|
@ -750,27 +758,27 @@ msgstr "Koekies"
|
|||
msgid "Answers"
|
||||
msgstr "Antwoord"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Aantal resultate"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Probeer soek na:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "Terug na bo"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "Vorige bladsy"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "Volgende bladsy"
|
||||
|
||||
|
@ -797,7 +805,7 @@ msgstr "soek"
|
|||
msgid "There is currently no data available. "
|
||||
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
|
||||
msgid "Engine name"
|
||||
msgstr "Enjin naam"
|
||||
|
@ -810,12 +818,12 @@ msgstr "Tellings"
|
|||
msgid "Result count"
|
||||
msgstr "Resultaattelling"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "Reaksietyd"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "Betroubaarheid"
|
||||
|
@ -934,7 +942,7 @@ msgstr "Outo-bespeur"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "VeiligeSoek"
|
||||
|
@ -955,7 +963,7 @@ msgid "None"
|
|||
msgstr "Geen"
|
||||
|
||||
#: 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"
|
||||
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."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Laat toe"
|
||||
|
||||
|
@ -1141,19 +1149,27 @@ msgstr ""
|
|||
"Hierdie oortjie bestaan nie in die gebruikerskoppelvlak nie, maar jy kan "
|
||||
"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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Ondersteun gekose taal"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "Gewig"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "Maks tyd"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -20,7 +20,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
|
@ -494,6 +494,10 @@ msgstr "تقييم الكتاب"
|
|||
msgid "File quality"
|
||||
msgstr "جودة الملف"
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "يحول السلسلة إلى ملخص التجزئة."
|
||||
|
@ -574,6 +578,10 @@ msgstr ""
|
|||
"إزالة وسيطات التتبع من \"URL\" الذي تم إرجاعه , إزالة وسيطات التتبع من "
|
||||
"محدد موقع الموارد الموحد الذي تم إرجاعه"
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr "تعذر العثور على الصفحة"
|
||||
|
@ -749,27 +757,27 @@ msgstr "كعكات الكوكيز"
|
|||
msgid "Answers"
|
||||
msgstr "الإجابات"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "حصيلة نتائج البحث"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "معلومات"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "حاول البحث عن :"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "العودة للأعلى"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "الصفحة السابقة"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "الصفحة التالية"
|
||||
|
||||
|
@ -796,7 +804,7 @@ msgstr "بحث"
|
|||
msgid "There is currently no data available. "
|
||||
msgstr "لم يتم العثور على أية بيانات في الوقت الحالي. "
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:18
|
||||
#: searx/templates/simple/preferences/engines.html:24
|
||||
#: searx/templates/simple/stats.html:25
|
||||
msgid "Engine name"
|
||||
msgstr "إسم المحرك"
|
||||
|
@ -809,12 +817,12 @@ msgstr "نتائج"
|
|||
msgid "Result count"
|
||||
msgstr "نتيجة العد"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "مدة الإستجابة"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "إمكانية الإشتغال"
|
||||
|
@ -933,7 +941,7 @@ msgstr "الاكتشاف التلقائي"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "البحث المؤمَّن"
|
||||
|
@ -954,7 +962,7 @@ msgid "None"
|
|||
msgstr "لا شيء"
|
||||
|
||||
#: 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"
|
||||
msgstr "الفترة"
|
||||
|
||||
|
@ -1023,7 +1031,7 @@ msgid "Go back to the previous page using the previous page button."
|
|||
msgstr "إرجع إلى الصفحة السابقة باستخدام زر العودة."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "تمكين"
|
||||
|
||||
|
@ -1140,19 +1148,27 @@ msgstr ""
|
|||
"علامة التبويب هذه غير موجودة في واجهة المستخدم ، ولكن يمكنك البحث في هذه "
|
||||
"المحركات من خلال !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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "يدعم اللغة المختارة"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "وَزن"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "أقصى مدّة"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -15,8 +15,8 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
||||
"PO-Revision-Date: 2024-03-22 07:09+0000\n"
|
||||
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||
"PO-Revision-Date: 2024-04-28 18:18+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"Language: bg\n"
|
||||
|
@ -76,7 +76,7 @@ msgstr "радио"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "телевизия"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -201,12 +201,12 @@ msgstr "Вечер"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "Усеща се като"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "Влажност"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
|
@ -236,47 +236,47 @@ msgstr "Обяд"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Налягане"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Изгрев"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Залез"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Температура"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "UV индекс"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Видимост"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Вятър"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "Абонати"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "Публикации"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
|
@ -286,12 +286,12 @@ msgstr ""
|
|||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "Коментари"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "Потребител"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
|
@ -301,17 +301,17 @@ msgstr ""
|
|||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "Точки"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "Заглавие"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "Автор"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -490,6 +490,10 @@ msgstr "Рейтинг на книги"
|
|||
msgid "File quality"
|
||||
msgstr "Качество на файл"
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "Преобразува низове в различни хаш-извлечение."
|
||||
|
@ -568,6 +572,10 @@ msgstr "Премахвач на URL тракери"
|
|||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr "Премахни следящите аргументи от върнатия URL"
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr "Страницата не е намерена"
|
||||
|
@ -747,27 +755,27 @@ msgstr "Бисквитки"
|
|||
msgid "Answers"
|
||||
msgstr "Отговори"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Брой резултати"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Инф."
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Пробвайте да потърсите:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "Обратно към началото"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "Предишна страница"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "Следваща страница"
|
||||
|
||||
|
@ -794,7 +802,7 @@ msgstr "търси"
|
|||
msgid "There is currently no data available. "
|
||||
msgstr "Няма налична достъпна информация."
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:18
|
||||
#: searx/templates/simple/preferences/engines.html:24
|
||||
#: searx/templates/simple/stats.html:25
|
||||
msgid "Engine name"
|
||||
msgstr "Име на търсачка"
|
||||
|
@ -807,12 +815,12 @@ msgstr "Резултати"
|
|||
msgid "Result count"
|
||||
msgstr "Брой резултати"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "Време за отговор"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "Надеждност"
|
||||
|
@ -931,7 +939,7 @@ msgstr "Автоматично разпознаване"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "Безопасно търсене"
|
||||
|
@ -952,7 +960,7 @@ msgid "None"
|
|||
msgstr "Нищо"
|
||||
|
||||
#: 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"
|
||||
msgstr "Времева зона"
|
||||
|
||||
|
@ -1021,7 +1029,7 @@ msgid "Go back to the previous page using the previous page button."
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Позволи"
|
||||
|
||||
|
@ -1141,19 +1149,27 @@ msgstr ""
|
|||
"Този раздел несъществува в потребителския интерфейс, но може да търсиш "
|
||||
"със следните търсачки по !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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Поддържка на избраният език"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "Тегло"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "Максимално време"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -11,21 +11,22 @@
|
|||
# MonsoonFire <re1qnb5mq@mozmail.com>, 2023.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# MonsoonRain <MonsoonRain@users.noreply.translate.codeberg.org>, 2024.
|
||||
# Utsushime <Utsushime@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
||||
"PO-Revision-Date: 2024-03-16 19:53+0000\n"
|
||||
"Last-Translator: MonsoonRain "
|
||||
"<MonsoonRain@users.noreply.translate.codeberg.org>\n"
|
||||
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||
"PO-Revision-Date: 2024-05-17 06:18+0000\n"
|
||||
"Last-Translator: Utsushime <Utsushime@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Bengali <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/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"
|
||||
"Content-Type: text/plain; charset=utf-8\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"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -76,7 +77,7 @@ msgstr "বেতার"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "দূরদর্শন"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -176,22 +177,22 @@ msgstr "সম্বন্ধে"
|
|||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Average temp."
|
||||
msgstr ""
|
||||
msgstr "গড় তাপমাত্রা"
|
||||
|
||||
#. WEATHER_TERMS['CLOUD COVER']
|
||||
#: searx/searxng.msg
|
||||
msgid "Cloud cover"
|
||||
msgstr ""
|
||||
msgstr "মেঘলা"
|
||||
|
||||
#. WEATHER_TERMS['CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "অবস্থা"
|
||||
|
||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "বর্তমান অবস্থা"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -201,22 +202,22 @@ msgstr "সন্ধ্যা"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "অনুভব হয়"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "আদ্রতা"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr ""
|
||||
msgstr "সর্বোচ্চ তাপমাত্রা"
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Min temp."
|
||||
msgstr ""
|
||||
msgstr "সর্বনিন্ম তাপমাত্রা"
|
||||
|
||||
#. WEATHER_TERMS['MORNING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -236,82 +237,82 @@ msgstr "দুপুর"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "চাপ"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "সূর্যোদয়"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "সূর্যাস্ত"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "তাপমাত্রা"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "ইউ ভি ইনডেক্স"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "দৃশ্যগোচর"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "বায়ু"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "সাবস্ক্রাইবারস"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "পোস্টস"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "সক্রিয় ইউজারস"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "কমেন্ট"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "ইউজার"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "কমিউনিটি"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "পয়েন্টস"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "শিরোনাম"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "লেখক"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -489,6 +490,10 @@ msgstr "বই পর্যালোচনা"
|
|||
msgid "File quality"
|
||||
msgstr "নথি মান"
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "স্ট্রিংগুলিকে বিভিন্ন হ্যাশ ডাইজেস্টে রূপান্তর করে।"
|
||||
|
@ -570,6 +575,10 @@ msgstr "ট্র্যাকার URL রিমুভার"
|
|||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr "ফিরে আসা URL থেকে ট্র্যাকার আর্গুমেন্টগুলি সরান৷"
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr "পৃষ্ঠা খুঁজে পাওয়া যায়নি"
|
||||
|
@ -749,27 +758,27 @@ msgstr "কুকি"
|
|||
msgid "Answers"
|
||||
msgstr "উত্তর"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "ফলাফলের সংখ্যা"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "তথ্য"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "এটি খোঁজার চেষ্টা করুন:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "উপরে ফিরে যান"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "পূর্ববর্তী পেইজ"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "পরবর্তী পেইজ"
|
||||
|
||||
|
@ -796,7 +805,7 @@ msgstr "অনুসন্ধান"
|
|||
msgid "There is currently no data available. "
|
||||
msgstr "বর্তমানে কোন তথ্য পাওয়া যায়নি."
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:18
|
||||
#: searx/templates/simple/preferences/engines.html:24
|
||||
#: searx/templates/simple/stats.html:25
|
||||
msgid "Engine name"
|
||||
msgstr "ইঞ্জিনের নাম"
|
||||
|
@ -809,12 +818,12 @@ msgstr "স্কোর"
|
|||
msgid "Result count"
|
||||
msgstr "ফলাফল গণনা"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "প্রতিক্রিয়া সময়"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "নির্ভরযোগ্যতা"
|
||||
|
@ -933,7 +942,7 @@ msgstr "স্বয়ং সনাক্ত"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "নিরাপদ সার্চ"
|
||||
|
@ -954,7 +963,7 @@ msgid "None"
|
|||
msgstr "নেই"
|
||||
|
||||
#: 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"
|
||||
msgstr "সময়সীমা"
|
||||
|
||||
|
@ -1023,7 +1032,7 @@ msgid "Go back to the previous page using the previous page button."
|
|||
msgstr "আগের পাতায় ফিরত যেতে পিছনে যাওয়ার বোতামে টিপ দাও।"
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "অনুমোদন"
|
||||
|
||||
|
@ -1138,19 +1147,27 @@ msgstr ""
|
|||
"এই ট্যাবটি ইউজার ইন্টারফেসে নেই, কিন্তু আপনি এই ইঞ্জিনের !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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "নির্বাচিত ভাষা সমর্থন করে"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "ওজন"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "সর্বোচ্চ সময়"
|
||||
|
||||
|
@ -1653,4 +1670,3 @@ msgstr "ভিডিও লুকিয়ে ফেলুন"
|
|||
#~ "আমরা কোন ফলাফল খুঁজে পাইনি. অনুগ্রহ "
|
||||
#~ "করে অন্য কোনো প্রশ্ন ব্যবহার করুন "
|
||||
#~ "বা আরও বিভাগে অনুসন্ধান করুন।"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -10,7 +10,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 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"
|
||||
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
||||
"Language: bo\n"
|
||||
|
@ -476,6 +476,10 @@ msgstr ""
|
|||
msgid "File quality"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr ""
|
||||
|
@ -546,6 +550,10 @@ msgstr "དྲ་གནས་རྗེས་འདེད་སྤོ་འབུ
|
|||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr "དྲ་ངོས་རྙེད་རྒྱུ་མ་བྱུང་།"
|
||||
|
@ -721,27 +729,27 @@ msgstr "རྐང་རྗེས།"
|
|||
msgid "Answers"
|
||||
msgstr "ལན།"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "འཚོལ་འབྲས་ཀྱི་ཁ་གྲངས།"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "འཚོལ་བཤེར་ནང་དོན་ནི།"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr ""
|
||||
|
||||
|
@ -768,7 +776,7 @@ msgstr ""
|
|||
msgid "There is currently no data available. "
|
||||
msgstr "ཉེ་བར་ཐོབ་རུང་བའི་ཡིག་ཆ་གང་ཡང་མེད།"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:18
|
||||
#: searx/templates/simple/preferences/engines.html:24
|
||||
#: searx/templates/simple/stats.html:25
|
||||
msgid "Engine name"
|
||||
msgstr "སྒུལ་བྱེད་ཀྱི་མིང་།"
|
||||
|
@ -781,12 +789,12 @@ msgstr "ཐོབ་སྐར།"
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr ""
|
||||
|
@ -905,7 +913,7 @@ msgstr ""
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "བདེ་འཇགས་འཚོལ་བཤེར།"
|
||||
|
@ -926,7 +934,7 @@ msgid "None"
|
|||
msgstr "གང་ཡང་མེད།"
|
||||
|
||||
#: 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"
|
||||
msgstr "དུས་ཀྱི་ཁྱབ་ཁོངས།"
|
||||
|
||||
|
@ -995,7 +1003,7 @@ msgid "Go back to the previous page using the previous page button."
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "ཆོག་མཆན།"
|
||||
|
||||
|
@ -1104,19 +1112,27 @@ msgid ""
|
|||
"these engines by its !bangs."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "རྒྱབ་སྐྱོར་ཐོབ་པའི་སྐད་རིགས་གདམ་གསེས།"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "མང་མཐའི་དུས་ཚོད།"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -21,7 +21,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: sserra <sserra@users.noreply.translate.codeberg.org>\n"
|
||||
"Language: ca\n"
|
||||
|
@ -494,6 +494,10 @@ msgstr "Valoració de llibre"
|
|||
msgid "File quality"
|
||||
msgstr "Qualitat del fitxer"
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
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"
|
||||
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
|
||||
msgid "Page not found"
|
||||
msgstr "No s'ha trobat la pàgina"
|
||||
|
@ -752,27 +760,27 @@ msgstr "Galetes"
|
|||
msgid "Answers"
|
||||
msgstr "Respostes"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Nombre de resultats"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Informació"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Proveu a cercar:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "Torna al capdemunt"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "Pàgina anterior"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "Pàgina següent"
|
||||
|
||||
|
@ -799,7 +807,7 @@ msgstr "cerca"
|
|||
msgid "There is currently no data available. "
|
||||
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
|
||||
msgid "Engine name"
|
||||
msgstr "Nom del cercador"
|
||||
|
@ -812,12 +820,12 @@ msgstr "Valoració"
|
|||
msgid "Result count"
|
||||
msgstr "Resultats"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "Temps de resposta"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "Fiabilitat"
|
||||
|
@ -936,7 +944,7 @@ msgstr "Detecció automàtica"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "Cerca segura"
|
||||
|
@ -957,7 +965,7 @@ msgid "None"
|
|||
msgstr "Desactivat"
|
||||
|
||||
#: 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"
|
||||
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."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Permetre"
|
||||
|
||||
|
@ -1144,19 +1152,27 @@ msgstr ""
|
|||
"Aquesta pestanya no existeix en la interfície d'usuari, però pots buscar "
|
||||
"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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Suporta la llengua seleccionada"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "Pes"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "Temps màxim"
|
||||
|
||||
|
|
Binary file not shown.
|
@ -13,21 +13,23 @@
|
|||
# zenobit <zen@osowoso.xyz>, 2023.
|
||||
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
||||
# Fjuro <ifjuro@proton.me>, 2023, 2024.
|
||||
# Fjuro <fjuro@alius.cz>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
||||
"PO-Revision-Date: 2024-02-26 16:56+0000\n"
|
||||
"Last-Translator: Fjuro <ifjuro@proton.me>\n"
|
||||
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||
"PO-Revision-Date: 2024-05-10 06:13+0000\n"
|
||||
"Last-Translator: Fjuro <fjuro@alius.cz>\n"
|
||||
"Language-Team: Czech <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/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"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
|
||||
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
"X-Generator: Weblate 5.5.2\n"
|
||||
"Generated-By: Babel 2.14.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -78,7 +80,7 @@ msgstr "rádio"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "tv"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -178,22 +180,22 @@ msgstr "O SearXNG"
|
|||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Average temp."
|
||||
msgstr ""
|
||||
msgstr "Prům. teplota"
|
||||
|
||||
#. WEATHER_TERMS['CLOUD COVER']
|
||||
#: searx/searxng.msg
|
||||
msgid "Cloud cover"
|
||||
msgstr ""
|
||||
msgstr "Pokrytí mraky"
|
||||
|
||||
#. WEATHER_TERMS['CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Stav"
|
||||
|
||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "Aktuální stav"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -203,22 +205,22 @@ msgstr "Večer"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "Pocitová teplota"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "Vlhkost"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr ""
|
||||
msgstr "Max. teplota"
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Min temp."
|
||||
msgstr ""
|
||||
msgstr "Min. teplota"
|
||||
|
||||
#. WEATHER_TERMS['MORNING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -238,82 +240,82 @@ msgstr "Poledne"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Tlak"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Východ slunce"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Západ slunce"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Teplota"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "UV index"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Viditelnost"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Vítr"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "odběratelé"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "příspěvky"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "aktivní uživatelé"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "komentáře"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "uživatel"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "komunita"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "body"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "název"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "autor"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -491,6 +493,10 @@ msgstr "Hodnocení knih"
|
|||
msgid "File quality"
|
||||
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
|
||||
msgid "Converts strings to different hash digests."
|
||||
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"
|
||||
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
|
||||
msgid "Page not found"
|
||||
msgstr "Stránka nenalezena"
|
||||
|
@ -747,27 +757,27 @@ msgstr "Cookies"
|
|||
msgid "Answers"
|
||||
msgstr "Odpovědi"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Počet výsledků"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Informace"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Zkuste vyhledat:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "Nahoru"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "Předchozí stránka"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "Další stránka"
|
||||
|
||||
|
@ -794,7 +804,7 @@ msgstr "vyhledat"
|
|||
msgid "There is currently no data available. "
|
||||
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
|
||||
msgid "Engine name"
|
||||
msgstr "Jméno vyhledávače"
|
||||
|
@ -807,12 +817,12 @@ msgstr "Skóre"
|
|||
msgid "Result count"
|
||||
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
|
||||
msgid "Response time"
|
||||
msgstr "Čas odpovědi"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "Spolehlivost"
|
||||
|
@ -931,7 +941,7 @@ msgstr "Automatická detekce"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "Bezpečné vyhledávání"
|
||||
|
@ -952,7 +962,7 @@ msgid "None"
|
|||
msgstr "Vypnuto"
|
||||
|
||||
#: 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"
|
||||
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."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Povolit"
|
||||
|
||||
|
@ -1138,19 +1148,27 @@ msgstr ""
|
|||
"Tato karta v uživatelském rozhraní neexistuje, ale můžete v těchto "
|
||||
"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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Podporuje vybraný jazyk"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "Váha"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "Max. čas"
|
||||
|
||||
|
@ -1905,4 +1923,3 @@ msgstr "skrýt video"
|
|||
#~ "Nenašli jsme žádné výsledky. Použijte "
|
||||
#~ "prosím jiný dotaz nebo hledejte ve "
|
||||
#~ "více kategoriích."
|
||||
|
||||
|
|
Binary file not shown.
|
@ -12,7 +12,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: searx\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"
|
||||
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
||||
"Language: cy\n"
|
||||
|
@ -486,6 +486,10 @@ msgstr "Gradd llyfr"
|
|||
msgid "File quality"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "Trosi llinynnau i wahanol dreuliadau hash."
|
||||
|
@ -556,6 +560,10 @@ msgstr ""
|
|||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
@ -731,27 +739,27 @@ msgstr "Cwcis"
|
|||
msgid "Answers"
|
||||
msgstr "Atebion"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Nifer o ganlyniadau"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Gwybodaeth"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Rho gynnig ar chwilio am:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr ""
|
||||
|
||||
|
@ -778,7 +786,7 @@ msgstr "chwilio"
|
|||
msgid "There is currently no data available. "
|
||||
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
|
||||
msgid "Engine name"
|
||||
msgstr ""
|
||||
|
@ -791,12 +799,12 @@ msgstr "Sgoriau"
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr ""
|
||||
|
@ -915,7 +923,7 @@ msgstr ""
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr ""
|
||||
|
@ -936,7 +944,7 @@ msgid "None"
|
|||
msgstr "Dim"
|
||||
|
||||
#: 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"
|
||||
msgstr "Cyfnod amser"
|
||||
|
||||
|
@ -1005,7 +1013,7 @@ msgid "Go back to the previous page using the previous page button."
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Caniatáu"
|
||||
|
||||
|
@ -1114,19 +1122,27 @@ msgid ""
|
|||
"these engines by its !bangs."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Cefnogir yr iaith a ddewiswyd"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr ""
|
||||
|
||||
|
|
Binary file not shown.
|
@ -8,21 +8,22 @@
|
|||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||
# return42 <markus.heiser@darmarit.de>, 2023.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# lolmeOzzi <lolmeOzzi@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
||||
"PO-Revision-Date: 2024-04-04 14:18+0000\n"
|
||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
||||
"\n"
|
||||
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||
"PO-Revision-Date: 2024-05-23 23:17+0000\n"
|
||||
"Last-Translator: lolmeOzzi <lolmeOzzi@users.noreply.translate.codeberg.org>\n"
|
||||
"Language-Team: Danish <https://translate.codeberg.org/projects/searxng/"
|
||||
"searxng/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"
|
||||
"Content-Type: text/plain; charset=utf-8\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"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
|
@ -73,7 +74,7 @@ msgstr "Radio"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "tv"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -173,22 +174,22 @@ msgstr "Om"
|
|||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Average temp."
|
||||
msgstr ""
|
||||
msgstr "Gennemsnitlig temp."
|
||||
|
||||
#. WEATHER_TERMS['CLOUD COVER']
|
||||
#: searx/searxng.msg
|
||||
msgid "Cloud cover"
|
||||
msgstr ""
|
||||
msgstr "Skydække"
|
||||
|
||||
#. WEATHER_TERMS['CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Forhold"
|
||||
|
||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "Nuværende forhold"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -198,22 +199,22 @@ msgstr "Aften"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "Føles som"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "Luftfugtighed"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr ""
|
||||
msgstr "Maks. temp."
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Min temp."
|
||||
msgstr ""
|
||||
msgstr "Min. temp."
|
||||
|
||||
#. WEATHER_TERMS['MORNING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -233,82 +234,82 @@ msgstr "Middag"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Tryk"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Solopgang"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Solnedgang"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Temperatur"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "UV index"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Sigtbarhed"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Vind"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "abonnenter"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "opslag"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "aktive brugere"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "kommentare"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "bruger"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "fællesskab"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "point"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "titel"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "forfatter"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -487,6 +488,10 @@ msgstr "Bogbedømmelse"
|
|||
msgid "File quality"
|
||||
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
|
||||
msgid "Converts strings to different 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"
|
||||
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
|
||||
msgid "Page not found"
|
||||
msgstr "Side ikke fundet"
|
||||
|
@ -747,27 +756,27 @@ msgstr "Cookies"
|
|||
msgid "Answers"
|
||||
msgstr "Svar"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Antal resultater"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Info"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Prøv at søge efter:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "Tilbage til toppen"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "Forrige side"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "Næste side"
|
||||
|
||||
|
@ -794,7 +803,7 @@ msgstr "søg"
|
|||
msgid "There is currently no data available. "
|
||||
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
|
||||
msgid "Engine name"
|
||||
msgstr "Søgemaskinenavn"
|
||||
|
@ -807,12 +816,12 @@ msgstr "Vægtninger"
|
|||
msgid "Result count"
|
||||
msgstr "Antal resultater"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "Svartid"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "Driftsikkerhed"
|
||||
|
@ -931,7 +940,7 @@ msgstr "Automatisk registrering"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "Sikker Søgning"
|
||||
|
@ -952,7 +961,7 @@ msgid "None"
|
|||
msgstr "Ingen"
|
||||
|
||||
#: 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"
|
||||
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."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Tillad"
|
||||
|
||||
|
@ -1121,7 +1130,7 @@ msgstr "Indsæt kopieret indstillinger-hash (uden URL) for at gendanne"
|
|||
|
||||
#: searx/templates/simple/preferences/cookies.html:59
|
||||
msgid "Preferences hash"
|
||||
msgstr ""
|
||||
msgstr "Præference hash"
|
||||
|
||||
#: searx/templates/simple/preferences/doi_resolver.html:2
|
||||
msgid "Open Access DOI resolver"
|
||||
|
@ -1139,19 +1148,27 @@ msgstr ""
|
|||
"Denne fane eksisterer ikke i brugergrænsefladen, men du kan søge i disse "
|
||||
"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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Understøtter valgte sprog"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "Vægt"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "Maks-tid"
|
||||
|
||||
|
@ -1397,11 +1414,11 @@ msgstr "Version"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:18
|
||||
msgid "Maintainer"
|
||||
msgstr ""
|
||||
msgstr "Vedligeholder"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:24
|
||||
msgid "Updated at"
|
||||
msgstr ""
|
||||
msgstr "Opdateret ved"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:30
|
||||
#: searx/templates/simple/result_templates/paper.html:25
|
||||
|
@ -1410,7 +1427,7 @@ msgstr "Tags"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:36
|
||||
msgid "Popularity"
|
||||
msgstr ""
|
||||
msgstr "Popularitet"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:42
|
||||
msgid "License"
|
||||
|
@ -1418,11 +1435,11 @@ msgstr "Licens"
|
|||
|
||||
#: searx/templates/simple/result_templates/packages.html:52
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
msgstr "Projekt"
|
||||
|
||||
#: searx/templates/simple/result_templates/packages.html:55
|
||||
msgid "Project homepage"
|
||||
msgstr ""
|
||||
msgstr "Projekt hjemmeside"
|
||||
|
||||
#: searx/templates/simple/result_templates/paper.html:5
|
||||
msgid "Published date"
|
||||
|
@ -1906,4 +1923,3 @@ msgstr "skjul video"
|
|||
#~ "Vi fandt ingen resultater. Benyt "
|
||||
#~ "venligst en anden søge-streng eller "
|
||||
#~ "søg i flere kategorier."
|
||||
|
||||
|
|
Binary file not shown.
|
@ -20,26 +20,29 @@
|
|||
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
|
||||
# Peter Martin <weblate@pe7er.com>, 2022.
|
||||
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
|
||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2024.
|
||||
# German <German@users.noreply.translate.codeberg.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: searx\n"
|
||||
"Project-Id-Version: searx\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2024-04-26 05:37+0000\n"
|
||||
"PO-Revision-Date: 2024-02-26 16:56+0000\n"
|
||||
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
|
||||
"POT-Creation-Date: 2024-05-09 15:27+0000\n"
|
||||
"PO-Revision-Date: 2024-05-10 06:13+0000\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-Team: German "
|
||||
"<https://translate.codeberg.org/projects/searxng/searxng/de/>\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=utf-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 5.5.2\n"
|
||||
"Generated-By: Babel 2.14.0\n"
|
||||
|
||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||
#: searx/searxng.msg
|
||||
msgid "without further subgrouping"
|
||||
msgstr "ohne weitere Untergruppierung"
|
||||
msgstr "keine weitere Untergruppierung"
|
||||
|
||||
#. CONSTANT_NAMES['DEFAULT_CATEGORY']
|
||||
#: searx/searxng.msg
|
||||
|
@ -84,7 +87,7 @@ msgstr "Radio"
|
|||
#. CATEGORY_NAMES['TV']
|
||||
#: searx/searxng.msg
|
||||
msgid "tv"
|
||||
msgstr ""
|
||||
msgstr "TV"
|
||||
|
||||
#. CATEGORY_NAMES['IT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -104,7 +107,7 @@ msgstr "Karte"
|
|||
#. CATEGORY_NAMES['ONIONS']
|
||||
#: searx/searxng.msg
|
||||
msgid "onions"
|
||||
msgstr "Onion"
|
||||
msgstr "Zwiebel"
|
||||
|
||||
#. CATEGORY_NAMES['SCIENCE']
|
||||
#: searx/searxng.msg
|
||||
|
@ -159,7 +162,7 @@ msgstr "wissenschaftliche Veröffentlichungen"
|
|||
#. STYLE_NAMES['AUTO']
|
||||
#: searx/searxng.msg
|
||||
msgid "auto"
|
||||
msgstr "auto"
|
||||
msgstr "automatisch"
|
||||
|
||||
#. STYLE_NAMES['LIGHT']
|
||||
#: searx/searxng.msg
|
||||
|
@ -184,22 +187,22 @@ msgstr "Über"
|
|||
#. WEATHER_TERMS['AVERAGE TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Average temp."
|
||||
msgstr ""
|
||||
msgstr "Mittlere Temp."
|
||||
|
||||
#. WEATHER_TERMS['CLOUD COVER']
|
||||
#: searx/searxng.msg
|
||||
msgid "Cloud cover"
|
||||
msgstr ""
|
||||
msgstr "Bewölkung"
|
||||
|
||||
#. WEATHER_TERMS['CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Condition"
|
||||
msgstr ""
|
||||
msgstr "Bedingung"
|
||||
|
||||
#. WEATHER_TERMS['CURRENT CONDITION']
|
||||
#: searx/searxng.msg
|
||||
msgid "Current condition"
|
||||
msgstr ""
|
||||
msgstr "Aktuelle Bedingung"
|
||||
|
||||
#. WEATHER_TERMS['EVENING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -209,22 +212,22 @@ msgstr "Abends"
|
|||
#. WEATHER_TERMS['FEELS LIKE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Feels like"
|
||||
msgstr ""
|
||||
msgstr "Gefühlt wie"
|
||||
|
||||
#. WEATHER_TERMS['HUMIDITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Humidity"
|
||||
msgstr ""
|
||||
msgstr "Luftfeuchtigkeit"
|
||||
|
||||
#. WEATHER_TERMS['MAX TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Max temp."
|
||||
msgstr ""
|
||||
msgstr "Max."
|
||||
|
||||
#. WEATHER_TERMS['MIN TEMP.']
|
||||
#: searx/searxng.msg
|
||||
msgid "Min temp."
|
||||
msgstr ""
|
||||
msgstr "Min."
|
||||
|
||||
#. WEATHER_TERMS['MORNING']
|
||||
#: searx/engines/wttr.py:100 searx/searxng.msg
|
||||
|
@ -244,82 +247,82 @@ msgstr "Mittags"
|
|||
#. WEATHER_TERMS['PRESSURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Pressure"
|
||||
msgstr ""
|
||||
msgstr "Luftdruck"
|
||||
|
||||
#. WEATHER_TERMS['SUNRISE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunrise"
|
||||
msgstr ""
|
||||
msgstr "Sonnenaufgang"
|
||||
|
||||
#. WEATHER_TERMS['SUNSET']
|
||||
#: searx/searxng.msg
|
||||
msgid "Sunset"
|
||||
msgstr ""
|
||||
msgstr "Sonnenuntergang"
|
||||
|
||||
#. WEATHER_TERMS['TEMPERATURE']
|
||||
#: searx/searxng.msg
|
||||
msgid "Temperature"
|
||||
msgstr ""
|
||||
msgstr "Temperatur"
|
||||
|
||||
#. WEATHER_TERMS['UV INDEX']
|
||||
#: searx/searxng.msg
|
||||
msgid "UV index"
|
||||
msgstr ""
|
||||
msgstr "UV-Index"
|
||||
|
||||
#. WEATHER_TERMS['VISIBILITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "Visibility"
|
||||
msgstr ""
|
||||
msgstr "Sichtweite"
|
||||
|
||||
#. WEATHER_TERMS['WIND']
|
||||
#: searx/searxng.msg
|
||||
msgid "Wind"
|
||||
msgstr ""
|
||||
msgstr "Sturm"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['SUBSCRIBERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "subscribers"
|
||||
msgstr ""
|
||||
msgstr "Abonnenten"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POSTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "posts"
|
||||
msgstr ""
|
||||
msgstr "Beiträge"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['ACTIVE USERS']
|
||||
#: searx/searxng.msg
|
||||
msgid "active users"
|
||||
msgstr ""
|
||||
msgstr "aktive Nutzer"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMENTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "comments"
|
||||
msgstr ""
|
||||
msgstr "Kommentare"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['USER']
|
||||
#: searx/searxng.msg
|
||||
msgid "user"
|
||||
msgstr ""
|
||||
msgstr "Benutzer"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['COMMUNITY']
|
||||
#: searx/searxng.msg
|
||||
msgid "community"
|
||||
msgstr ""
|
||||
msgstr "Community"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['POINTS']
|
||||
#: searx/searxng.msg
|
||||
msgid "points"
|
||||
msgstr ""
|
||||
msgstr "Punkte"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['TITLE']
|
||||
#: searx/searxng.msg
|
||||
msgid "title"
|
||||
msgstr ""
|
||||
msgstr "Titel"
|
||||
|
||||
#. SOCIAL_MEDIA_TERMS['AUTHOR']
|
||||
#: searx/searxng.msg
|
||||
msgid "author"
|
||||
msgstr ""
|
||||
msgstr "Autor/-in"
|
||||
|
||||
#: searx/webapp.py:330
|
||||
msgid "No item found"
|
||||
|
@ -498,6 +501,10 @@ msgstr "Buchbewertung"
|
|||
msgid "File quality"
|
||||
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
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr "Konvertiert Zeichenketten in verschiedene Hashwerte."
|
||||
|
@ -583,6 +590,10 @@ msgstr "Tracker-URL-Entferner"
|
|||
msgid "Remove trackers arguments from the returned URL"
|
||||
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
|
||||
msgid "Page not found"
|
||||
msgstr "Seite nicht gefunden"
|
||||
|
@ -764,27 +775,27 @@ msgstr "Cookies"
|
|||
msgid "Answers"
|
||||
msgstr "Antworten"
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr "Trefferanzahl"
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr "Information"
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr "Suche nach:"
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr "Zurück zum Anfang"
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr "Vorherige Seite"
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr "Nächste Seite"
|
||||
|
||||
|
@ -811,7 +822,7 @@ msgstr "suchen"
|
|||
msgid "There is currently no data available. "
|
||||
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
|
||||
msgid "Engine name"
|
||||
msgstr "Suchmaschinenname"
|
||||
|
@ -824,12 +835,12 @@ msgstr "Punkte"
|
|||
msgid "Result count"
|
||||
msgstr "Ergebnisanzahl"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr "Antwortzeit"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr "Zuverlässigkeit"
|
||||
|
@ -948,7 +959,7 @@ msgstr "Spracherkennung"
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr "Sichere Suche"
|
||||
|
@ -969,7 +980,7 @@ msgid "None"
|
|||
msgstr "Keine"
|
||||
|
||||
#: 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"
|
||||
msgstr "Zeitbereich"
|
||||
|
||||
|
@ -1015,15 +1026,15 @@ msgstr "Es gibt keine weiteren Ergebnisse zu dem Suchbegriff:"
|
|||
|
||||
#: searx/templates/simple/messages/no_results.html:19
|
||||
msgid "Refresh the page."
|
||||
msgstr "Suche wiederholen"
|
||||
msgstr "Die Seite neuladen."
|
||||
|
||||
#: searx/templates/simple/messages/no_results.html:20
|
||||
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
|
||||
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
|
||||
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."
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr "Erlauben"
|
||||
|
||||
|
@ -1156,19 +1167,27 @@ msgstr ""
|
|||
"Diese Registerkarte ist in der Benutzeroberfläche nicht vorhanden, aber "
|
||||
"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"
|
||||
msgstr "!bang"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr "Sprachen"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr "Gewichtung"
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
msgstr "max. Zeit"
|
||||
|
||||
|
@ -1202,7 +1221,7 @@ msgstr "Zurück"
|
|||
|
||||
#: searx/templates/simple/preferences/hotkeys.html:2
|
||||
msgid "Hotkeys"
|
||||
msgstr "Hotkeys"
|
||||
msgstr "Funktionstasten"
|
||||
|
||||
#: searx/templates/simple/preferences/hotkeys.html:13
|
||||
msgid "Vim-like"
|
||||
|
@ -1939,4 +1958,3 @@ msgstr "Video verstecken"
|
|||
#~ "werden. Bitte nutze einen anderen "
|
||||
#~ "Suchbegriff, oder suche das gewünschte "
|
||||
#~ "in einer anderen Kategorie."
|
||||
|
||||
|
|
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 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"
|
||||
"Last-Translator: Landhoo School Students "
|
||||
"<landhooschoolstudents@gmail.com>\n"
|
||||
|
@ -474,6 +474,10 @@ msgstr ""
|
|||
msgid "File quality"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/calculator.py:12
|
||||
msgid "Calculate mathematical expressions via the search bar"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/hash_plugin.py:10
|
||||
msgid "Converts strings to different hash digests."
|
||||
msgstr ""
|
||||
|
@ -544,6 +548,10 @@ msgstr ""
|
|||
msgid "Remove trackers arguments from the returned URL"
|
||||
msgstr ""
|
||||
|
||||
#: searx/plugins/unit_converter.py:29
|
||||
msgid "Convert between units"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/404.html:4
|
||||
msgid "Page not found"
|
||||
msgstr ""
|
||||
|
@ -719,27 +727,27 @@ msgstr ""
|
|||
msgid "Answers"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:38
|
||||
#: searx/templates/simple/results.html:42
|
||||
msgid "Number of results"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:44
|
||||
#: searx/templates/simple/results.html:48
|
||||
msgid "Info"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:73
|
||||
#: searx/templates/simple/results.html:77
|
||||
msgid "Try searching for:"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:105
|
||||
#: searx/templates/simple/results.html:109
|
||||
msgid "Back to top"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:123
|
||||
#: searx/templates/simple/results.html:127
|
||||
msgid "Previous page"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/results.html:141
|
||||
#: searx/templates/simple/results.html:145
|
||||
msgid "Next page"
|
||||
msgstr ""
|
||||
|
||||
|
@ -766,7 +774,7 @@ msgstr ""
|
|||
msgid "There is currently no data available. "
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:18
|
||||
#: searx/templates/simple/preferences/engines.html:24
|
||||
#: searx/templates/simple/stats.html:25
|
||||
msgid "Engine name"
|
||||
msgstr ""
|
||||
|
@ -779,12 +787,12 @@ msgstr ""
|
|||
msgid "Result count"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:25
|
||||
#: searx/templates/simple/preferences/engines.html:31
|
||||
#: searx/templates/simple/stats.html:28
|
||||
msgid "Response time"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
#: searx/templates/simple/preferences/engines.html:35
|
||||
#: searx/templates/simple/stats.html:29
|
||||
msgid "Reliability"
|
||||
msgstr ""
|
||||
|
@ -903,7 +911,7 @@ msgstr ""
|
|||
#: searx/templates/simple/filters/safesearch.html:2
|
||||
#: searx/templates/simple/filters/safesearch.html:3
|
||||
#: 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
|
||||
msgid "SafeSearch"
|
||||
msgstr ""
|
||||
|
@ -924,7 +932,7 @@ msgid "None"
|
|||
msgstr ""
|
||||
|
||||
#: 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"
|
||||
msgstr ""
|
||||
|
||||
|
@ -993,7 +1001,7 @@ msgid "Go back to the previous page using the previous page button."
|
|||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/answerers.html:4
|
||||
#: searx/templates/simple/preferences/engines.html:17
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
msgid "Allow"
|
||||
msgstr ""
|
||||
|
||||
|
@ -1102,19 +1110,27 @@ msgid ""
|
|||
"these engines by its !bangs."
|
||||
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"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:20
|
||||
#: searx/templates/simple/preferences/engines.html:26
|
||||
msgid "Supports selected language"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:23
|
||||
#: searx/templates/simple/preferences/engines.html:29
|
||||
msgid "Weight"
|
||||
msgstr ""
|
||||
|
||||
#: searx/templates/simple/preferences/engines.html:27
|
||||
#: searx/templates/simple/preferences/engines.html:33
|
||||
msgid "Max time"
|
||||
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