Merge remote-tracking branch 'searxng/master'

This commit is contained in:
Valentin Riess 2024-02-29 18:39:27 +01:00
commit 0f0a17f5d9
169 changed files with 23635 additions and 21505 deletions

View file

@ -172,3 +172,4 @@ features or generally made searx better:
- Bernie Huang `<https://github.com/BernieHuang2008>`
- Austin Olacsi `<https://github.com/Austin-Olacsi>`
- Valentin Rieß `<https://github.com/v411e>`
- @micsthepick

View file

@ -75,14 +75,13 @@ test.shell:
# wrap ./manage script
MANAGE += weblate.translations.commit weblate.push.translations
MANAGE += data.all data.traits data.useragents
MANAGE += data.all data.traits data.useragents data.locales
MANAGE += docs.html docs.live docs.gh-pages docs.prebuild docs.clean
MANAGE += docker.build docker.push docker.buildx
MANAGE += gecko.driver
MANAGE += node.env node.env.dev node.clean
MANAGE += py.build py.clean
MANAGE += pyenv pyenv.install pyenv.uninstall
MANAGE += pypi.upload pypi.upload.test
MANAGE += format.python
MANAGE += test.yamllint test.pylint test.pyright test.black test.pybabel test.unit test.coverage test.robot test.rst test.clean
MANAGE += themes.all themes.simple themes.simple.test pygments.less

View file

@ -271,22 +271,54 @@ type.
``images``
----------
.. table:: Parameter of the **images** media type:
.. list-table:: Parameter of the **images** media type
:header-rows: 2
:width: 100%
========================= =====================================================
result-parameter information
------------------------- -----------------------------------------------------
template is set to ``images.html``
========================= =====================================================
url string, url to the result site
title string, title of the result *(partly implemented)*
content *(partly implemented)*
publishedDate :py:class:`datetime.datetime`,
time of publish *(partly implemented)*
img\_src string, url to the result image
thumbnail\_src string, url to a small-preview image
========================= =====================================================
* - result-parameter
- Python type
- information
* - template
- :py:class:`str`
- is set to ``images.html``
* - url
- :py:class:`str`
- url to the result site
* - title
- :py:class:`str`
- title of the result
* - content
- :py:class:`str`
- description of the image
* - publishedDate
- :py:class:`datetime <datetime.datetime>`
- time of publish
* - img_src
- :py:class:`str`
- url to the result image
* - thumbnail_src
- :py:class:`str`
- url to a small-preview image
* - resolution
- :py:class:`str`
- the resolution of the image (e.g. ``1920 x 1080`` pixel)
* - img_format
- :py:class:`str`
- the format of the image (e.g. ``png``)
* - filesize
- :py:class:`str`
- size of bytes in :py:obj:`human readable <searx.humanize_bytes>` notation
(e.g. ``MB`` for 1024 \* 1024 Bytes filesize).
.. _template videos:
@ -466,3 +498,68 @@ type.
- :py:class:`str`
- URL to full article, HTML version
.. _template packages:
``packages``
------------
.. list-table:: Parameter of the **packages** media type
:header-rows: 2
:width: 100%
* - result-parameter
- Python type
- information
* - template
- :py:class:`str`
- is set to ``packages.html``
* - title
- :py:class:`str`
- title of the result
* - content
- :py:class:`str`
- abstract
* - package_name
- :py:class:`str`
- the name of the package
* - version
- :py:class:`str`
- the current version of the package
* - maintainer
- :py:class:`str`
- the maintainer or author of the project
* - publishedDate
- :py:class:`datetime <datetime.datetime>`
- date of latest update or release
* - tags
- :py:class:`List <list>`\ [\ :py:class:`str`\ ]
- free tag list
* - popularity
- :py:class:`str`
- the popularity of the package, e.g. rating or download count
* - license_name
- :py:class:`str`
- the name of the license
* - license_url
- :py:class:`str`
- the web location of a license copy
* - homepage
- :py:class:`str`
- the url of the project's homepage
* - source_code_url
- :py:class:`str`
- the location of the project's source code

View file

@ -0,0 +1,13 @@
.. _voidlinux engine:
==========================
Void Linux binary packages
==========================
.. contents:: Contents
:depth: 2
:local:
:backlinks: entry
.. automodule:: searx.engines.voidlinux
:members:

View file

@ -292,7 +292,7 @@ content becomes smart.
files & folders origin :origin:`docs/dev/reST.rst` ``:origin:`docs/dev/reST.rst```
pull request :pull:`4` ``:pull:`4```
patch :patch:`af2cae6` ``:patch:`af2cae6```
PyPi package :pypi:`searx` ``:pypi:`searx```
PyPi package :pypi:`httpx` ``:pypi:`httpx```
manual page man :man:`bash` ``:man:`bash```
intersphinx_
--------------------------------------------------------------------------------------------------

View file

@ -78,6 +78,16 @@ Scripts to update static data in :origin:`searx/data/`
.. automodule:: searxng_extra.update.update_pygments
:members:
.. _update_locales.py:
``update_locales.py``
=====================
:origin:`[source] <searxng_extra/update/update_locales.py>`
.. automodule:: searxng_extra.update.update_locales
:members:
``update_wikidata_units.py``
============================

View file

@ -10,11 +10,6 @@ Locales
:backlinks: entry
.. automodule:: searx.locales
:members:
:members:
SearXNG's locale codes
======================
.. automodule:: searx.sxng_locales
:members:

15
manage
View file

@ -109,8 +109,6 @@ pyenv.:
uninstall : uninstall developer installation
cmd ... : run command ... in virtualenv
OK : test if virtualenv is OK
pypi.upload:
Upload python packages to PyPi (to test use pypi.upload.test)
format.:
python : format Python code source using black
pygments.:
@ -334,19 +332,6 @@ pyenv.uninstall() {
}
pypi.upload() {
py.clean
py.build
# https://github.com/pypa/twine
pyenv.cmd twine upload "${PYDIST}"/*
}
pypi.upload.test() {
py.clean
py.build
pyenv.cmd twine upload -r testpypi "${PYDIST}"/*
}
format.python() {
build_msg TEST "[format.python] black \$BLACK_TARGETS"
pyenv.cmd black "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"

View file

@ -4,8 +4,7 @@ cov-core==1.15.0
black==22.12.0
pylint==3.0.3
splinter==0.21.0
selenium==4.17.2
twine==4.0.2
selenium==4.18.1
Pallets-Sphinx-Themes==2.1.1
Sphinx<=7.1.2; python_version == '3.8'
Sphinx==7.2.6; python_version > '3.8'
@ -18,6 +17,6 @@ sphinx-notfound-page==1.0.0
myst-parser==2.0.0
linuxdoc==20231020
aiounittest==1.4.2
yamllint==1.34.0
yamllint==1.35.1
wlc==1.13
coloredlogs==15.0.1

View file

@ -15,6 +15,7 @@ __all__ = [
'EXTERNAL_BANGS',
'OSM_KEYS_TAGS',
'ENGINE_DESCRIPTIONS',
'LOCALES',
'ahmia_blacklist_loader',
]
@ -50,3 +51,4 @@ EXTERNAL_BANGS = _load('external_bangs.json')
OSM_KEYS_TAGS = _load('osm_keys_tags.json')
ENGINE_DESCRIPTIONS = _load('engine_descriptions.json')
ENGINE_TRAITS = _load('engine_traits.json')
LOCALES = _load('locales.json')

File diff suppressed because it is too large Load diff

View file

@ -372,7 +372,7 @@
"đô la barbados": "BBD",
"تاكا بنغلاديشي": "BDT",
"бангладешка така": "BDT",
"বাংলাদেশী টাকা": "BDT",
"টাকা": "BDT",
"taka": [
"INR",
"BDT"
@ -523,7 +523,7 @@
"דולר ברוניי": "BND",
"brunejski dolar": "BND",
"brunei dollár": "BND",
"dolar brunei darussalam": "BND",
"dolar brunei": "BND",
"dollaro del brunei": "BND",
"ブルネイ・ドル": "BND",
"브루나이 달러": "BND",
@ -1486,6 +1486,7 @@
"기니 프랑": "GNF",
"gvinėjos frankas": "GNF",
"guineese frank": "GNF",
"franc guinean": "GNF",
"frank gwinejski": "GNF",
"franco da guiné": "GNF",
"гвинейский франк": "GNF",
@ -2141,6 +2142,8 @@
"kuwaiti dinar": "KWD",
"kuvajta dinaro": "KWD",
"dinar kuwaití": "KWD",
"kuveidi dinaar": "KWD",
"kuwaitar dinar": "KWD",
"kuwaitin dinaari": "KWD",
"dinar koweïtien": "KWD",
"דינר כוויתי": "KWD",
@ -2613,6 +2616,7 @@
"malediivien rufiyaa": "MVR",
"maldivska rufija": "MVR",
"maldív rúfia": "MVR",
"rufiyaa maladewa": "MVR",
"rufiyaa delle maldive": "MVR",
"ルフィヤ": "MVR",
"몰디브 루피야": "MVR",
@ -3906,10 +3910,10 @@
"tonžská paʻanga": "TOP",
"tongan paʻanga": "TOP",
"tonga paangao": "TOP",
"pa'anga": "TOP",
"פאנגה טונגאית": "TOP",
"tonška paanga": "TOP",
"tongai paʻanga": "TOP",
"pa'anga": "TOP",
"paʻanga tongano": "TOP",
"パアンガ": "TOP",
"통가 팡가": "TOP",
@ -4216,6 +4220,7 @@
"özbekistan somu": "UZS",
"узбецький сум": "UZS",
"venezuelan digital bolívar": "VED",
"bolivar numérique": "VED",
"sovereign bolivar": "VES",
"bolívar soberano": "VES",
"bolivar souverain": "VES",
@ -4312,6 +4317,7 @@
"silberpreis": "XAG",
"silver as an investment": "XAG",
"plata como inversión": "XAG",
"argent d'investissement": "XAG",
"perak sebagai pelaburan": "XAG",
"silver som investering": "XAG",
"bạc trong đầu tư": "XAG",
@ -4916,11 +4922,7 @@
"KM": "BAM",
"bosenská konvertibilní marka": "BAM",
"mark cyfnewidiol": "BAM",
"bosnisch herzegowinische konvertible mark": "BAM",
"fening": "BAM",
"feninga": "BAM",
"bam": "BAM",
"km": "BAM",
"mark": "BAM",
"convertible mark": "BAM",
"marka convertible": "BAM",
"marco bosnio": "BAM",
@ -4937,6 +4939,7 @@
"bosnijos ir hercegovinos markė": "BAM",
"bosnische convertibele mark": "BAM",
"bosnische konvertibilna marka": "BAM",
"feninga": "BAM",
"marka de bòsnia e ercegovina": "BAM",
"marka konwertybilna": "BAM",
"marka transferowa": "BAM",
@ -4946,15 +4949,14 @@
"marca bosniacă convertibilă": "BAM",
"marcă convertibilă a bosniei şi herţegovinei": "BAM",
"marcă convertibilă a bosniei și herțegovinei": "BAM",
"bam": "BAM",
"боснийская конвертируемая марка": "BAM",
"боснийская марка": "BAM",
"валюта боснии и герцеговины": "BAM",
"конвертируемая марка боснии и герцеговины": "BAM",
"марка": "BAM",
"konvertibilna marka bosne in hercegovine": "BAM",
"босанскохерцеговачка конвертибилна марка": "BAM",
"км": "BAM",
"марка у босни и херцеговини": "BAM",
"km": "BAM",
"konvertibel mark": "BAM",
"konvertibla mark": "BAM",
"கன்வர்டிபிள் மார்க்கு": "BAM",
@ -4983,7 +4985,7 @@
"பார்படோஸ் டாலர்": "BBD",
"৳": "BDT",
"така": "BDT",
"টাকা": "BDT",
"বাংলাদেশী টাকা": "BDT",
"bdt": [
"BTN",
"BDT"
@ -5029,7 +5031,6 @@
"bulgariska leva": "BGN",
"பல்காரிய லெவ்": "BGN",
"bulgar levi": "BGN",
"лв": "BGN",
"الدينار البحريني": "BHD",
"BD": "BHD",
"bhd": "BHD",
@ -5128,7 +5129,6 @@
"ブルネイドル": "BND",
"브루나이 링깃": "BND",
"ബ്രൂണെയ് ഡോളർ": "BND",
"dolar brunei": "BND",
"dólar bruneíno": "BND",
"dólar do brunei": "BND",
"валюта брунея": "BND",
@ -5669,6 +5669,7 @@
"franco di gibuti": "DJF",
"지부티프랑": "DJF",
"djiboutische frank": "DJF",
"franc jibotian": "DJF",
"franco djibutiano": "DJF",
"franco djibutiense": "DJF",
"franco do djibuti": "DJF",
@ -5755,6 +5756,17 @@
"валюта алжира": "DZD",
"அல்ஜீரிய தினார்": "DZD",
"الجنية المصري": "EGP",
"£": [
"SYP",
"SSP",
"SHP",
"SDG",
"LBP",
"GIP",
"GBP",
"FKP",
"EGP"
],
"LE": "EGP",
"الجنيه المصري": "EGP",
"ج.م": "EGP",
@ -5806,9 +5818,7 @@
"ern": "ERN",
"nkf": "ERN",
"eritrea nagfo": "ERN",
"nafka eritrea": "ERN",
"מטבע אריתריאה": "ERN",
"nafka": "ERN",
"nakfa eritreo": "ERN",
"エリトリア・ナクファ": "ERN",
"낙파": "ERN",
@ -5880,16 +5890,6 @@
"фиџи долар": "FJD",
"долар фіджі": "FJD",
"FJ$": "FJD",
"£": [
"SYP",
"SSP",
"SHP",
"SDG",
"LBP",
"GIP",
"GBP",
"FKP"
],
"FK£": "FKP",
"lliura de les falkland": "FKP",
"lliura de les illes falkland": "FKP",
@ -6117,6 +6117,7 @@
"кветцал": "GTQ",
"кетсал": "GTQ",
"кетсаль": "GTQ",
"kvecal": "GTQ",
"гватемальський кецаль": "GTQ",
"دولار غوياني": "GYD",
"G$": "GYD",
@ -6257,10 +6258,6 @@
"indonesiar errupia": "IDR",
"roupie indonesienne": "IDR",
"רופיה אינדונזית": "IDR",
"gobang": "IDR",
"peser": "IDR",
"rupiah baru": "IDR",
"sepeser": "IDR",
"インドネシア・ルピア": "IDR",
"インドネシア・ルピー": "IDR",
"루피아": "IDR",
@ -6592,7 +6589,6 @@
"KES"
],
"šiling": "KES",
"سوم قرغيزستاني": "KGS",
"⃀": "KGS",
"som de kirguizistan": "KGS",
"som del kirguizistan": "KGS",
@ -6611,6 +6607,7 @@
"som quirguiz": "KGS",
"some": "KGS",
"валюта киргизии": "KGS",
"валюта кыргызстана": "KGS",
"кыргызский сом": "KGS",
"сом": [
"UZS",
@ -6971,6 +6968,7 @@
"ariary de madagáscar": "MGA",
"ариари": "MGA",
"валюта мадагаскара": "MGA",
"madagaskarski ariari": "MGA",
"малгашки ариари": "MGA",
"madagaskisk ariary": "MGA",
"ar": "MGA",
@ -7132,7 +7130,6 @@
"malediven rupie": "MVR",
"rupia maldiva": "MVR",
"maldív szigeteki rúfia": "MVR",
"rufiyaa maladewa": "MVR",
"ルフィア": "MVR",
"ルフィヤー": "MVR",
"루피야": "MVR",
@ -8161,6 +8158,7 @@
"الليرة السورية": "SYP",
"syr£": "SYP",
"الليره السورية": "SYP",
"ل.س": "SYP",
"ليرات سورية": "SYP",
"ليره سوريه": "SYP",
"সিরিয়ান পাউন্ড": "SYP",
@ -8324,6 +8322,7 @@
"dinar da tunísia": "TND",
"dinar tunisino": "TND",
"валюта туниса": "TND",
"milim": "TND",
"тунижански динар": "TND",
"د.ت": "TND",
"T$": "TOP",
@ -8605,13 +8604,19 @@
"buck": "USD",
"greenback": "USD",
"us $": "USD",
"$usd": "USD",
"american dollar": "USD",
"american dollars": "USD",
"u. s. dollar": "USD",
"u.s. dollar": [
"USN",
"USD"
],
"us dollars": "USD",
"us$": "USD",
"usa dollars": "USD",
"usd$": "USD",
"united states dollars": "USD",
"dólar americano": "USD",
"dólar de américa": "USD",
"dólar de ee.uu.": "USD",
@ -8622,6 +8627,7 @@
"dólar de los estados unidos": "USD",
"dólar norteamericano": "USD",
"dólares": "USD",
"dólares estadounidenses": "USD",
"$ us": "USD",
"dollar des états unis": "USD",
"dollar étatsunien": "USD",
@ -8830,7 +8836,6 @@
"silver as currency": "XAG",
"la plata como inversión": "XAG",
"la plata como inversion": "XAG",
"argent d'investissement": "XAG",
"argent en tant qu'investissement": "XAG",
"投資対象としての銀": "XAG",
"серебро как инвестиция": "XAG",
@ -9026,10 +9031,14 @@
"남아프리카공화국 랜드": "ZAR",
"par randas": "ZAR",
"pietų afrikos randas": "ZAR",
"dienvidāfrikas rands": "ZAR",
"dienvidāfrikas republikas rands": "ZAR",
"dienvidāfrikas rends": "ZAR",
"rands": "ZAR",
"rends": "ZAR",
"rand południowoafrykański": "ZAR",
"rand sul africano": "ZAR",
"rand sulafricano": "ZAR",
"rands": "ZAR",
"валюта юар": "ZAR",
"ранд юар": "ZAR",
"рэнд": "ZAR",
@ -9040,7 +9049,6 @@
"južnoafriški rand": "ZAR",
"sydafrikansk rand": "ZAR",
"південно африканський ранд": "ZAR",
"كواشا زامبية": "ZMW",
"kwacha de zàmbia": "ZMW",
"ngwee": "ZMW",
"sambia kwacha": "ZMW",
@ -9110,7 +9118,7 @@
"cs": "afghánský afghání",
"da": "Afghani",
"de": "Afghani",
"en": "Afghan afghani",
"en": "afghani",
"eo": "afgana afganio",
"es": "afgani afgano",
"et": "Afganistani afgaani",
@ -9465,14 +9473,14 @@
"cs": "Konvertibilní marka",
"da": "Konvertibilna mark",
"de": "konvertible Mark",
"en": "Bosnia and Herzegovina convertible mark",
"en": "convertible mark",
"eo": "konvertebla marko",
"es": "marco bosnioherzegovino",
"fi": "Bosnian ja Hertsegovinan vaihdettava markka",
"fr": "mark convertible de Bosnie-Herzégovine",
"gl": "Marco convertible",
"he": "מארק סחיר",
"hr": "Konvertibilna marka",
"hr": "konvertibilna marka",
"hu": "bosnyák konvertibilis márka",
"id": "Mark Bosnia dan Herzegovina",
"it": "marco bosniaco",
@ -9721,7 +9729,7 @@
"he": "דולר ברוניי",
"hr": "Brunejski dolar",
"hu": "brunei dollár",
"id": "Dolar Brunei Darussalam",
"id": "dolar Brunei",
"it": "dollaro del Brunei",
"ja": "ブルネイ・ドル",
"ko": "브루나이 달러",
@ -10463,7 +10471,8 @@
"sv": "Djiboutisk franc",
"tr": "Cibuti frangı",
"uk": "Франк Джибуті",
"he": "פרנק ג'יבוטי"
"he": "פרנק ג'יבוטי",
"oc": "Franc jibotian"
},
"DKK": {
"af": "Deense kroon",
@ -10681,7 +10690,8 @@
"sr": "етиопски бир",
"sv": "Etiopisk Birr",
"tr": "Birr",
"uk": "Ефіопський бир"
"uk": "Ефіопський бир",
"sl": "etiopski bir"
},
"EUR": {
"af": "Euro",
@ -11013,6 +11023,7 @@
"lt": "Gvinėjos frankas",
"ms": "Franc Guinea",
"nl": "Guineese frank",
"oc": "Franc guinean",
"pl": "frank gwinejski",
"pt": "Franco da Guiné",
"ru": "Гвинейский франк",
@ -11054,7 +11065,8 @@
"sv": "Quetzal",
"tr": "Guatemala quetzalı",
"uk": "Гватемальський кетсаль",
"cy": "Quetzal Gwatemala"
"cy": "Quetzal Gwatemala",
"sl": "gvatemalski kvecal"
},
"GYD": {
"ar": "دولار غوياني",
@ -11257,7 +11269,7 @@
"fr": "roupie indonésienne",
"hr": "Indonezijska rupija",
"hu": "indonéz rúpia",
"id": "Rupiah Indonesia",
"id": "rupiah Indonesia",
"it": "rupia indonesiana",
"ja": "ルピア",
"ko": "인도네시아 루피아",
@ -11402,7 +11414,7 @@
"sv": "Irakisk dinar",
"th": "ดินาร์อิรัก",
"tr": "Irak dinarı",
"uk": "Іракський динар",
"uk": "іракський динар",
"sl": "iraški dinar",
"ta": "இராக்கிய தீனார்"
},
@ -11636,7 +11648,7 @@
"sl": "kenijski šiling"
},
"KGS": {
"ar": "سوم قرغيزستاني",
"ar": "سوم قيرغيزستاني",
"bg": "Киргизстански сом",
"ca": "som kirguís",
"cs": "Kyrgyzský som",
@ -11825,6 +11837,8 @@
"en": "Kuwaiti dinar",
"eo": "kuvajta dinaro",
"es": "dinar kuwaití",
"et": "Kuveidi dinaar",
"eu": "Kuwaitar dinar",
"fi": "Kuwaitin dinaari",
"fr": "dinar koweïtien",
"he": "דינר כוויתי",
@ -12223,7 +12237,7 @@
"pl": "Ariary",
"pt": "ariary malgaxe",
"ru": "малагасийский ариари",
"sl": "Malgaški ariari",
"sl": "malgaški ariari",
"sr": "ариари",
"sv": "Madagaskisk ariary",
"tr": "Ariary",
@ -12455,7 +12469,7 @@
"fr": "rufiyaa",
"hr": "Maldivska rufija",
"hu": "maldív rúfia",
"id": "Rufiyaa",
"id": "rufiyaa Maladewa",
"it": "rufiyaa delle Maldive",
"ja": "ルフィヤ",
"ko": "몰디브 루피야",
@ -14014,7 +14028,7 @@
"pl": "Dinar tunezyjski",
"pt": "dinar tunisiano",
"ru": "тунисский динар",
"sl": "Tunizijski dinar",
"sl": "tunizijski dinar",
"sr": "туниски динар",
"sv": "Tunisisk dinar",
"tr": "Tunus dinarı",
@ -14400,12 +14414,13 @@
},
"VED": {
"en": "Digital bolívar",
"fr": "bolivar numérique",
"es": "Bolívar digital"
},
"VES": {
"en": "sovereign bolivar",
"es": "bolívar soberano",
"fr": "Bolivar souverain",
"fr": "bolivar souverain",
"hu": "venezuelai bolívar",
"ja": "ボリバル・ソベラノ",
"pt": "Bolívar soberano",
@ -14555,10 +14570,10 @@
"de": "Silberpreis",
"en": "silver as an investment",
"es": "La plata como inversión",
"fr": "argent d'investissement",
"ms": "Perak sebagai pelaburan",
"sv": "Silver som investering",
"vi": "Bạc như một khoản đầu tư",
"fr": "argent d'investissement",
"ja": "投資対象としての銀",
"ru": "серебро как инвестиция"
},
@ -14835,10 +14850,11 @@
"tr": "Güney Afrika randı",
"uk": "Ранд",
"cy": "Rand De Affrica",
"lv": "Dienvidāfrikas rands",
"sl": "južnoafriški rand"
},
"ZMW": {
"ar": "كواشا زامبية",
"ar": "كواشا زامبي",
"ca": "kwacha zambià",
"cs": "Zambijská kwacha",
"da": "Zambianske kwacha",
@ -14866,7 +14882,8 @@
"sv": "Zambisk kwacha",
"tr": "Zambiya kwachası",
"uk": "Замбійська квача",
"oc": "Kwacha zambian"
"oc": "Kwacha zambian",
"sl": "zambijska kvača"
},
"ZWL": {
"en": "Zimbabwean dollar",

File diff suppressed because it is too large Load diff

69
searx/data/locales.json Normal file
View file

@ -0,0 +1,69 @@
{
"LOCALE_NAMES": {
"af": "Afrikaans",
"ar": "العربية (Arabic)",
"bg": "Български (Bulgarian)",
"bn": "বাংলা (Bangla)",
"bo": "བོད་སྐད་ (Tibetan)",
"ca": "Català (Catalan)",
"cs": "Čeština (Czech)",
"cy": "Cymraeg (Welsh)",
"da": "Dansk (Danish)",
"de": "Deutsch (German)",
"dv": "ދިވެހި (Dhivehi)",
"el-GR": "Ελληνικά, Ελλάδα (Greek, Greece)",
"en": "English",
"eo": "Esperanto",
"es": "Español (Spanish)",
"et": "Eesti (Estonian)",
"eu": "Euskara (Basque)",
"fa-IR": "فارسی, ایران (Persian, Iran)",
"fi": "Suomi (Finnish)",
"fil": "Filipino",
"fr": "Français (French)",
"gl": "Galego (Galician)",
"he": "עברית (Hebrew)",
"hr": "Hrvatski (Croatian)",
"hu": "Magyar (Hungarian)",
"ia": "Interlingua",
"id": "Indonesia (Indonesian)",
"it": "Italiano (Italian)",
"ja": "日本語 (Japanese)",
"ko": "한국어 (Korean)",
"lt": "Lietuvių (Lithuanian)",
"lv": "Latviešu (Latvian)",
"ml": "മലയാളം (Malayalam)",
"ms": "Melayu (Malay)",
"nb-NO": "Norsk bokmål, Norge (Norwegian bokmål, Norway)",
"nl": "Nederlands (Dutch)",
"nl-BE": "Nederlands, België (Dutch, Belgium)",
"oc": "Occitan",
"pa": "ਪੰਜਾਬੀ (Punjabi)",
"pap": "Papiamento",
"pl": "Polski (Polish)",
"pt": "Português (Portuguese)",
"pt-BR": "Português, Brasil (Portuguese, Brazil)",
"ro": "Română (Romanian)",
"ru": "Русский (Russian)",
"si": "සිංහල (Sinhala)",
"sk": "Slovenčina (Slovak)",
"sl": "Slovenščina (Slovenian)",
"sr": "Српски (Serbian)",
"sv": "Svenska (Swedish)",
"szl": "Ślōnski (Silesian)",
"ta": "தமிழ் (Tamil)",
"te": "తెలుగు (Telugu)",
"th": "ไทย (Thai)",
"tr": "Türkçe (Turkish)",
"uk": "Українська (Ukrainian)",
"vi": "Tiếng việt (Vietnamese)",
"zh-HK": "中文, 中國香港特別行政區 (Chinese, Hong Kong SAR China)",
"zh-Hans-CN": "中文, 中国 (Chinese, China)",
"zh-Hant-TW": "中文, 台灣 (Chinese, Taiwan)"
},
"RTL_LOCALES": [
"ar",
"fa-IR",
"he"
]
}

View file

@ -1,7 +1,7 @@
{
"versions": [
"122.0",
"121.0"
"123.0",
"122.0"
],
"os": [
"Windows NT 10.0; Win64; x64",

View file

@ -562,7 +562,6 @@
"Q3396758": "daa",
"Q3414243": "qps",
"Q3421309": "R_J",
"Q3495543": "mbar",
"Q355198": "px",
"Q3674704": "km/s",
"Q3675550": "mm³",

View file

@ -57,11 +57,10 @@ def response(resp):
results.append(
{
'url': 'https://artic.edu/artworks/%(id)s' % result,
'title': result['title'] + " (%(date_display)s) // %(artist_display)s" % result,
'content': result['medium_display'],
'title': result['title'] + " (%(date_display)s) // %(artist_display)s" % result,
'content': "%(medium_display)s // %(dimensions)s" % result,
'author': ', '.join(result['artist_titles']),
'img_src': image_api + '/%(image_id)s/full/843,/0/default.jpg' % result,
'img_format': result['dimensions'],
'template': 'images.html',
}
)

74
searx/engines/ask.py Normal file
View file

@ -0,0 +1,74 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""Ask.com"""
from urllib.parse import urlencode
import dateutil
from lxml import html
from searx import utils
# Metadata
about = {
"website": "https://www.ask.com/",
"wikidata_id": 'Q847564',
"official_api_documentation": None,
"use_official_api": False,
"require_api_key": False,
"results": "HTML",
}
# Engine Configuration
categories = ['general']
paging = True
# Base URL
base_url = "https://www.ask.com/web"
def request(query, params):
query_params = {
"q": query,
"page": params["pageno"],
}
params["url"] = f"{base_url}?{urlencode(query_params)}"
return params
def response(resp):
start_tag = 'window.MESON.initialState = {'
end_tag = '}};'
dom = html.fromstring(resp.text)
script = utils.eval_xpath_getindex(dom, '//script', 0, default=None).text
pos = script.index(start_tag) + len(start_tag) - 1
script = script[pos:]
pos = script.index(end_tag) + len(end_tag) - 1
script = script[:pos]
json_resp = utils.js_variable_to_python(script)
results = []
for item in json_resp['search']['webResults']['results']:
pubdate_original = item.get('pubdate_original')
if pubdate_original:
pubdate_original = dateutil.parser.parse(pubdate_original)
metadata = [item.get(field) for field in ['category_l1', 'catsy'] if item.get(field)]
results.append(
{
"url": item['url'],
"title": item['title'],
"content": item['abstract'],
"publishedDate": pubdate_original,
# "img_src": item.get('image_url') or None, # these are not thumbs / to large
"metadata": ' | '.join(metadata),
}
)
return results

View file

@ -92,7 +92,7 @@ def response(resp):
metadata = json.loads(result.xpath('.//a[@class="iusc"]/@m')[0])
title = ' '.join(result.xpath('.//div[@class="infnmpt"]//a/text()')).strip()
img_format = ' '.join(result.xpath('.//div[@class="imgpt"]/div/span/text()')).strip()
img_format = ' '.join(result.xpath('.//div[@class="imgpt"]/div/span/text()')).strip().split(" · ")
source = ' '.join(result.xpath('.//div[@class="imgpt"]//div[@class="lnkw"]//a/text()')).strip()
results.append(
{
@ -103,7 +103,8 @@ def response(resp):
'content': metadata['desc'],
'title': title,
'source': source,
'img_format': img_format,
'resolution': img_format[0],
'img_format': img_format[1] if len(img_format) >= 2 else None,
}
)
return results

View file

@ -367,9 +367,10 @@ def _parse_images(json_resp):
'title': result['title'],
'content': result['description'],
'template': 'images.html',
'img_format': result['properties']['format'],
'resolution': result['properties']['format'],
'source': result['source'],
'img_src': result['properties']['url'],
'thumbnail_src': result['thumbnail']['src'],
}
result_list.append(item)

View file

@ -88,11 +88,10 @@ def response(resp):
results.append(
{
'url': 'https://artic.edu/artworks/%(id)s' % result,
'title': result['title'] + " (%(date_display)s) // %(artist_display)s" % result,
'content': result['medium_display'],
'title': result['title'] + " (%(date_display)s) // %(artist_display)s" % result,
'content': "%(medium_display)s // %(dimensions)s" % result,
'author': ', '.join(result['artist_titles']),
'img_src': image_api + '/%(image_id)s/full/843,/0/default.jpg' % result,
'img_format': result['dimensions'],
'template': 'images.html',
}
)

View file

@ -5,7 +5,6 @@
"""
# pylint: disable=use-dict-literal
from json import loads
from urllib.parse import urlencode
from dateutil import parser
@ -18,7 +17,7 @@ about = {
"results": 'JSON',
}
categories = ['it'] # optional
categories = ['it', 'packages'] # optional
paging = True
base_url = "https://hub.docker.com/"
@ -38,26 +37,24 @@ def response(resp):
resp: requests response object
'''
results = []
body = loads(resp.text)
body = resp.json()
# Make sure `summaries` isn't `null`
search_res = body.get("summaries")
if search_res:
for item in search_res:
result = {}
for item in body.get("summaries", []):
filter_type = item.get("filter_type")
is_official = filter_type in ["store", "official"]
# Make sure correct URL is set
filter_type = item.get("filter_type")
is_official = filter_type in ["store", "official"]
if is_official:
result["url"] = base_url + "_/" + item.get('slug', "")
else:
result["url"] = base_url + "r/" + item.get('slug', "")
result["title"] = item.get("name")
result["content"] = item.get("short_description")
result["publishedDate"] = parser.parse(item.get("updated_at") or item.get("created_at"))
result["thumbnail"] = item["logo_url"].get("large") or item["logo_url"].get("small")
results.append(result)
result = {
'template': 'packages.html',
'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"),
'package_name': item.get("name"),
'maintainer': item["publisher"].get("name"),
'publishedDate': parser.parse(item.get("updated_at") or item.get("created_at")),
'popularity': item.get("pull_count", "0") + " pulls",
'tags': [arch['name'] for arch in item["architectures"]],
}
results.append(result)
return results

View file

@ -96,7 +96,7 @@ def _image_result(result):
'content': '',
'thumbnail_src': result['thumbnail'],
'img_src': result['image'],
'img_format': '%s x %s' % (result['width'], result['height']),
'resolution': '%s x %s' % (result['width'], result['height']),
'source': result['source'],
}

View file

@ -110,7 +110,7 @@ def response(resp): # pylint: disable=too-many-branches
continue
img_src = size_data['url']
img_format = f"{size_data['width']} x {size_data['height']}"
resolution = f"{size_data['width']} x {size_data['height']}"
# For a bigger thumbnail, keep only the url_z, not the url_n
if 'n' in photo['sizes']['data']:
@ -131,7 +131,7 @@ def response(resp): # pylint: disable=too-many-branches
'img_src': img_src,
'thumbnail_src': thumbnail_src,
'source': source,
'img_format': img_format,
'resolution': resolution,
'template': 'images.html',
}
result['author'] = author.encode(errors='ignore').decode()

View file

@ -1,10 +1,11 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
"""
Github (IT)
# lint: pylint
"""Github (IT)
"""
from json import loads
from urllib.parse import urlencode
from dateutil import parser
# about
about = {
@ -20,42 +21,48 @@ about = {
categories = ['it', 'repos']
# search-url
search_url = 'https://api.github.com/search/repositories?sort=stars&order=desc&{query}' # noqa
search_url = 'https://api.github.com/search/repositories?sort=stars&order=desc&{query}'
accept_header = 'application/vnd.github.preview.text-match+json'
# do search-request
def request(query, params):
params['url'] = search_url.format(query=urlencode({'q': query}))
params['url'] = search_url.format(query=urlencode({'q': query}))
params['headers']['Accept'] = accept_header
return params
# get response from search-request
def response(resp):
results = []
search_res = loads(resp.text)
for item in resp.json().get('items', []):
content = [item.get(i) for i in ['language', 'description'] if item.get(i)]
# check if items are received
if 'items' not in search_res:
return []
# license can be None
lic = item.get('license') or {}
lic_url = None
if lic.get('spdx_id'):
lic_url = f"https://spdx.org/licenses/{lic.get('spdx_id')}.html"
# parse results
for res in search_res['items']:
title = res['name']
url = res['html_url']
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'),
# 'version': item.get('updated_at'),
'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'),
'license_name': lic.get('name'),
'license_url': lic_url,
'homepage': item.get('homepage'),
'source_code_url': item.get('clone_url'),
}
)
if res['description']:
content = res['description'][:500]
else:
content = ''
# append result
results.append({'url': url, 'title': title, 'content': content})
# return results
return results

View file

@ -103,7 +103,7 @@ def response(resp):
'title': item["result"]["page_title"],
'content': item["text_in_grid"]["snippet"],
'source': item["result"]["site_title"],
'img_format': f'{item["original_image"]["width"]} x {item["original_image"]["height"]}',
'resolution': f'{item["original_image"]["width"]} x {item["original_image"]["height"]}',
'img_src': item["original_image"]["url"],
'thumbnail_src': item["thumbnail"]["url"],
'template': 'images.html',

View file

@ -16,7 +16,7 @@ about = {
engine_type = 'online_dictionary'
categories = ['general']
url = "https://lingva.thedaviddelta.com/"
url = "https://lingva.thedaviddelta.com"
search_url = "{url}/api/v1/{from_lang}/{to_lang}/{query}"
@ -48,8 +48,6 @@ def response(resp):
infobox = ""
for translation in info["extraTranslations"]:
infobox += f"<b>{translation['type']}</b>"
for word in translation["list"]:
infobox += f"<dl><dt>{word['word']}</dt>"

101
searx/engines/livespace.py Executable file
View file

@ -0,0 +1,101 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""LiveSpace (Videos)
.. hint::
This engine only search for **live streams**!
"""
from urllib.parse import urlencode
from datetime import datetime
from babel import dates
about = {
"website": 'https://live.space',
"wikidata_id": None,
"official_api_documentation": None,
"use_official_api": True,
"require_api_key": False,
"results": 'JSON',
}
categories = ['videos']
base_url = 'https://backend.live.space'
# engine dependent config
paging = True
results_per_page = 10
def request(query, params):
args = {'page': params['pageno'] - 1, 'searchKey': query, 'size': results_per_page}
params['url'] = f"{base_url}/search/public/stream?{urlencode(args)}"
params['headers'] = {'Accept': 'application/json', 'Content-Type': 'application/json'}
return params
def response(resp):
results = []
json = resp.json()
now = datetime.now()
# for live videos
for result in json.get('result', []):
title = result.get("title")
thumbnailUrl = result.get("thumbnailUrl")
category = result.get("category/name")
username = result.get("user", {}).get("userName", "")
url = f'https://live.space/watch/{username}'
# stream tags
# currently the api seems to always return null before the first tag,
# so strip that unless it's not already there
tags = ''
if result.get("tags"):
tags = [x for x in result.get("tags").split(';') if x and x != 'null']
tags = ', '.join(tags)
content = []
if category:
content.append(f'category - {category}')
if tags and len(tags) > 0:
content.append(f'tags - {tags}')
# time & duration
start_time = None
if result.get("startTimeStamp"):
start_time = datetime.fromtimestamp(result.get("startTimeStamp") / 1000)
# for VODs (videos on demand)
end_time = None
if result.get("endTimeStamp"):
end_time = datetime.fromtimestamp(result.get("endTimeStamp") / 1000)
timestring = ""
if start_time:
delta = (now if end_time is None else end_time) - start_time
timestring = dates.format_timedelta(delta, granularity='second')
results.append(
{
'url': url,
'title': title,
'content': "No category or tags." if len(content) == 0 else ' '.join(content),
'author': username,
'length': (">= " if end_time is None else "") + timestring,
'publishedDate': start_time,
'thumbnail': thumbnailUrl,
'template': 'videos.html',
}
)
return results

59
searx/engines/mozhi.py Normal file
View file

@ -0,0 +1,59 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""Mozhi (alternative frontend for popular translation engines)"""
import random
import re
from urllib.parse import urlencode
about = {
"website": 'https://codeberg.org/aryak/mozhi',
"wikidata_id": None,
"official_api_documentation": 'https://mozhi.aryak.me/api/swagger/index.html',
"use_official_api": True,
"require_api_key": False,
"results": 'JSON',
}
engine_type = 'online_dictionary'
categories = ['general']
base_url = "https://mozhi.aryak.me"
mozhi_engine = "google"
re_transliteration_unsupported = "Direction '.*' is not supported"
def request(_query, params):
request_url = random.choice(base_url) if isinstance(base_url, list) else base_url
args = {'from': params['from_lang'][1], 'to': params['to_lang'][1], 'text': params['query'], 'engine': mozhi_engine}
params['url'] = f"{request_url}/api/translate?{urlencode(args)}"
return params
def response(resp):
translation = resp.json()
infobox = ""
if translation['target_transliteration'] and not re.match(
re_transliteration_unsupported, translation['target_transliteration']
):
infobox = f"<b>{translation['target_transliteration']}</b>"
if translation['word_choices']:
for word in translation['word_choices']:
infobox += f"<dl><dt>{word['word']}</dt>"
for example in word['examples_target']:
infobox += f"<dd>{re.sub(r'<|>', '', example)}</dd>"
infobox += "</dl>"
result = {
'infobox': translation['translated-text'],
'content': infobox,
}
return [result]

72
searx/engines/pixiv.py Normal file
View file

@ -0,0 +1,72 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""Pixiv (images)"""
from urllib.parse import urlencode
import random
# Engine metadata
about = {
"website": 'https://www.pixiv.net/',
"wikidata_id": 'Q306956',
"official_api_documentation": None,
"use_official_api": False,
"require_api_key": False,
"results": 'JSON',
}
# Engine configuration
paging = True
categories = ['images']
# Search URL
base_url = "https://www.pixiv.net/ajax/search/illustrations"
pixiv_image_proxies: list = []
def request(query, params):
query_params = {
"word": query,
"order": "date_d",
"mode": "all",
"p": params["pageno"],
"s_mode": "s_tag_full",
"type": "illust_and_ugoira",
"lang": "en",
}
params["url"] = f"{base_url}/{query}?{urlencode(query_params)}"
return params
def response(resp):
results = []
data = resp.json()
for item in data["body"]["illust"]["data"]:
image_url = item["url"]
pixiv_proxy = random.choice(pixiv_image_proxies)
proxy_image_url = image_url.replace("https://i.pximg.net", pixiv_proxy)
proxy_full_image_url = (
proxy_image_url.replace("/c/250x250_80_a2/", "/")
.replace("_square1200.jpg", "_master1200.jpg")
.replace("custom-thumb", "img-master")
.replace("_custom1200.jpg", "_master1200.jpg")
)
results.append(
{
"title": item.get("title"),
"url": proxy_full_image_url,
'content': item.get('alt'),
"author": f"{item.get('userName')} (ID: {item.get('userId')})",
"img_src": proxy_full_image_url,
"thumbnail_src": proxy_image_url,
"source": 'pixiv.net',
"template": "images.html",
}
)
return results

68
searx/engines/pypi.py Normal file
View file

@ -0,0 +1,68 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""pypi.org
"""
from urllib.parse import urlencode
from dateutil import parser
from lxml import html
from searx.utils import (
eval_xpath_getindex,
eval_xpath_list,
extract_text,
)
# about
about = {
"website": "https://pypi.org",
"wikidata_id": "Q2984686",
"official_api_documentation": "https://warehouse.readthedocs.io/api-reference/index.html",
"use_official_api": False,
"require_api_key": False,
"results": "HTML",
}
categories = ['it', 'packages']
# engine dependent config
first_page_num = 1
base_url = "https://pypi.org"
search_url = base_url + '/search/?{query}'
def request(query, params):
args = {
"q": query,
"page": params['pageno'],
}
params['url'] = search_url.format(query=urlencode(args))
return params
def response(resp):
results = []
dom = html.fromstring(resp.text)
for entry in eval_xpath_list(dom, '/html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"]'):
url = base_url + extract_text(eval_xpath_getindex(entry, './@href', 0)) # type: ignore
title = extract_text(eval_xpath_getindex(entry, './h3/span[@class="package-snippet__name"]', 0))
version = extract_text(eval_xpath_getindex(entry, './h3/span[@class="package-snippet__version"]', 0))
created_at = extract_text(
eval_xpath_getindex(entry, './h3/span[@class="package-snippet__created"]/time/@datetime', 0)
)
content = extract_text(eval_xpath_getindex(entry, './p', 0))
results.append(
{
"template": "packages.html",
"url": url,
"title": title,
'package_name': title,
"content": content,
"version": version,
'publishedDate': parser.parse(created_at), # type: ignore
}
)
return results

View file

@ -265,6 +265,8 @@ def parse_web_api(resp):
'template': 'images.html',
'thumbnail_src': thumbnail,
'img_src': img_src,
'resolution': f"{item['width']} x {item['height']}",
'img_format': item.get('thumb_type'),
}
)

View file

@ -122,7 +122,7 @@ def _images_response(json):
'url': summary['refererurl'],
'title': result['title'],
'img_src': result['url'],
'img_format': f"{summary['width']}x{summary['height']}",
'resolution': f"{summary['width']}x{summary['height']}",
'thumbnail_src': 'https://media.seekr.com/engine/rp/' + summary['tg'] + '/?src= ' + result['thumbnail'],
}
)

View file

@ -0,0 +1,91 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""SearXNG engine for `Void Linux binary packages`_. Void is a general purpose
operating system, based on the monolithic Linux kernel. Its package system
allows you to quickly install, update and remove software; software is provided
in binary packages or can be built directly from sources with the help of the
XBPS source packages collection.
.. _Void Linux binary packages: https://voidlinux.org/packages/
"""
import re
from urllib.parse import quote_plus
from searx.utils import humanize_bytes
about = {
'website': 'https://voidlinux.org/packages/',
'wikidata_id': 'Q19310966',
'use_official_api': True,
'official_api_documentation': None,
'require_api_key': False,
'results': 'JSON',
}
categories = ['packages', 'it']
base_url = "https://xq-api.voidlinux.org"
pkg_repo_url = "https://github.com/void-linux/void-packages"
void_arch = 'x86_64'
"""Default architecture to search for. For valid values see :py:obj:`ARCH_RE`"""
ARCH_RE = re.compile('aarch64-musl|armv6l-musl|armv7l-musl|x86_64-musl|aarch64|armv6l|armv7l|i686|x86_64')
"""Regular expresion that match a architecture in the query string."""
def request(query, params):
arch_path = ARCH_RE.search(query)
if arch_path:
arch_path = arch_path.group(0)
query = query.replace(arch_path, '').strip()
else:
arch_path = void_arch
params['url'] = f"{base_url}/v1/query/{arch_path}?q={quote_plus(query)}"
return params
def response(resp):
"""
At Void Linux, several packages sometimes share the same source code
(template) and therefore also have the same URL. Results with identical
URLs are merged as one result for SearXNG.
"""
packages = {}
for result in resp.json()['data']:
# 32bit and dbg packages don't have their own package templates
github_slug = re.sub(r"-(32bit|dbg)$", "", result['name'])
pkg_url = f"{pkg_repo_url}/tree/master/srcpkgs/{github_slug}"
pkg_list = packages.get(pkg_url, [])
pkg_list.append(
{
'title': result['name'],
'content': f"{result['short_desc']} - {humanize_bytes(result['filename_size'])}",
'package_name': result['name'],
'version': f"v{result['version']}_{result['revision']}",
'tags': result['repository'],
}
)
packages[pkg_url] = pkg_list
results = []
for pkg_url, pkg_list in packages.items():
results.append(
{
'url': pkg_url,
'template': 'packages.html',
'title': ' | '.join(x['title'] for x in pkg_list),
'content': pkg_list[0]['content'],
'package_name': ' | '.join(x['package_name'] for x in pkg_list),
'version': pkg_list[0]['version'],
'tags': [x['tags'] for x in pkg_list],
}
)
return results

View file

@ -8,6 +8,8 @@
from datetime import datetime
from urllib.parse import urlencode
from searx.utils import humanize_bytes
about = {
'website': 'https://wallhaven.cc/',
'official_api_documentation': 'https://wallhaven.cc/help/api',
@ -68,6 +70,7 @@ def response(resp):
json = resp.json()
for result in json['data']:
results.append(
{
'template': 'images.html',
@ -76,8 +79,10 @@ def response(resp):
'url': result['url'],
'img_src': result['path'],
'thumbnail_src': result['thumbs']['small'],
'img_format': result['resolution'],
'resolution': result['resolution'].replace('x', ' x '),
'publishedDate': datetime.strptime(result['created_at'], '%Y-%m-%d %H:%M:%S'),
'img_format': result['file_type'],
'filesize': humanize_bytes(result['file_size']),
}
)

View file

@ -62,7 +62,7 @@ def response(resp):
'title': title,
'content': item["snippet"],
'img_src': imageinfo["url"],
'img_format': f'{imageinfo["width"]} x {imageinfo["height"]}',
'resolution': f'{imageinfo["width"]} x {imageinfo["height"]}',
'thumbnail_src': imageinfo["thumburl"],
'template': 'images.html',
}

View file

@ -0,0 +1,63 @@
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""Yandex Music
.. _Countries where Yandex.Music is available: https://yandex.com/support/music/access.html
.. hint::
Access to music is limited to a few countries: `Countries where Yandex.Music
is available`_
"""
from urllib.parse import urlencode
# about
about = {
"website": 'https://music.yandex.ru',
"wikidata_id": 'Q4537983',
"official_api_documentation": None,
"use_official_api": False,
"require_api_key": False,
"results": 'JSON',
}
# engine dependent config
categories = ['music']
paging = True
# search-url
url = 'https://music.yandex.ru'
search_url = url + '/handlers/music-search.jsx'
# do search-request
def request(query, params):
args = {'text': query, 'page': params['pageno'] - 1}
params['url'] = search_url + '?' + urlencode(args)
return params
# get response from search-request
def response(resp):
results = []
search_res = resp.json()
# parse results
for result in search_res.get('tracks', {}).get('items', []):
if result['type'] == 'music':
track_id = result['id']
album_id = result['albums'][0]['id']
# append result
results.append(
{
'url': f'{url}/album/{album_id}/track/{track_id}',
'title': result['title'],
'content': f"[{result['albums'][0]['title']}] {result['artists'][0]['name']} - {result['title']}",
'iframe_src': f'{url}/iframe/track/{track_id}/{album_id}',
}
)
return results

View file

@ -1,12 +1,36 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: AGPL-3.0-or-later
# lint: pylint
"""Initialize :py:obj:`LOCALE_NAMES`, :py:obj:`RTL_LOCALES`.
"""
SearXNGs locale data
=====================
The variables :py:obj:`RTL_LOCALES` and :py:obj:`LOCALE_NAMES` are loaded from
:origin:`searx/data/locales.json` / see :py:obj:`locales_initialize` and
:ref:`update_locales.py`.
.. hint::
Whenever the value of :py:obj:`ADDITIONAL_TRANSLATIONS` or
:py:obj:`LOCALE_BEST_MATCH` is modified, the
:origin:`searx/data/locales.json` needs to be rebuild::
./manage data.locales
SearXNG's locale codes
======================
.. automodule:: searx.sxng_locales
:members:
SearXNGs locale implementations
================================
"""
from typing import Set, Optional, List
import os
import pathlib
from __future__ import annotations
from pathlib import Path
import babel
from babel.support import Translations
@ -15,7 +39,11 @@ import babel.core
import flask_babel
import flask
from flask.ctx import has_request_context
from searx import logger
from searx import (
data,
logger,
searx_dir,
)
logger = logger.getChild('locales')
@ -30,7 +58,7 @@ LOCALE_NAMES = {}
:meta hide-value:
"""
RTL_LOCALES: Set[str] = set()
RTL_LOCALES: set[str] = set()
"""List of *Right-To-Left* locales e.g. 'he' or 'fa-IR' (see
:py:obj:`locales_initialize`)."""
@ -52,7 +80,7 @@ LOCALE_BEST_MATCH = {
"pap": "pt-BR",
}
"""Map a locale we do not have a translations for to a locale we have a
translation for. By example: use Taiwan version of the translation for Hong
translation for. By example: use Taiwan version of the translation for Hong
Kong."""
@ -90,74 +118,37 @@ def get_translations():
return _flask_babel_get_translations()
def get_locale_descr(locale, locale_name):
"""Get locale name e.g. 'Français - fr' or 'Português (Brasil) - pt-BR'
:param locale: instance of :py:class:`Locale`
:param locale_name: name e.g. 'fr' or 'pt_BR' (delimiter is *underscore*)
"""
native_language, native_territory = _get_locale_descr(locale, locale_name)
english_language, english_territory = _get_locale_descr(locale, 'en')
if native_territory == english_territory:
english_territory = None
if not native_territory and not english_territory:
if native_language == english_language:
return native_language
return native_language + ' (' + english_language + ')'
result = native_language + ', ' + native_territory + ' (' + english_language
if english_territory:
return result + ', ' + english_territory + ')'
return result + ')'
_TR_LOCALES: list[str] = []
def _get_locale_descr(locale, language_code):
language_name = locale.get_language_name(language_code).capitalize()
if language_name and ('a' <= language_name[0] <= 'z'):
language_name = language_name.capitalize()
territory_name = locale.get_territory_name(language_code)
return language_name, territory_name
def get_translation_locales() -> list[str]:
"""Returns the list of transaltion locales (*underscore*). The list is
generated from the translation folders in :origin:`searx/translations`"""
global _TR_LOCALES # pylint:disable=global-statement
if _TR_LOCALES:
return _TR_LOCALES
tr_locales = []
for folder in (Path(searx_dir) / 'translations').iterdir():
if not folder.is_dir():
continue
if not (folder / 'LC_MESSAGES').is_dir():
continue
tr_locales.append(folder.name)
_TR_LOCALES = sorted(tr_locales)
return _TR_LOCALES
def locales_initialize(directory=None):
def locales_initialize():
"""Initialize locales environment of the SearXNG session.
- monkey patch :py:obj:`flask_babel.get_translations` by :py:obj:`get_translations`
- init global names :py:obj:`LOCALE_NAMES`, :py:obj:`RTL_LOCALES`
"""
directory = directory or pathlib.Path(__file__).parent / 'translations'
logger.debug("locales_initialize: %s", directory)
flask_babel.get_translations = get_translations
for tag, descr in ADDITIONAL_TRANSLATIONS.items():
locale = babel.Locale.parse(LOCALE_BEST_MATCH[tag], sep='-')
LOCALE_NAMES[tag] = descr
if locale.text_direction == 'rtl':
RTL_LOCALES.add(tag)
for tag in LOCALE_BEST_MATCH:
descr = LOCALE_NAMES.get(tag)
if not descr:
locale = babel.Locale.parse(tag, sep='-')
LOCALE_NAMES[tag] = get_locale_descr(locale, tag.replace('-', '_'))
if locale.text_direction == 'rtl':
RTL_LOCALES.add(tag)
for dirname in sorted(os.listdir(directory)):
# Based on https://flask-babel.tkte.ch/_modules/flask_babel.html#Babel.list_translations
if not os.path.isdir(os.path.join(directory, dirname, 'LC_MESSAGES')):
continue
tag = dirname.replace('_', '-')
descr = LOCALE_NAMES.get(tag)
if not descr:
locale = babel.Locale.parse(dirname)
LOCALE_NAMES[tag] = get_locale_descr(locale, dirname)
if locale.text_direction == 'rtl':
RTL_LOCALES.add(tag)
LOCALE_NAMES.update(data.LOCALES["LOCALE_NAMES"])
RTL_LOCALES.update(data.LOCALES["RTL_LOCALES"])
def region_tag(locale: babel.Locale) -> str:
@ -177,7 +168,7 @@ def language_tag(locale: babel.Locale) -> str:
return sxng_lang
def get_locale(locale_tag: str) -> Optional[babel.Locale]:
def get_locale(locale_tag: str) -> babel.Locale | None:
"""Returns a :py:obj:`babel.Locale` object parsed from argument
``locale_tag``"""
try:
@ -190,7 +181,7 @@ def get_locale(locale_tag: str) -> Optional[babel.Locale]:
def get_official_locales(
territory: str, languages=None, regional: bool = False, de_facto: bool = True
) -> Set[babel.Locale]:
) -> set[babel.Locale]:
"""Returns a list of :py:obj:`babel.Locale` with languages from
:py:obj:`babel.languages.get_official_languages`.
@ -376,7 +367,7 @@ def get_engine_locale(searxng_locale, engine_locales, default=None):
return default
def match_locale(searxng_locale: str, locale_tag_list: List[str], fallback: Optional[str] = None) -> Optional[str]:
def match_locale(searxng_locale: str, locale_tag_list: list[str], fallback: str | None = None) -> str | None:
"""Return tag from ``locale_tag_list`` that best fits to ``searxng_locale``.
:param str searxng_locale: SearXNG's internal representation of locale (de,
@ -425,7 +416,7 @@ def match_locale(searxng_locale: str, locale_tag_list: List[str], fallback: Opti
return get_engine_locale(searxng_locale, engine_locales, default=fallback)
def build_engine_locales(tag_list: List[str]):
def build_engine_locales(tag_list: list[str]):
"""From a list of locale tags a dictionary is build that can be passed by
argument ``engine_locales`` to :py:obj:`get_engine_locale`. This function
is mainly used by :py:obj:`match_locale` and is similar to what the

View file

@ -192,7 +192,7 @@ outgoing:
#
# Extra seconds to add in order to account for the time taken by the proxy
#
# extra_proxy_timeout: 10.0
# extra_proxy_timeout: 10
#
# uncomment below section only if you have more than one network interface
# which can be the source of outgoing search requests
@ -364,6 +364,11 @@ engines:
shortcut: arx
timeout: 4.0
- name: ask
engine: ask
shortcut: ask
disabled: true
# tmp suspended: dh key too small
# - name: base
# engine: base
@ -1044,7 +1049,7 @@ engines:
engine: lingva
shortcut: lv
# set lingva instance in url, by default it will use the official instance
# url: https://lingva.thedaviddelta.com/
# url: https://lingva.thedaviddelta.com
- name: lobste.rs
engine: xpath
@ -1153,6 +1158,17 @@ engines:
# collection: 'reviews' # name of the db collection
# key: 'name' # key in the collection to search for
- name: mozhi
engine: mozhi
base_url:
- https://mozhi.aryak.me
- https://translate.bus-hit.me
- https://nyc1.mz.ggtyler.dev
# mozhi_engine: google - see https://mozhi.aryak.me for supported engines
timeout: 4.0
shortcut: mz
disabled: true
- name: mwmbl
engine: mwmbl
# api_url: https://api.mwmbl.org
@ -1340,6 +1356,31 @@ engines:
url: https://thepiratebay.org/
timeout: 3.0
- name: pixiv
shortcut: pv
engine: pixiv
disabled: true
inactive: true
pixiv_image_proxies:
- pximg.example.org
# A proxy is required to load the images. Hosting an image proxy server
# for Pixiv:
# --> https://codeberg.org/VnPower/PixivFE/wiki/Hosting-an-image-proxy-server-for-Pixiv
# Proxies from public instances. Ask the public instances owners if they
# agree to receive traffic from SearXNG!
# --> https://codeberg.org/VnPower/PixivFE#instances
# --> https://github.com/searxng/searxng/pull/3192#issuecomment-1941095047
# image proxy of https://pixiv.cat
# - https://i.pixiv.cat
# image proxy of https://www.pixiv.pics
# - https://pximg.cocomi.eu.org
# image proxy of https://pixivfe.exozy.me
# - https://pximg.exozy.me
# image proxy of https://pixivfe.ducks.party
# - https://pixiv.ducks.party
# image proxy of https://pixiv.perennialte.ch
# - https://pximg.perennialte.ch
- name: podcastindex
engine: podcastindex
shortcut: podcast
@ -1416,23 +1457,7 @@ engines:
- name: pypi
shortcut: pypi
engine: xpath
paging: true
search_url: https://pypi.org/search/?q={query}&page={pageno}
results_xpath: /html/body/main/div/div/div/form/div/ul/li/a[@class="package-snippet"]
url_xpath: ./@href
title_xpath: ./h3/span[@class="package-snippet__name"]
content_xpath: ./p
suggestion_xpath: /html/body/main/div/div/div/form/div/div[@class="callout-block"]/p/span/a[@class="link"]
first_page_num: 1
categories: [it, packages]
about:
website: https://pypi.org
wikidata_id: Q2984686
official_api_documentation: https://warehouse.readthedocs.io/api-reference/index.html
use_official_api: false
require_api_key: false
results: HTML
engine: pypi
- name: qwant
qwant_categ: web
@ -1703,6 +1728,13 @@ engines:
engine: unsplash
shortcut: us
- name: yandex music
engine: yandex_music
shortcut: ydm
disabled: true
# https://yandex.com/support/music/access.html
inactive: true
- name: yahoo
engine: yahoo
shortcut: yh
@ -2037,6 +2069,13 @@ engines:
categories: videos
disabled: true
- name: livespace
engine: livespace
shortcut: ls
categories: videos
disabled: true
timeout: 5.0
- name: wordnik
engine: wordnik
shortcut: def
@ -2108,6 +2147,11 @@ engines:
engine: tootfinder
shortcut: toot
- name: voidlinux
engine: voidlinux
shortcut: void
disabled: true
- name: wallhaven
engine: wallhaven
# api_key: abcdefghijklmnopqrstuvwxyz

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

View file

@ -1 +1 @@
<svg width="92mm" height="92mm" viewBox="0 0 92 92"><path d="M39.581 41.421h-8.954v-1.215q0-2.034.818-3.597.819-1.587 3.448-4.018l1.588-1.439q1.414-1.29 2.059-2.43.67-1.142.67-2.283 0-1.736-1.191-2.703-1.19-.993-3.324-.993-2.01 0-4.341.844-2.332.818-4.862 2.455v-7.788q3.002-1.042 5.482-1.538t4.787-.496q6.053 0 9.228 2.48 3.175 2.456 3.175 7.194 0 2.43-.968 4.365-.967 1.91-3.299 4.118L42.31 35.79q-1.687 1.538-2.208 2.48-.52.918-.52 2.034zm-8.954 3.671h8.954v8.83h-8.954Z" style="line-height:1;-inkscape-font-specification:&quot;DejaVu Sans Bold&quot;" font-style="normal" font-variant="normal" font-weight="700" font-stretch="normal" font-size="50.80000305px" font-family="DejaVu Sans" display="inline" fill="#db3434" fill-opacity="1" stroke-width=".26458335"/><circle cx="35" cy="36.486" r="30" fill="none" fill-opacity="1" stroke="#db3434" stroke-width="10" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/><rect width="18.846" height="39.963" x="-12.021" y="80.49" ry="0" transform="rotate(-46.235)" opacity="1" fill="#db3434" fill-opacity="1" stroke="none" stroke-width="8" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/></svg>
<svg width="92mm" height="92mm" viewBox="0 0 92 92"><path d="M39.581 41.421h-8.954v-1.215q0-2.034.818-3.597.819-1.587 3.448-4.018l1.588-1.439q1.414-1.29 2.059-2.43.67-1.142.67-2.283 0-1.736-1.191-2.703-1.19-.993-3.324-.993-2.01 0-4.341.844-2.332.818-4.862 2.455v-7.788q3.002-1.042 5.482-1.538 2.48-.496 4.787-.496 6.053 0 9.228 2.48 3.175 2.456 3.175 7.194 0 2.43-.968 4.365-.967 1.91-3.299 4.118L42.31 35.79q-1.687 1.538-2.208 2.48-.52.918-.52 2.034zm-8.954 3.671h8.954v8.83h-8.954Z" style="line-height:1;-inkscape-font-specification:&quot;DejaVu Sans Bold&quot;" font-style="normal" font-variant="normal" font-weight="700" font-stretch="normal" font-size="50.80000305px" font-family="DejaVu Sans" display="inline" fill="#db3434" fill-opacity="1" stroke-width=".26458335"/><circle cx="35" cy="36.486" r="30" fill="none" fill-opacity="1" stroke="#db3434" stroke-width="10" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/><rect width="18.846" height="39.963" x="-12.021" y="80.49" ry="0" transform="rotate(-46.235)" opacity="1" fill="#db3434" fill-opacity="1" stroke="none" stroke-width="8" stroke-miterlimit="4" stroke-dasharray="none" stroke-opacity="1"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -1 +1 @@
<svg width="853.677" height="146.304" viewBox="0 0 225.869 38.71"><g aria-label="SearXNG" style="line-height:1.25" font-style="normal" font-weight="400" font-size="50.8px" font-family="sans-serif" fill="#487cff" fill-opacity="1" stroke="none" stroke-width=".264583"><path d="M56.494 102.704q-1.168-1.22-3.048-2.032t-4.42-.813q-3.15 0-5.08 1.32-1.93 1.27-1.93 3.455 0 2.337 3.708 3.607l7.671 2.641q3.963 1.321 5.842 3.404 1.88 2.083 1.88 5.13 0 4.065-2.185 7.011-2.184 2.896-5.943 4.42-3.76 1.524-8.484 1.524-5.334 0-9.042-1.778-3.709-1.829-5.537-5.131-.204-.356-.204-.711 0-.356.407-.61l4.013-2.438q.356-.254.762-.254.61 0 1.118.66 1.32 1.626 2.387 2.54 1.118.864 2.693 1.321 1.625.457 4.165.457 3.2 0 5.182-1.168 1.981-1.22 1.981-3.76 0-1.27-.914-2.082-.915-.864-2.947-1.575l-7.417-2.49q-3.657-1.218-5.588-3.555-1.88-2.388-1.88-5.436 0-3.759 2.134-6.655 2.134-2.895 5.69-4.47 3.607-1.575 7.874-1.575 4.369 0 7.67 1.575 3.354 1.524 5.182 3.962.407.508.407.762t-.356.458l-4.52 2.997q-.052.05-.204.05-.305 0-1.067-.761M77.004 132.37q-3.607 0-6.401-1.472-2.794-1.474-4.318-4.115-1.524-2.693-1.524-6.198 0-4.165 1.981-7.874 2.032-3.759 5.537-5.994 3.556-2.286 7.925-2.286 5.334 0 8.484 3.15t3.15 8.686q0 1.473-.204 2.845-.101.406-.355.61-.204.152-.813.152h-17.12q-.813 0-.813 2.184 0 2.388 1.524 3.709 1.575 1.27 4.064 1.27 1.93 0 3.607-.813t3.302-2.54q.254-.254.508-.254.153 0 .66.203l3.353 1.575q.61.203.61.66 0 .254-.254.66-2.946 3.303-5.893 4.573-2.895 1.27-7.01 1.27m6.451-16.56q1.22 0 1.22-1.981 0-1.93-1.169-3.251-1.168-1.372-3.251-1.372-2.54 0-4.521 1.93-1.93 1.88-2.235 4.674zM109.411 129.374q-3.048 2.997-8.331 2.997-3.556 0-5.588-1.829t-2.032-4.775q0-3.607 2.387-5.893 2.388-2.337 5.995-3.353 3.657-1.067 7.569-1.168l1.829-.153q.965 0 1.117-.965l.153-1.067q.05-.254.05-.812 0-3.048-3.505-3.048-4.013 0-5.943 3.15-.254.355-.66.355-.305 0-.458-.051l-4.927-1.168q-.508-.102-.508-.66 0-.509.254-1.017 3.352-5.486 12.649-5.486 5.486 0 8.026 1.93 2.591 1.93 2.591 5.334 0 .457-.102 1.473l-2.54 17.78q-.05.66-.203.813-.152.102-.711.102h-5.232q-.508 0-.66-.305t-.204-1.016l.05-1.32q0-.407-.253-.407-.254 0-.813.559m2.184-9.754v-.305q0-.203-.101-.254-.102-.101-.407-.05l-1.828.152q-2.947.203-5.487 1.473t-2.54 3.912q0 1.219.864 1.98.914.712 2.438.712 1.321 0 2.49-.356 1.168-.406 2.031-1.066 1.88-1.423 2.083-2.896zM123.864 131.863q-.61 0-.915-.356-.254-.355-.152-.914l3.505-24.943q.05-.457.152-.559.153-.152.56-.152h6.044q.915 0 .712 1.067l-.356 2.286v.203q0 .355.203.355.153 0 .457-.304 1.778-1.88 3.963-2.998 2.184-1.117 3.962-1.117 1.067 0 1.575.152.508.153.457.61l-.813 5.69q-.05.558-.203.71-.101.153-.406.102-1.727-.254-3.455-.254-1.32 0-2.794.711-1.473.66-2.54 1.778-1.016 1.067-1.168 2.134l-2.083 14.834q-.101.66-.355.812-.204.153-.966.153zM176.481 130.085q.457.813.457 1.219 0 .305-.254.457-.254.102-.762.102h-7.06q-.61 0-.966-.153-.305-.152-.508-.61l-5.639-11.734q-.254-.508-.508-.508-.152 0-.559.559l-9.042 11.836q-.254.407-.61.508-.304.102-1.066.102h-5.944q-1.016 0-1.016-.66 0-.458.762-1.525l13.005-16.306q.559-.61.559-1.067 0-.356-.102-.559l-8.484-16.56q-.152-.255-.152-.509 0-.508.762-.508h7.417q.66 0 .914.153.254.152.508.66l4.928 10.363q.152.407.355.407.204 0 .508-.407l8.027-10.566q.305-.407.559-.508.304-.102.965-.102h6.553q.61 0 .61.559 0 .406-.305.914l-12.599 15.647q-.508.66-.508.914 0 .203.153.508zM218.113 94.17q.355 0 .457.202.101.153.05.56l-5.13 36.372q-.05.356-.254.457-.153.102-.559.102h-5.182q-.66 0-1.168-.813l-13.106-22.708q-.153-.254-.305-.254-.305 0-.356.56l-3.15 22.402q-.1.508-.304.66-.153.153-.711.153h-5.588q-.813 0-.712-1.118l5.08-35.814q.102-.508.204-.61.152-.152.66-.152h6.147q.508 0 .762.254.305.203.559.711l11.988 21.184q.254.406.508.406.407 0 .458-.61l2.946-21.284q.05-.407.203-.508.203-.153.66-.153zM236.44 132.37q-4.572 0-7.925-1.93t-5.131-5.435q-1.727-3.556-1.727-8.331 0-6.3 2.489-11.532 2.49-5.283 7.061-8.382 4.572-3.099 10.516-3.099 4.064 0 7.163 1.575 3.15 1.575 4.876 4.166 1.728 2.54 1.83 5.435 0 .508-.102.762-.051.203-.254.254l-6.96 1.016h-.05q-.204 0-.356-.254-.102-.254-.254-1.016-.356-2.54-1.93-4.115-1.525-1.574-4.319-1.574-3.607 0-5.994 2.641-2.337 2.642-3.455 6.807-1.117 4.115-1.117 8.586 0 4.368 1.625 6.299 1.677 1.88 4.877 1.88 3.099 0 5.233-1.728t3.15-4.216l.304-1.423q.152-.254.152-.355 0-.305-.61-.305h-6.248q-.304 0-.406-.102-.102-.152-.05-.558l.456-4.166q.051-.559.508-.559l14.53.051q.609 0 .761.203.203.153.102.66l-2.49 17.577q-.05.66-.812.66h-1.524q-.457 0-.711-.152-.204-.152-.356-.61l-.864-3.708q-.05-.254-.355-.254t-.66.407q-1.677 2.083-4.37 3.454-2.692 1.372-6.603 1.372" style="-inkscape-font-specification:&quot;Libre Franklin&quot;" transform="translate(-29.722 -93.661)" font-style="normal" font-variant="normal" font-weight="400" font-stretch="normal" font-size="50.8px" font-family="Libre Franklin" fill="#487cff" fill-opacity="1" stroke-width=".264583"/></g></svg>
<svg width="853.677" height="146.304" viewBox="0 0 225.869 38.71"><g aria-label="SearXNG" style="line-height:1.25" font-style="normal" font-weight="400" font-size="50.8px" font-family="sans-serif" fill="#487cff" fill-opacity="1" stroke="none" stroke-width=".264583"><path d="M56.494 102.704q-1.168-1.22-3.048-2.032-1.88-.813-4.42-.813-3.15 0-5.08 1.32-1.93 1.27-1.93 3.455 0 2.337 3.708 3.607l7.671 2.641q3.963 1.321 5.842 3.404 1.88 2.083 1.88 5.13 0 4.065-2.185 7.011-2.184 2.896-5.943 4.42-3.76 1.524-8.484 1.524-5.334 0-9.042-1.778-3.709-1.829-5.537-5.131-.204-.356-.204-.711 0-.356.407-.61l4.013-2.438q.356-.254.762-.254.61 0 1.118.66 1.32 1.626 2.387 2.54 1.118.864 2.693 1.321 1.625.457 4.165.457 3.2 0 5.182-1.168 1.981-1.22 1.981-3.76 0-1.27-.914-2.082-.915-.864-2.947-1.575l-7.417-2.49q-3.657-1.218-5.588-3.555-1.88-2.388-1.88-5.436 0-3.759 2.134-6.655 2.134-2.895 5.69-4.47 3.607-1.575 7.874-1.575 4.369 0 7.67 1.575 3.354 1.524 5.182 3.962.407.508.407.762t-.356.458l-4.52 2.997q-.052.05-.204.05-.305 0-1.067-.761zM77.004 132.37q-3.607 0-6.401-1.472-2.794-1.474-4.318-4.115-1.524-2.693-1.524-6.198 0-4.165 1.981-7.874 2.032-3.759 5.537-5.994 3.556-2.286 7.925-2.286 5.334 0 8.484 3.15 3.15 3.149 3.15 8.686 0 1.473-.204 2.845-.101.406-.355.61-.204.152-.813.152h-17.12q-.813 0-.813 2.184 0 2.388 1.524 3.709 1.575 1.27 4.064 1.27 1.93 0 3.607-.813 1.677-.813 3.302-2.54.254-.254.508-.254.153 0 .66.203l3.353 1.575q.61.203.61.66 0 .254-.254.66-2.946 3.303-5.893 4.573-2.895 1.27-7.01 1.27zm6.451-16.56q1.22 0 1.22-1.981 0-1.93-1.169-3.251-1.168-1.372-3.251-1.372-2.54 0-4.521 1.93-1.93 1.88-2.235 4.674zM109.411 129.374q-3.048 2.997-8.331 2.997-3.556 0-5.588-1.829t-2.032-4.775q0-3.607 2.387-5.893 2.388-2.337 5.995-3.353 3.657-1.067 7.569-1.168l1.829-.153q.965 0 1.117-.965l.153-1.067q.05-.254.05-.812 0-3.048-3.505-3.048-4.013 0-5.943 3.15-.254.355-.66.355-.305 0-.458-.051l-4.927-1.168q-.508-.102-.508-.66 0-.509.254-1.017 3.352-5.486 12.649-5.486 5.486 0 8.026 1.93 2.591 1.93 2.591 5.334 0 .457-.102 1.473l-2.54 17.78q-.05.66-.203.813-.152.102-.711.102h-5.232q-.508 0-.66-.305-.153-.305-.204-1.016l.05-1.32q0-.407-.253-.407-.254 0-.813.559zm2.184-9.754v-.305q0-.203-.101-.254-.102-.101-.407-.05l-1.828.152q-2.947.203-5.487 1.473t-2.54 3.912q0 1.219.864 1.98.914.712 2.438.712 1.321 0 2.49-.356 1.168-.406 2.031-1.066 1.88-1.423 2.083-2.896zM123.864 131.863q-.61 0-.915-.356-.254-.355-.152-.914l3.505-24.943q.05-.457.152-.559.153-.152.56-.152h6.044q.915 0 .712 1.067l-.356 2.286v.203q0 .355.203.355.153 0 .457-.304 1.778-1.88 3.963-2.998 2.184-1.117 3.962-1.117 1.067 0 1.575.152.508.153.457.61l-.813 5.69q-.05.558-.203.71-.101.153-.406.102-1.727-.254-3.455-.254-1.32 0-2.794.711-1.473.66-2.54 1.778-1.016 1.067-1.168 2.134l-2.083 14.834q-.101.66-.355.812-.204.153-.966.153zM176.481 130.085q.457.813.457 1.219 0 .305-.254.457-.254.102-.762.102h-7.06q-.61 0-.966-.153-.305-.152-.508-.61l-5.639-11.734q-.254-.508-.508-.508-.152 0-.559.559l-9.042 11.836q-.254.407-.61.508-.304.102-1.066.102h-5.944q-1.016 0-1.016-.66 0-.458.762-1.525l13.005-16.306q.559-.61.559-1.067 0-.356-.102-.559l-8.484-16.56q-.152-.255-.152-.509 0-.508.762-.508h7.417q.66 0 .914.153.254.152.508.66l4.928 10.363q.152.407.355.407.204 0 .508-.407l8.027-10.566q.305-.407.559-.508.304-.102.965-.102h6.553q.61 0 .61.559 0 .406-.305.914l-12.599 15.647q-.508.66-.508.914 0 .203.153.508zM218.113 94.17q.355 0 .457.202.101.153.05.56l-5.13 36.372q-.05.356-.254.457-.153.102-.559.102h-5.182q-.66 0-1.168-.813l-13.106-22.708q-.153-.254-.305-.254-.305 0-.356.56l-3.15 22.402q-.1.508-.304.66-.153.153-.711.153h-5.588q-.813 0-.712-1.118l5.08-35.814q.102-.508.204-.61.152-.152.66-.152h6.147q.508 0 .762.254.305.203.559.711l11.988 21.184q.254.406.508.406.407 0 .458-.61l2.946-21.284q.05-.407.203-.508.203-.153.66-.153zM236.44 132.37q-4.572 0-7.925-1.93-3.353-1.93-5.131-5.435-1.727-3.556-1.727-8.331 0-6.3 2.489-11.532 2.49-5.283 7.061-8.382 4.572-3.099 10.516-3.099 4.064 0 7.163 1.575 3.15 1.575 4.876 4.166 1.728 2.54 1.83 5.435 0 .508-.102.762-.051.203-.254.254l-6.96 1.016h-.05q-.204 0-.356-.254-.102-.254-.254-1.016-.356-2.54-1.93-4.115-1.525-1.574-4.319-1.574-3.607 0-5.994 2.641-2.337 2.642-3.455 6.807-1.117 4.115-1.117 8.586 0 4.368 1.625 6.299 1.677 1.88 4.877 1.88 3.099 0 5.233-1.728 2.133-1.727 3.15-4.216l.304-1.423q.152-.254.152-.355 0-.305-.61-.305h-6.248q-.304 0-.406-.102-.102-.152-.05-.558l.456-4.166q.051-.559.508-.559l14.53.051q.609 0 .761.203.203.153.102.66l-2.49 17.577q-.05.66-.812.66h-1.524q-.457 0-.711-.152-.204-.152-.356-.61l-.864-3.708q-.05-.254-.355-.254t-.66.407q-1.677 2.083-4.37 3.454-2.692 1.372-6.603 1.372z" style="-inkscape-font-specification:&quot;Libre Franklin&quot;" transform="translate(-29.722 -93.661)" font-style="normal" font-variant="normal" font-weight="400" font-stretch="normal" font-size="50.8px" font-family="Libre Franklin" fill="#487cff" fill-opacity="1" stroke-width=".264583"/></g></svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

View file

@ -49,8 +49,7 @@ article.result-images .detail {
.result-images-labels {
color: var(--color-result-detail-font);
max-height: 16rem;
min-height: 16rem;
height: 19rem;
hr {
border-top: 1px solid var(--color-result-detail-hr);
@ -62,11 +61,16 @@ article.result-images .detail {
overflow: hidden;
text-overflow: ellipsis;
font-size: 0.9rem;
margin-bottom: 0;
}
p {
color: var(--color-result-detail-label-font);
font-size: 0.9rem;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
margin: 0.8rem 0;
span {
display: inline-block;
@ -82,6 +86,7 @@ article.result-images .detail {
p.result-content {
height: 2rem;
line-height: unset;
overflow: hidden;
text-overflow: ellipsis;
}

View file

@ -306,7 +306,8 @@ article[data-vim-selected].category-social {
}
}
.result-paper {
.result-paper,
.result-packages {
.attributes {
display: table;
border-spacing: 0.125rem;
@ -349,6 +350,12 @@ article[data-vim-selected].category-social {
}
}
.result-packages {
.attributes {
margin-top: 0.3rem;
}
}
.template_group_images {
display: flex;
flex-wrap: wrap;
@ -457,6 +464,17 @@ article[data-vim-selected].category-social {
background: var(--color-result-image-background);
}
.image_resolution {
position: absolute;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 50%);
padding: 0.3rem 0.5rem;
font-size: 0.9rem;
color: #fff;
border-top-left-radius: 0.3rem;
}
span.title,
span.source {
display: block;
@ -1076,7 +1094,8 @@ summary.title {
display: none;
}
.result-paper {
.result-paper,
.result-packages {
.attributes {
display: block;

View file

@ -1,9 +1,11 @@
# -*- coding: utf-8 -*-
'''List of SearXNG's locale codes.
This file is generated automatically by::
.. hint::
./manage pyenv.cmd searxng_extra/update/update_engine_traits.py
Don't modify this file, this file is generated by::
./manage data.traits
'''
sxng_locales = (

View file

@ -15,7 +15,7 @@
{% if autocomplete %}
<Url rel="suggestions" type="application/x-suggestions+json" method="{{ opensearch_method }}" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/>
{% endif %}
<Url rel="self" type="application/opensearchdescription+xml" method="{{ opensearch_method }}" template="{{ opensearch_url }}" />
<Url rel="self" type="application/opensearchdescription+xml" method="{{ opensearch_method }}" template="{{ url_for('opensearch', _external=True) }}" />
<Query role="example" searchTerms="SearXNG" />
<moz:SearchForm>{{ url_for('search', _external=True) }}</moz:SearchForm>
</OpenSearchDescription>

View file

@ -1,8 +1,9 @@
<article class="result result-images {% if result['category'] %}category-{{ result['category'] }}{% endif %}">{{- "" -}}
<a {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} href="{{ result.img_src }}">{{- "" -}}
<img class="image_thumbnail" {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} src="{% if result.thumbnail_src %}{{ image_proxify(result.thumbnail_src) }}{% else %}{{ image_proxify(result.img_src) }}{% endif %}" alt="{{ result.title|striptags }}" loading="lazy" width="200" height="200">{{- "" -}}
<span class="title">{{ result.title|striptags }}</span>{{- "" -}}
<span class="source">{{ result.parsed_url.netloc }}</span>{{- "" -}}
{%- if result.resolution %} <span class="image_resolution">{{ result.resolution }}</span> {%- endif -%}
<span class="title">{{ result.title|striptags }}</span>{{- "" -}}
<span class="source">{{- result.parsed_url.netloc -}}</span>{{- "" -}}
</a>{{- "" -}}
<div class="detail">{{- "" -}}
<a class="result-detail-close" href="#">{{ icon('close') }}</a>{{- "" -}}
@ -16,7 +17,9 @@
<p class="result-content">{%- if result.content %}{{ result.content|striptags }}{% else %}&nbsp;{% endif -%}</p>{{- "" -}}
<hr>{{- "" -}}
<p class="result-author">{%- if result.author %}<span>{{ _('Author') }}:</span>{{ result.author|striptags }}{% else %}&nbsp;{% endif -%}</p>{{- "" -}}
<p class="result-resolution">{%- if result.resolution %}<span>{{ _('Resolution') }}:</span>{{ result.resolution }}{% else %}&nbsp;{% endif -%}</p>{{- "" -}}
<p class="result-format">{%- if result.img_format %}<span>{{ _('Format') }}:</span>{{ result.img_format }}{% else %}&nbsp;{% endif -%}</p>{{- "" -}}
<p class="result-filesize">{%- if result.filesize %}<span>{{ _('Filesize') }}:</span>{{ result.filesize}}{% else %}&nbsp;{% endif -%}</p>{{- "" -}}
<p class="result-source">{%- if result.source %}<span>{{ _('Source') }}:</span>{{ result.source }}{% else %}&nbsp;{% endif -%}</p>{{- "" -}}
<p class="result-engine"><span>{{ _('Engine') }}:</span>{{ result.engine }}</p>{{- "" -}}{{- "" -}}
<p class="result-url"><span>{{ _('View source') }}:</span><a {% if results_on_new_tab %}target="_blank" rel="noopener noreferrer"{% else %}rel="noreferrer"{% endif %} href="{{ result.url }}">{{ result.url }}</a></p>{{- "" -}}

View file

@ -0,0 +1,67 @@
{%- from 'simple/macros.html' import result_header, result_sub_header, result_sub_footer, result_footer with context -%}
{{ result_header(result, favicons, image_proxify) -}}
{%- if result.content -%}<p class="content">{{- result.content|safe -}}</p>{%- endif -%}
<div class="attributes">{{- '' -}}
<div class="result_package_name">{{- '' -}}
<span>{{ _('Name') }}:</span>{{- '' -}}
<span><code>{{- result.package_name -}}</code></span>{{- '' -}}
</div>
{%- if result.version -%}
<div class="result_version">{{- '' -}}
<span>{{- _('Version') }}:</span>{{- '' -}}
<span><strong>{{ result.version }}</strong></span>{{- '' -}}
</div>
{%- endif -%}
{%- if result.maintainer -%}
<div class="result_maintainer">{{- '' -}}
<span>{{ _('Maintainer') }}:</span>{{- '' -}}
<span>{{ result.maintainer }}</span>{{- '' -}}
</div>
{%- endif -%}
{%- if result.publishedDate -%}
<div class="result_pubdate">{{- '' -}}
<span>{{ _('Updated at') }}:</span>{{- '' -}}
<span><time datetime="{{ result.pubdate }}">{{ result.publishedDate }}</time></span>{{- '' -}}
</div>
{%- endif -%}
{%- if result.tags -%}
<div class="result_tags">{{- '' -}}
<span>{{ _('Tags') }}:</span>{{- '' -}}
<span>{{ result.tags|join(', ') }}</span>{{- '' -}}
</div>
{%- endif -%}
{%- if result.popularity -%}
<div class="result_popularity">{{- '' -}}
<span>{{ _('Popularity') }}:</span>{{- '' -}}
<span>{{ result.popularity }}</span>{{- '' -}}
</div>
{%- endif -%}
{%- if result.license_name -%}
<div class="result_license">{{- '' -}}
<span>{{- _('License') -}}:</span>
{%- if result.license_url -%}
<span><a href="{{ result.license_url }}" target="_blank">{{ result.license_name }}</a></span>
{%- else -%}
<span>{{ result.license_name }}</span>
{%- endif -%}
</div>
{%- endif -%}
{%- if result.homepage or result.source_code_url -%}
<div class="result_project">{{- '' -}}
<span>{{ _('Project') }}</span>
<span>{{- '' -}}
{%- if result.homepage -%}
<a href="{{ result.homepage }}" target="_blank">{{ _('Project homepage') }}</a>
{%- endif -%}
{%- if result.homepage and result.source_code_url %} | {% endif -%}
{%- if result.source_code_url -%}
<a href="{{ result.source_code_url }}" target="_blank">{{ _('Source code') }}</a>
{%- endif -%}
</span>{{- '' -}}
</div>
{%- endif -%}
</div>{{- '' -}}
<div class="break"></div>
{{- result_footer(result) }}

View file

@ -12,17 +12,16 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-08 15:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Afrikaans <https://translate.codeberg.org/projects/searxng/"
"searxng/af/>\n"
"Language: af\n"
"Language-Team: Afrikaans "
"<https://translate.codeberg.org/projects/searxng/searxng/af/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -150,6 +149,16 @@ msgstr "lig"
msgid "dark"
msgstr "donker"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Aangaande"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Geen item gevind"
@ -444,10 +453,6 @@ msgstr "Gaan na %(search_page)s."
msgid "search page"
msgstr "soekblad"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Aangaande"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Skenk"
@ -1469,3 +1474,4 @@ msgstr "versteek video"
#~ "use another query or search in "
#~ "more categories."
#~ msgstr ""

View file

@ -13,22 +13,22 @@
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
# Cavemanly <k.adel.2m@protonmail.com>, 2023.
# Rick1029 <yoshibear1029@gmail.com>, 2024.
# nebras <johndevand@tutanota.com>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Arabic <https://translate.codeberg.org/projects/searxng/"
"searxng/ar/>\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-10 07:07+0000\n"
"Last-Translator: nebras <johndevand@tutanota.com>\n"
"Language: ar\n"
"Language-Team: Arabic "
"<https://translate.codeberg.org/projects/searxng/searxng/ar/>\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : "
"n%100>=3 && n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
"X-Generator: Weblate 5.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -156,6 +156,16 @@ msgstr "فاتح"
msgid "dark"
msgstr "مظلم"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "حَول"
#: searx/webapp.py:332
msgid "No item found"
msgstr "تعذر العثور على عناصر"
@ -443,10 +453,6 @@ msgstr "إذهب إلى %(search_page)s."
msgid "search page"
msgstr "صفحة البحث"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "حَول"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "تبرُّع"
@ -972,15 +978,15 @@ msgstr ""
#: searx/templates/simple/preferences/cookies.html:46
msgid "Copy preferences hash"
msgstr ""
msgstr "نسخ تجزئة التفضيلات"
#: searx/templates/simple/preferences/cookies.html:57
msgid "Insert copied preferences hash (without URL) to restore"
msgstr ""
msgstr "أدخل تجزئة التفضيلات المنسوخة (بدون عنوان URL) لاستعادتها"
#: searx/templates/simple/preferences/cookies.html:59
msgid "Preferences hash"
msgstr ""
msgstr "تجزئة التفضيلات"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "Open Access DOI resolver"
@ -1721,3 +1727,4 @@ msgstr "إخفاء الفيديو"
#~ "لم نتوصل إلى العثور على أية نتيجة."
#~ " الرجاء إعادة صياغة طلب البحث أو "
#~ "إبحث مع تحديد أكثر من فئة."

View file

@ -12,19 +12,18 @@
# Salif Mehmed <mail@salif.eu>, 2023, 2024.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Bulgarian <https://translate.codeberg.org/projects/searxng/"
"searxng/bg/>\n"
"Language: bg\n"
"Language-Team: Bulgarian "
"<https://translate.codeberg.org/projects/searxng/searxng/bg/>\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.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -152,6 +151,16 @@ msgstr "светъл"
msgid "dark"
msgstr "тъмен"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Относно"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Не е намерен артикул"
@ -439,10 +448,6 @@ msgstr "Отиди на %(search_page)s."
msgid "search page"
msgstr "търси страница"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Относно"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Дарете"
@ -1724,3 +1729,4 @@ msgstr "скрий видеото"
#~ "не намерихме резултати. Моля пробвайте "
#~ "други ключови думи или търсете в "
#~ "повече категории."

View file

@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-01-31 19:06+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: bn\n"
@ -150,6 +150,16 @@ msgstr "সাদা"
msgid "dark"
msgstr "কালো"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "সম্বন্ধে"
#: searx/webapp.py:332
msgid "No item found"
msgstr "কোন আইটেম পাওয়া যায়নি"
@ -439,10 +449,6 @@ msgstr "%(search_page)s এ যান৷"
msgid "search page"
msgstr "অনুসন্ধান পৃষ্ঠা"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "সম্বন্ধে"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "দান করুন"

View file

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-06-02 07:07+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: bo\n"
@ -147,6 +147,16 @@ msgstr ""
msgid "dark"
msgstr ""
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr ""
#: searx/webapp.py:332
msgid "No item found"
msgstr "རྣམ་གྲངས་གང་ཡང་རྙེད་རྒྱུ་མ་བྱུང་།"
@ -418,10 +428,6 @@ msgstr "%(search_page)s ལ་བསྐྱོད།"
msgid "search page"
msgstr "འཚོལ་བཤེར་དྲ་ངོས།"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr ""
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr ""

View file

@ -19,7 +19,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-12-08 07:07+0000\n"
"Last-Translator: Ivan Gabaldon <admin@inetol.net>\n"
"Language: ca\n"
@ -156,6 +156,16 @@ msgstr "clar"
msgid "dark"
msgstr "fosc"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Quant a"
#: searx/webapp.py:332
msgid "No item found"
msgstr "No s'ha trobat cap element"
@ -443,10 +453,6 @@ msgstr "Ves a %(search_page)s."
msgid "search page"
msgstr "pàgina de cerca"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Quant a"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Donar"

View file

@ -17,9 +17,9 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-17 18:56+0000\n"
"Last-Translator: Fjuro <ifjuro@proton.me>\n"
"Language-Team: Czech <https://translate.codeberg.org/projects/searxng/"
"searxng/cs/>\n"
"Language: cs\n"
@ -156,6 +156,16 @@ msgstr "světlý"
msgid "dark"
msgstr "tmavý"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr "Spolehlivost"
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "O SearXNG"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Nic nenalezeno"
@ -443,10 +453,6 @@ msgstr "Přejít na %(search_page)s."
msgid "search page"
msgstr "stránka vyhledávání"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "O SearXNG"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Dar"

View file

@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-11-23 06:13+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: cy\n"
@ -150,6 +150,16 @@ msgstr "golau"
msgid "dark"
msgstr "tywyll"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Ynghylch"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Ni chanfuwyd eitem"
@ -428,10 +438,6 @@ msgstr "Mynd i %(search_page)s."
msgid "search page"
msgstr "tudalen chwilio"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Ynghylch"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Rhoddi"

View file

@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-09-21 05:53+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: da\n"
@ -148,6 +148,16 @@ msgstr "lys"
msgid "dark"
msgstr "mørk"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Om"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Intet fundet"
@ -438,10 +448,6 @@ msgstr "Gå til 1%(search_page)s."
msgid "search page"
msgstr "søgeside"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Om"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Donere"

View file

@ -24,8 +24,8 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-13 11:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: German <https://translate.codeberg.org/projects/searxng/"
"searxng/de/>\n"
@ -162,6 +162,16 @@ msgstr "hell"
msgid "dark"
msgstr "dunkel"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr "Laufzeit"
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Über"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Keine Einträge gefunden"
@ -456,10 +466,6 @@ msgstr "Gehe zu %(search_page)s."
msgid "search page"
msgstr "Suchseite"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Über"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Spenden"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2022-11-04 07:18+0000\n"
"Last-Translator: Landhoo School Students "
"<landhooschoolstudents@gmail.com>\n"
@ -145,6 +145,16 @@ msgstr "އަލި"
msgid "dark"
msgstr "އަނދިރި"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr ""
#: searx/webapp.py:332
msgid "No item found"
msgstr ""
@ -416,10 +426,6 @@ msgstr ""
msgid "search page"
msgstr ""
#: searx/templates/simple/base.html:49
msgid "About"
msgstr ""
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr ""

View file

@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-12-21 20:16+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: el_GR\n"
@ -152,6 +152,16 @@ msgstr "φωτεινό"
msgid "dark"
msgstr "σκοτεινό"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Σχετικά με το SearXNG"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Δεν βρέθηκαν αντικείμενα"
@ -446,10 +456,6 @@ msgstr "Μετάβαση στο %(search_page)s."
msgid "search page"
msgstr "σελίδα αναζήτησης"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Σχετικά με το SearXNG"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Κάνε δωρεά"

View file

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2014-01-30 15:22+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: en\n"
@ -143,6 +143,16 @@ msgstr ""
msgid "dark"
msgstr ""
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr ""
#: searx/webapp.py:332
msgid "No item found"
msgstr ""
@ -414,10 +424,6 @@ msgstr ""
msgid "search page"
msgstr ""
#: searx/templates/simple/base.html:49
msgid "About"
msgstr ""
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr ""

View file

@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-01-21 08:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: eo\n"
@ -153,6 +153,16 @@ msgstr "hela"
msgid "dark"
msgstr "malhela"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Pri"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Nenio trovita"
@ -444,10 +454,6 @@ msgstr "Iri al %(search_page)s."
msgid "search page"
msgstr "Serĉopaĝo"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Pri"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Donacu"

View file

@ -31,9 +31,9 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-15 16:56+0000\n"
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
"Language-Team: Spanish <https://translate.codeberg.org/projects/searxng/"
"searxng/es/>\n"
"Language: es\n"
@ -169,6 +169,16 @@ msgstr "claro"
msgid "dark"
msgstr "oscuro"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr "Tiempo de actividad"
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Acerca de"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Ningún artículo encontrado"
@ -461,10 +471,6 @@ msgstr "Ir a %(search_page)s."
msgid "search page"
msgstr "página de búsqueda"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Acerca de"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Donar"

View file

@ -13,7 +13,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-10-08 16:53+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: et\n"
@ -150,6 +150,16 @@ msgstr "herge"
msgid "dark"
msgstr "pime"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Teave"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Üksust ei leitud"
@ -430,10 +440,6 @@ msgstr "Mine %(search_page)s."
msgid "search page"
msgstr "otsinguleht"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Teave"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Anneta"

View file

@ -13,19 +13,18 @@
# alexgabi <alexgabi@disroot.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Basque <https://translate.codeberg.org/projects/searxng/"
"searxng/eu/>\n"
"Language: eu\n"
"Language-Team: Basque "
"<https://translate.codeberg.org/projects/searxng/searxng/eu/>\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.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -153,6 +152,16 @@ msgstr "argia"
msgid "dark"
msgstr "iluna"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Honi buruz"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Ez da elementurik aurkitu"
@ -444,10 +453,6 @@ msgstr "%(search_page)s(e)ra joan."
msgid "search page"
msgstr "bilaketa orria"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Honi buruz"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Lagundu diruz"
@ -1716,3 +1721,4 @@ msgstr "ezkutatu bideoa"
#~ "ez dugu emaitzarik aurkitu. Mesedez "
#~ "beste kontsulta bat egin edo bilatu "
#~ "kategoria gehiagotan."

View file

@ -15,19 +15,18 @@
# arashe22 <arashe22@proton.me>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-05 08:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Persian <https://translate.codeberg.org/projects/searxng/"
"searxng/fa/>\n"
"Language: fa_IR\n"
"Language-Team: Persian "
"<https://translate.codeberg.org/projects/searxng/searxng/fa/>\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.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -155,6 +154,16 @@ msgstr "روشن"
msgid "dark"
msgstr "تاریک"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "درباره"
#: searx/webapp.py:332
msgid "No item found"
msgstr "چیزی پیدا نشد"
@ -444,10 +453,6 @@ msgstr "برو به %(search_page)s."
msgid "search page"
msgstr "صفحهٔ جست‌وجو"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "درباره"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "اهداء کردن"
@ -1723,3 +1728,4 @@ msgstr "پنهان‌سازی ویدئو"
#~ "چیزی پیدا نشد. لطفاً ورودی دیگری "
#~ "را بیازمایید یا در دسته‌‌های بیش‌تری "
#~ "جست‌وجو کنید."

View file

@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-01-18 04:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language: fi\n"
@ -149,6 +149,16 @@ msgstr "vaalea"
msgid "dark"
msgstr "tumma"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Tietoa SearXNG:stä"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Tietuetta ei löytynyt"
@ -440,10 +450,6 @@ msgstr "Siirry %(search_page)s."
msgid "search page"
msgstr "hakusivulle"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Tietoa SearXNG:stä"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Lahjoita"

View file

@ -8,27 +8,29 @@
# Hachiki <ninonakano408@gmail.com>, 2022.
# return42 <markus.heiser@darmarit.de>, 2023, 2024.
# johnmartzbuntia <johnmartibuntia@jmtb.xyz>, 2024.
# hankskyjames777 <iamjuanz30312@gmail.com>, 2024.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-01-21 08:56+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-20 11:01+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Filipino <https://translate.codeberg.org/projects/searxng/"
"searxng/fil/>\n"
"Language: fil\n"
"Language-Team: Filipino "
"<https://translate.codeberg.org/projects/searxng/searxng/fil/>\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n==2 || n==3) || (n % 10 != 4"
" || n % 10 != 6 || n % 10 != 9);\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==2 || n==3) || (n % 10 != 4 || "
"n % 10 != 6 || n % 10 != 9);\n"
"X-Generator: Weblate 5.4\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
#: searx/searxng.msg
msgid "without further subgrouping"
msgstr ""
msgstr "nang walang karagdagang pagbubuklod ng data"
#. CONSTANT_NAMES['DEFAULT_CATEGORY']
#: searx/searxng.msg
@ -150,6 +152,16 @@ msgstr "maliwanag"
msgid "dark"
msgstr "madilim"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr "\"uptime\""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Tungkol"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Walang nakita na aytem"
@ -440,10 +452,6 @@ msgstr "Pumunta sa %(search_page)s."
msgid "search page"
msgstr "ang pahina ng paghahanap"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Tungkol"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Magbigay"
@ -667,7 +675,7 @@ msgstr "Iskor"
#: searx/templates/simple/stats.html:27
msgid "Result count"
msgstr ""
msgstr "bilang ng mga resulta"
#: searx/templates/simple/preferences/engines.html:25
#: searx/templates/simple/stats.html:28
@ -689,11 +697,11 @@ msgstr "HTTP"
#: searx/templates/simple/stats.html:61
msgid "Processing"
msgstr ""
msgstr "prumoproseso"
#: searx/templates/simple/stats.html:99
msgid "Warnings"
msgstr ""
msgstr "Mga babala"
#: searx/templates/simple/stats.html:99
msgid "Errors and exceptions"
@ -701,7 +709,7 @@ msgstr "Mga error at exceptions"
#: searx/templates/simple/stats.html:105
msgid "Exception"
msgstr ""
msgstr "pagkakabigo/eksepsyon"
#: searx/templates/simple/stats.html:107
msgid "Message"
@ -709,36 +717,36 @@ msgstr "Mensahe"
#: searx/templates/simple/stats.html:109
msgid "Percentage"
msgstr ""
msgstr "porsyento"
#: searx/templates/simple/stats.html:111
msgid "Parameter"
msgstr ""
msgstr "pamantayan"
#: searx/templates/simple/result_templates/files.html:36
#: searx/templates/simple/stats.html:119
msgid "Filename"
msgstr ""
msgstr "pangalan ng file"
#: searx/templates/simple/stats.html:120
msgid "Function"
msgstr ""
msgstr "gawain"
#: searx/templates/simple/stats.html:121
msgid "Code"
msgstr ""
msgstr "code"
#: searx/templates/simple/stats.html:128
msgid "Checker"
msgstr ""
msgstr "tagasuri"
#: searx/templates/simple/stats.html:131
msgid "Failed test"
msgstr ""
msgstr "Nabigong Pagsusulit"
#: searx/templates/simple/stats.html:132
msgid "Comment(s)"
msgstr ""
msgstr "(mga) komento"
#: searx/templates/simple/elements/apis.html:3
msgid "Download results"
@ -746,7 +754,7 @@ msgstr "I-download ang mga resulta"
#: searx/templates/simple/elements/engines_msg.html:7
msgid "Messages from the search engines"
msgstr ""
msgstr "Mga mensahe mula sa mga search engine"
#: searx/templates/simple/elements/engines_msg.html:12
msgid "Error!"
@ -763,12 +771,12 @@ msgstr "URL ng Search"
#: searx/templates/simple/elements/search_url.html:4
#: searx/templates/simple/preferences/cookies.html:54
msgid "Copied"
msgstr ""
msgstr "nakopya"
#: searx/templates/simple/elements/search_url.html:4
#: searx/templates/simple/preferences/cookies.html:54
msgid "Copy"
msgstr ""
msgstr "kopyahin"
#: searx/templates/simple/elements/suggestions.html:3
msgid "Suggestions"
@ -787,7 +795,7 @@ msgstr "Default na wika"
#: searx/templates/simple/filters/languages.html:4
#: searx/templates/simple/preferences/language.html:11
msgid "Auto-detect"
msgstr ""
msgstr "awtomatikong pangdedetekta"
#: searx/templates/simple/filters/safesearch.html:1
#: searx/templates/simple/filters/safesearch.html:2
@ -852,35 +860,35 @@ msgstr "Paumanhin!"
#: searx/templates/simple/messages/no_results.html:12
msgid "No results were found. You can try to:"
msgstr ""
msgstr "Walang mga resultang nahanap. Pwede mong subukang:"
#: searx/templates/simple/messages/no_results.html:14
msgid "There are no more results. You can try to:"
msgstr ""
msgstr "Walang karagdagang mga resulta. Maaari mong subukan ang:"
#: searx/templates/simple/messages/no_results.html:19
msgid "Refresh the page."
msgstr ""
msgstr "I-refresh ang pahina."
#: searx/templates/simple/messages/no_results.html:20
msgid "Search for another query or select another category (above)."
msgstr ""
msgstr "Hanapin ang iba pang query o pumili ng ibang kategorya (sa itaas)."
#: searx/templates/simple/messages/no_results.html:21
msgid "Change the search engine used in the preferences:"
msgstr ""
msgstr "Baguhin ang ginagamit na search engine sa mga nais:"
#: searx/templates/simple/messages/no_results.html:22
msgid "Switch to another instance:"
msgstr ""
msgstr "Lumipat sa ibang \"instance\":"
#: searx/templates/simple/messages/no_results.html:24
msgid "Search for another query or select another category."
msgstr ""
msgstr "Humanap ng ibang query o pumili ng ibang kategorya."
#: searx/templates/simple/messages/no_results.html:25
msgid "Go back to the previous page using the previous page button."
msgstr ""
msgstr "Bumalik sa nakaraang pahina gamit ang button ng nakaraang pahina."
#: searx/templates/simple/preferences/answerers.html:4
#: searx/templates/simple/preferences/engines.html:17
@ -938,6 +946,7 @@ msgstr ""
#: searx/templates/simple/preferences/cookies.html:3
msgid "With that list, you can assess SearXNG transparency."
msgstr ""
"Sa tulong ng listahan, maaari mong suriin ang transparansiya ng SearXNG."
#: searx/templates/simple/preferences/cookies.html:9
msgid "Cookie name"
@ -962,25 +971,28 @@ msgstr ""
#: searx/templates/simple/preferences/cookies.html:35
msgid "URL to restore your preferences in another browser"
msgstr ""
msgstr "URL para ibalik ang iyong mga preference sa ibang browser"
#: searx/templates/simple/preferences/cookies.html:43
msgid ""
"Specifying custom settings in the preferences URL can be used to sync "
"preferences across devices."
msgstr ""
"Ang pagtukoy ng pasadyang mga setting sa URL ng mga preference ay maaaring "
"gamitin upang i-sync ang mga preference sa iba't ibang mga aparato."
#: searx/templates/simple/preferences/cookies.html:46
msgid "Copy preferences hash"
msgstr ""
msgstr "Kopyahin ang hash ng mga preference"
#: searx/templates/simple/preferences/cookies.html:57
msgid "Insert copied preferences hash (without URL) to restore"
msgstr ""
"Ilagay ang kinopyahang hash ng mga preference (walang URL) upang mag-restore"
#: searx/templates/simple/preferences/cookies.html:59
msgid "Preferences hash"
msgstr ""
msgstr "Hash ng mga preference"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "Open Access DOI resolver"
@ -988,13 +1000,15 @@ msgstr "Open Access DOI resolver"
#: searx/templates/simple/preferences/doi_resolver.html:14
msgid "Select service used by DOI rewrite"
msgstr ""
msgstr "Pumili ng serbisyo na ginagamit sa pagsulat ng DOI"
#: searx/templates/simple/preferences/engines.html:9
msgid ""
"This tab does not exists in the user interface, but you can search in "
"these engines by its !bangs."
msgstr ""
"Ang tab na ito ay hindi umiiral sa interface ng gumagamit, ngunit maaari "
"kang maghanap sa mga engine na ito sa pamamagitan ng kanilang !bangs."
#: searx/templates/simple/preferences/engines.html:19
msgid "!bang"
@ -1006,7 +1020,7 @@ msgstr "Suportado ang pinili na wika"
#: searx/templates/simple/preferences/engines.html:23
msgid "Weight"
msgstr ""
msgstr "Timbang"
#: searx/templates/simple/preferences/engines.html:27
msgid "Max time"
@ -1042,17 +1056,20 @@ msgstr "Bumalik"
#: searx/templates/simple/preferences/hotkeys.html:2
msgid "Hotkeys"
msgstr ""
msgstr "Mga Hotkeys"
#: searx/templates/simple/preferences/hotkeys.html:13
msgid "Vim-like"
msgstr ""
msgstr "Katulad ng Vim"
#: searx/templates/simple/preferences/hotkeys.html:18
msgid ""
"Navigate search results with hotkeys (JavaScript required). Press \"h\" "
"key on main or result page to get help."
msgstr ""
"Mag-navigate sa mga resulta ng paghahanap gamit ang mga hotkey (JavaScript "
"ay kinakailangan). Pindutin ang \"h\" na key sa pangunahin o resultang "
"pahina para sa tulong."
#: searx/templates/simple/preferences/image_proxy.html:2
msgid "Image proxy"
@ -1079,6 +1096,8 @@ msgstr "Ano ang gusto mong wika sa paghahanap?"
#: searx/templates/simple/preferences/language.html:25
msgid "Choose Auto-detect to let SearXNG detect the language of your query."
msgstr ""
"Pumili ng Auto-detect upang payagan ang SearXNG na matukoy ang wika ng iyong "
"query."
#: searx/templates/simple/preferences/method.html:2
msgid "HTTP Method"
@ -1121,6 +1140,8 @@ msgid ""
"Perform search immediately if a category selected. Disable to select "
"multiple categories"
msgstr ""
"Isagawa ang paghahanap kaagad kung may kategoryang pinili. I-disable upang "
"pumili ng maramihang mga kategorya"
#: searx/templates/simple/preferences/theme.html:2
msgid "Theme"
@ -1206,16 +1227,16 @@ msgstr "TiB"
#: searx/templates/simple/result_templates/files.html:47
msgid "Date"
msgstr ""
msgstr "Petsa"
#: searx/templates/simple/result_templates/files.html:49
#: searx/templates/simple/result_templates/paper.html:24
msgid "Type"
msgstr ""
msgstr "Uri"
#: searx/templates/simple/result_templates/images.html:19
msgid "Format"
msgstr ""
msgstr "Anyo"
#: searx/templates/simple/result_templates/images.html:21
msgid "Engine"
@ -1227,7 +1248,7 @@ msgstr "Tignan ang source"
#: searx/templates/simple/result_templates/map.html:12
msgid "address"
msgstr ""
msgstr "address"
#: searx/templates/simple/result_templates/map.html:43
msgid "show map"
@ -1243,11 +1264,11 @@ msgstr "Petsa ng Paglathala"
#: searx/templates/simple/result_templates/paper.html:9
msgid "Journal"
msgstr ""
msgstr "Talaan"
#: searx/templates/simple/result_templates/paper.html:22
msgid "Editor"
msgstr ""
msgstr "Patnugot"
#: searx/templates/simple/result_templates/paper.html:23
msgid "Publisher"
@ -1255,7 +1276,7 @@ msgstr "tagapaglathala"
#: searx/templates/simple/result_templates/paper.html:25
msgid "Tags"
msgstr ""
msgstr "Mga Tag/Tatak"
#: searx/templates/simple/result_templates/paper.html:26
msgid "DOI"
@ -1724,4 +1745,3 @@ msgstr "itago ang video"
#~ "wala kaming nakita na resulta. Pakiusap"
#~ " na ibahin ang tanong o maghanap "
#~ "sa maraming uri."

View file

@ -20,18 +20,19 @@
# quenty_occitania <quentinantonin@free.fr>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-01-11 08:23+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-13 11:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: French <https://translate.codeberg.org/projects/searxng/"
"searxng/fr/>\n"
"Language: fr\n"
"Language-Team: French "
"<https://translate.codeberg.org/projects/searxng/searxng/fr/>\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.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -159,6 +160,16 @@ msgstr "clair"
msgid "dark"
msgstr "sombre"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr "Temps de fonctionnement"
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "À propos"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Pas d'élément trouvé"
@ -447,10 +458,6 @@ msgstr "Aller à %(search_page)s."
msgid "search page"
msgstr "la page d'accueil"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "À propos"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Faire un don"
@ -981,15 +988,15 @@ msgstr ""
#: searx/templates/simple/preferences/cookies.html:46
msgid "Copy preferences hash"
msgstr ""
msgstr "Copier le hash des préférences"
#: searx/templates/simple/preferences/cookies.html:57
msgid "Insert copied preferences hash (without URL) to restore"
msgstr ""
msgstr "Insérer le hash de préférences copié à restaurer (sans l'URL)"
#: searx/templates/simple/preferences/cookies.html:59
msgid "Preferences hash"
msgstr ""
msgstr "Hash des préférences"
#: searx/templates/simple/preferences/doi_resolver.html:2
msgid "Open Access DOI resolver"
@ -1223,7 +1230,7 @@ msgstr "Tio"
#: searx/templates/simple/result_templates/files.html:47
msgid "Date"
msgstr ""
msgstr "Date"
#: searx/templates/simple/result_templates/files.html:49
#: searx/templates/simple/result_templates/paper.html:24
@ -1759,4 +1766,3 @@ msgstr "cacher la vidéo"
#~ "nous n'avons trouvé aucun résultat. "
#~ "Effectuez une autre recherche ou changez"
#~ " de catégorie."

View file

@ -11,9 +11,9 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-02-01 06:37+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-13 11:56+0000\n"
"Last-Translator: ghose <correo@xmgz.eu>\n"
"Language-Team: Galician <https://translate.codeberg.org/projects/searxng/"
"searxng/gl/>\n"
"Language: gl\n"
@ -149,6 +149,16 @@ msgstr "claro"
msgid "dark"
msgstr "escuro"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr "Activo fai"
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "Acerca de"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Non se atoparon elementos"
@ -438,10 +448,6 @@ msgstr "Ir a %(search_page)s."
msgid "search page"
msgstr "páxina de busca"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "Acerca de"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Doar"

View file

@ -15,19 +15,20 @@
# shoko <nickskorohod@outlook.com>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"PO-Revision-Date: 2024-01-03 15:56+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2024-02-13 11:56+0000\n"
"Last-Translator: return42 <markus.heiser@darmarit.de>\n"
"Language-Team: Hebrew <https://translate.codeberg.org/projects/searxng/"
"searxng/he/>\n"
"Language: he\n"
"Language-Team: Hebrew "
"<https://translate.codeberg.org/projects/searxng/searxng/he/>\n"
"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 "
"&& n % 10 == 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) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
"n % 10 == 0) ? 2 : 3));\n"
"X-Generator: Weblate 5.3.1\n"
"Generated-By: Babel 2.14.0\n"
#. CONSTANT_NAMES['NO_SUBGROUPING']
@ -155,6 +156,16 @@ msgstr "בהיר"
msgid "dark"
msgstr "כהה"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "אודות"
#: searx/webapp.py:332
msgid "No item found"
msgstr "לא נמצא פריט"
@ -301,6 +312,8 @@ msgid ""
"{numCitations} citations from the year {firstCitationVelocityYear} to "
"{lastCitationVelocityYear}"
msgstr ""
"{numCitations} אזכורים מ {firstCitationVelocityYear} עד "
"{lastCitationVelocityYear}"
#: searx/engines/tineye.py:40
msgid ""
@ -416,7 +429,7 @@ msgstr "אתה משתמש בטור וזה נראה שיש לך את הIP הזה:
#: searx/plugins/tor_check.py:86
msgid "You are not using Tor and you have this external IP address: {ip_address}"
msgstr ""
msgstr "אינך משתמש/ת ב Tor וזוהי כתובתך: {ip_address}"
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"
@ -439,10 +452,6 @@ msgstr "המשך לעמוד %(search_page)s."
msgid "search page"
msgstr "עמוד חיפוש"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "אודות"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "תרומות"
@ -458,7 +467,7 @@ msgstr "מופעל באמצעות"
#: searx/templates/simple/base.html:67
msgid "a privacy-respecting, open metasearch engine"
msgstr ""
msgstr "מנוע מטא-חיפוש בקוד חופשי המכבד את פרטיותך"
#: searx/templates/simple/base.html:68
msgid "Source code"
@ -610,7 +619,7 @@ msgstr "מספר תוצאות"
#: searx/templates/simple/results.html:44
msgid "Info"
msgstr ""
msgstr "מידע"
#: searx/templates/simple/results.html:73
msgid "Try searching for:"
@ -741,7 +750,7 @@ msgstr "הורד תוצאות"
#: searx/templates/simple/elements/engines_msg.html:7
msgid "Messages from the search engines"
msgstr ""
msgstr "הודעות ממנועי החיפוש"
#: searx/templates/simple/elements/engines_msg.html:12
msgid "Error!"
@ -758,12 +767,12 @@ msgstr "כתובת URL חיפוש"
#: searx/templates/simple/elements/search_url.html:4
#: searx/templates/simple/preferences/cookies.html:54
msgid "Copied"
msgstr ""
msgstr "הועתק"
#: searx/templates/simple/elements/search_url.html:4
#: searx/templates/simple/preferences/cookies.html:54
msgid "Copy"
msgstr ""
msgstr "העתק"
#: searx/templates/simple/elements/suggestions.html:3
msgid "Suggestions"
@ -782,7 +791,7 @@ msgstr "שפה ברירת מחדל"
#: searx/templates/simple/filters/languages.html:4
#: searx/templates/simple/preferences/language.html:11
msgid "Auto-detect"
msgstr ""
msgstr "זיהוי אוטומטי"
#: searx/templates/simple/filters/safesearch.html:1
#: searx/templates/simple/filters/safesearch.html:2
@ -855,7 +864,7 @@ msgstr ""
#: searx/templates/simple/messages/no_results.html:19
msgid "Refresh the page."
msgstr ""
msgstr "טעינת הדף מחדש"
#: searx/templates/simple/messages/no_results.html:20
msgid "Search for another query or select another category (above)."
@ -863,7 +872,7 @@ msgstr ""
#: searx/templates/simple/messages/no_results.html:21
msgid "Change the search engine used in the preferences:"
msgstr ""
msgstr "שינוי מנוע החיפוש בהגדרות:"
#: searx/templates/simple/messages/no_results.html:22
msgid "Switch to another instance:"
@ -1698,4 +1707,3 @@ msgstr "הסתר וידאו"
#~ "use another query or search in "
#~ "more categories."
#~ msgstr "לא מצאנו תוצאות. אנא נסו שאילתא אחרת או חפשו בתוך יותר קטגוריות."

View file

@ -15,7 +15,7 @@ msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2024-01-31 19:06+0000\n"
"POT-Creation-Date: 2024-02-10 07:07+0000\n"
"PO-Revision-Date: 2023-12-29 14:09+0000\n"
"Last-Translator: SecularSteve <fairfull.playing@gmail.com>\n"
"Language: hr\n"
@ -153,6 +153,16 @@ msgstr "svijetlo"
msgid "dark"
msgstr "tamno"
#. BRAND_CUSTOM_LINKS['UPTIME']
#: searx/searxng.msg
msgid "Uptime"
msgstr ""
#. BRAND_CUSTOM_LINKS['ABOUT']
#: searx/searxng.msg searx/templates/simple/base.html:49
msgid "About"
msgstr "O nama"
#: searx/webapp.py:332
msgid "No item found"
msgstr "Nije pronađena nijedna stavka"
@ -438,10 +448,6 @@ msgstr "Idi na %(search_page)s."
msgid "search page"
msgstr "pretraži stranicu"
#: searx/templates/simple/base.html:49
msgid "About"
msgstr "O nama"
#: searx/templates/simple/base.html:53
msgid "Donate"
msgstr "Donirajte"

Some files were not shown because too many files have changed in this diff Show more