Merge branch 'searxng:master' into master

This commit is contained in:
Fauli1221 2022-08-15 23:10:47 +02:00 committed by GitHub
commit fb33b6219d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
46 changed files with 3506 additions and 632 deletions

View file

@ -2,10 +2,9 @@ mock==4.0.3
nose2[coverage_plugin]==0.12.0
cov-core==1.15.0
black==22.6.0
pycodestyle==2.8.0
pylint==2.14.5
splinter==0.18.1
selenium==4.3.0
selenium==4.4.0
twine==4.0.1
Pallets-Sphinx-Themes==2.0.2
Sphinx==5.1.1

View file

@ -1,7 +1,7 @@
certifi==2022.6.15
babel==2.10.3
flask-babel==2.0.0
flask==2.1.3
flask==2.2.2
jinja2==3.1.2
lxml==4.9.1
pygments==2.12.0
@ -12,7 +12,7 @@ Brotli==1.0.9
uvloop==0.16.0
httpx-socks[asyncio]==0.7.2
langdetect==1.0.9
setproctitle==1.3.0
setproctitle==1.3.2
redis==4.3.4
markdown-it-py==2.1.0
typing_extensions==4.3.0

File diff suppressed because it is too large Load diff

View file

@ -1396,170 +1396,155 @@
"sv",
"zh"
],
"qwant": [
"bg-BG",
"ca-ES",
"cs-CZ",
"da-DK",
"de-AT",
"de-CH",
"de-DE",
"el-GR",
"en-AU",
"en-CA",
"en-GB",
"en-IE",
"en-MY",
"en-NZ",
"en-US",
"es-AR",
"es-CL",
"es-ES",
"es-MX",
"et-EE",
"fi-FI",
"fr-BE",
"fr-CA",
"fr-CH",
"fr-FR",
"hu-HU",
"it-CH",
"it-IT",
"ko-KR",
"nb-NO",
"nl-BE",
"nl-NL",
"pl-PL",
"pt-PT",
"ro-RO",
"sv-SE",
"th-TH",
"zh-CN",
"zh-HK"
],
"qwant images": [
"bg-BG",
"ca-ES",
"cs-CZ",
"da-DK",
"de-AT",
"de-CH",
"de-DE",
"el-GR",
"en-AU",
"en-CA",
"en-GB",
"en-IE",
"en-MY",
"en-NZ",
"en-US",
"es-AR",
"es-CL",
"es-ES",
"es-MX",
"et-EE",
"fi-FI",
"fr-BE",
"fr-CA",
"fr-CH",
"fr-FR",
"hu-HU",
"it-CH",
"it-IT",
"ko-KR",
"nb-NO",
"nl-BE",
"nl-NL",
"pl-PL",
"pt-PT",
"ro-RO",
"sv-SE",
"th-TH",
"zh-CN",
"zh-HK"
],
"qwant news": [
"bg-BG",
"ca-ES",
"cs-CZ",
"da-DK",
"de-AT",
"de-CH",
"de-DE",
"el-GR",
"en-AU",
"en-CA",
"en-GB",
"en-IE",
"en-MY",
"en-NZ",
"en-US",
"es-AR",
"es-CL",
"es-ES",
"es-MX",
"et-EE",
"fi-FI",
"fr-BE",
"fr-CA",
"fr-CH",
"fr-FR",
"hu-HU",
"it-CH",
"it-IT",
"ko-KR",
"nb-NO",
"nl-BE",
"nl-NL",
"pl-PL",
"pt-PT",
"ro-RO",
"sv-SE",
"th-TH",
"zh-CN",
"zh-HK"
],
"qwant videos": [
"bg-BG",
"ca-ES",
"cs-CZ",
"da-DK",
"de-AT",
"de-CH",
"de-DE",
"el-GR",
"en-AU",
"en-CA",
"en-GB",
"en-IE",
"en-MY",
"en-NZ",
"en-US",
"es-AR",
"es-CL",
"es-ES",
"es-MX",
"et-EE",
"fi-FI",
"fr-BE",
"fr-CA",
"fr-CH",
"fr-FR",
"hu-HU",
"it-CH",
"it-IT",
"ko-KR",
"nb-NO",
"nl-BE",
"nl-NL",
"pl-PL",
"pt-PT",
"ro-RO",
"sv-SE",
"th-TH",
"zh-CN",
"zh-HK"
],
"qwant": {
"bg-BG": "bg_BG",
"ca-ES": "ca_ES",
"cs-CZ": "cs_CZ",
"da-DK": "da_DK",
"de-AT": "de_AT",
"de-CH": "de_CH",
"de-DE": "de_DE",
"el-GR": "el_GR",
"en-AU": "en_AU",
"en-CA": "en_CA",
"en-GB": "en_GB",
"en-IE": "en_IE",
"en-MY": "en_MY",
"en-NZ": "en_NZ",
"en-US": "en_US",
"es-AR": "es_AR",
"es-CL": "es_CL",
"es-ES": "es_ES",
"es-MX": "es_MX",
"et-EE": "et_EE",
"fi-FI": "fi_FI",
"fr-BE": "fr_BE",
"fr-CA": "fr_CA",
"fr-CH": "fr_CH",
"fr-FR": "fr_FR",
"hu-HU": "hu_HU",
"it-CH": "it_CH",
"it-IT": "it_IT",
"ko-KR": "ko_KR",
"nb-NO": "nb_NO",
"nl-BE": "nl_BE",
"nl-NL": "nl_NL",
"pl-PL": "pl_PL",
"pt-PT": "pt_PT",
"ro-RO": "ro_RO",
"sv-SE": "sv_SE",
"th-TH": "th_TH",
"zh-CN": "zh_CN",
"zh-HK": "zh_HK"
},
"qwant images": {
"bg-BG": "bg_BG",
"ca-ES": "ca_ES",
"cs-CZ": "cs_CZ",
"da-DK": "da_DK",
"de-AT": "de_AT",
"de-CH": "de_CH",
"de-DE": "de_DE",
"el-GR": "el_GR",
"en-AU": "en_AU",
"en-CA": "en_CA",
"en-GB": "en_GB",
"en-IE": "en_IE",
"en-MY": "en_MY",
"en-NZ": "en_NZ",
"en-US": "en_US",
"es-AR": "es_AR",
"es-CL": "es_CL",
"es-ES": "es_ES",
"es-MX": "es_MX",
"et-EE": "et_EE",
"fi-FI": "fi_FI",
"fr-BE": "fr_BE",
"fr-CA": "fr_CA",
"fr-CH": "fr_CH",
"fr-FR": "fr_FR",
"hu-HU": "hu_HU",
"it-CH": "it_CH",
"it-IT": "it_IT",
"ko-KR": "ko_KR",
"nb-NO": "nb_NO",
"nl-BE": "nl_BE",
"nl-NL": "nl_NL",
"pl-PL": "pl_PL",
"pt-PT": "pt_PT",
"ro-RO": "ro_RO",
"sv-SE": "sv_SE",
"th-TH": "th_TH",
"zh-CN": "zh_CN",
"zh-HK": "zh_HK"
},
"qwant news": {
"ca-ES": "ca_ES",
"de-AT": "de_AT",
"de-CH": "de_CH",
"de-DE": "de_DE",
"en-AU": "en_AU",
"en-CA": "en_CA",
"en-GB": "en_GB",
"en-IE": "en_IE",
"en-MY": "en_MY",
"en-NZ": "en_NZ",
"en-US": "en_US",
"es-AR": "es_AR",
"es-CL": "es_CL",
"es-ES": "es_ES",
"es-MX": "es_MX",
"fr-BE": "fr_BE",
"fr-CA": "fr_CA",
"fr-CH": "fr_CH",
"fr-FR": "fr_FR",
"it-CH": "it_CH",
"it-IT": "it_IT",
"nl-BE": "nl_BE",
"nl-NL": "nl_NL",
"pt-PT": "pt_PT"
},
"qwant videos": {
"bg-BG": "bg_BG",
"ca-ES": "ca_ES",
"cs-CZ": "cs_CZ",
"da-DK": "da_DK",
"de-AT": "de_AT",
"de-CH": "de_CH",
"de-DE": "de_DE",
"el-GR": "el_GR",
"en-AU": "en_AU",
"en-CA": "en_CA",
"en-GB": "en_GB",
"en-IE": "en_IE",
"en-MY": "en_MY",
"en-NZ": "en_NZ",
"en-US": "en_US",
"es-AR": "es_AR",
"es-CL": "es_CL",
"es-ES": "es_ES",
"es-MX": "es_MX",
"et-EE": "et_EE",
"fi-FI": "fi_FI",
"fr-BE": "fr_BE",
"fr-CA": "fr_CA",
"fr-CH": "fr_CH",
"fr-FR": "fr_FR",
"hu-HU": "hu_HU",
"it-CH": "it_CH",
"it-IT": "it_IT",
"ko-KR": "ko_KR",
"nb-NO": "nb_NO",
"nl-BE": "nl_BE",
"nl-NL": "nl_NL",
"pl-PL": "pl_PL",
"pt-PT": "pt_PT",
"ro-RO": "ro_RO",
"sv-SE": "sv_SE",
"th-TH": "th_TH",
"zh-CN": "zh_CN",
"zh-HK": "zh_HK"
},
"startpage": {
"af": {
"alias": "afrikaans"

View file

@ -112,21 +112,14 @@ filter_mapping = {0: 'off', 1: 'medium', 2: 'high'}
# specific xpath variables
# ------------------------
# google results are grouped into <div class="jtfYYd ..." ../>
results_xpath = '//div[contains(@class, "jtfYYd")]'
results_xpath = '//div[contains(@class, "MjjYud")]'
title_xpath = './/h3[1]'
href_xpath = './/a/@href'
content_xpath = './/div[@data-content-feature=1]'
# google *sections* are no usual *results*, we ignore them
g_section_with_header = './g-section-with-header'
# the title is a h3 tag relative to the result group
title_xpath = './/h3[1]'
# in the result group there is <div class="yuRUbf" ../> it's first child is a <a
# href=...>
href_xpath = './/div[@class="yuRUbf"]//a/@href'
# in the result group there is <div class="VwiC3b ..." ../> containing the *content*
content_xpath = './/div[contains(@class, "VwiC3b")]'
# Suggestions are links placed in a *card-section*, we extract only the text
# from the links not the links itself.
@ -261,7 +254,7 @@ def request(query, params):
if use_mobile_ui:
additional_parameters = {
'asearch': 'arc',
'async': 'use_ac:true,_fmt:pc',
'async': 'use_ac:true,_fmt:html',
}
# https://www.google.de/search?q=corona&hl=de&lr=lang_de&start=0&tbs=qdr%3Ad&safe=medium

View file

@ -9,16 +9,16 @@ https://www.qwant.com/ queries.
This implementation is used by different qwant engines in the settings.yml::
- name: qwant
categories: general
qwant_categ: web
...
- name: qwant news
categories: news
qwant_categ: news
...
- name: qwant images
categories: images
qwant_categ: images
...
- name: qwant videos
categories: videos
qwant_categ: videos
...
"""
@ -30,11 +30,11 @@ from datetime import (
from json import loads
from urllib.parse import urlencode
from flask_babel import gettext
import babel
from searx.utils import match_language
from searx.exceptions import SearxEngineAPIException
from searx.network import raise_for_httperror
from searx.locales import get_engine_locale
# about
about = {
@ -50,13 +50,20 @@ about = {
categories = []
paging = True
supported_languages_url = about['website']
qwant_categ = None # web|news|inages|videos
category_to_keyword = {
'general': 'web',
'news': 'news',
'images': 'images',
'videos': 'videos',
}
safesearch = True
safe_search_map = {0: '&safesearch=0', 1: '&safesearch=1', 2: '&safesearch=2'}
# fmt: off
qwant_news_locales = [
'ca_ad', 'ca_es', 'ca_fr', 'co_fr', 'de_at', 'de_ch', 'de_de', 'en_au',
'en_ca', 'en_gb', 'en_ie', 'en_my', 'en_nz', 'en_us', 'es_ad', 'es_ar',
'es_cl', 'es_co', 'es_es', 'es_mx', 'es_pe', 'eu_es', 'eu_fr', 'fc_ca',
'fr_ad', 'fr_be', 'fr_ca', 'fr_ch', 'fr_fr', 'it_ch', 'it_it', 'nl_be',
'nl_nl', 'pt_ad', 'pt_pt',
]
# fmt: on
# search-url
url = 'https://api.qwant.com/v3/search/{keyword}?{query}&count={count}&offset={offset}'
@ -64,10 +71,13 @@ url = 'https://api.qwant.com/v3/search/{keyword}?{query}&count={count}&offset={o
def request(query, params):
"""Qwant search request"""
keyword = category_to_keyword[categories[0]]
if not query:
return None
count = 10 # web: count must be equal to 10
if keyword == 'images':
if qwant_categ == 'images':
count = 50
offset = (params['pageno'] - 1) * count
# count + offset must be lower than 250
@ -78,22 +88,18 @@ def request(query, params):
offset = min(offset, 40)
params['url'] = url.format(
keyword=keyword,
keyword=qwant_categ,
query=urlencode({'q': query}),
offset=offset,
count=count,
)
# add language tag
if params['language'] == 'all':
params['url'] += '&locale=en_US'
else:
language = match_language(
params['language'],
supported_languages,
language_aliases,
)
params['url'] += '&locale=' + language.replace('-', '_')
# add quant's locale
q_locale = get_engine_locale(params['language'], supported_languages, default='en_US')
params['url'] += '&locale=' + q_locale
# add safesearch option
params['url'] += safe_search_map.get(params['safesearch'], '')
params['raise_for_httperror'] = False
return params
@ -103,7 +109,6 @@ def response(resp):
"""Get response from Qwant's search request"""
# pylint: disable=too-many-locals, too-many-branches, too-many-statements
keyword = category_to_keyword[categories[0]]
results = []
# load JSON result
@ -125,7 +130,7 @@ def response(resp):
# raise for other errors
raise_for_httperror(resp)
if keyword == 'web':
if qwant_categ == 'web':
# The WEB query contains a list named 'mainline'. This list can contain
# different result types (e.g. mainline[0]['type'] returns type of the
# result items in mainline[0]['items']
@ -136,7 +141,7 @@ def response(resp):
# result['items'].
mainline = data.get('result', {}).get('items', [])
mainline = [
{'type': keyword, 'items': mainline},
{'type': qwant_categ, 'items': mainline},
]
# return empty array if there are no results
@ -146,7 +151,7 @@ def response(resp):
for row in mainline:
mainline_type = row.get('type', 'web')
if mainline_type != keyword:
if mainline_type != qwant_categ:
continue
if mainline_type == 'ads':
@ -238,19 +243,43 @@ def response(resp):
return results
# get supported languages from their site
def _fetch_supported_languages(resp):
# list of regions is embedded in page as a js object
response_text = resp.text
response_text = response_text[response_text.find('INITIAL_PROPS') :]
response_text = response_text[response_text.find('{') : response_text.find('</script>')]
regions_json = loads(response_text)
text = resp.text
text = text[text.find('INITIAL_PROPS') :]
text = text[text.find('{') : text.find('</script>')]
supported_languages = []
for country, langs in regions_json['locales'].items():
for lang in langs['langs']:
lang_code = "{lang}-{country}".format(lang=lang, country=country)
supported_languages.append(lang_code)
q_initial_props = loads(text)
q_locales = q_initial_props.get('locales')
q_valid_locales = []
for country, v in q_locales.items():
for lang in v['langs']:
_locale = "{lang}_{country}".format(lang=lang, country=country)
if qwant_categ == 'news' and _locale.lower() not in qwant_news_locales:
# qwant-news does not support all locales from qwant-web:
continue
q_valid_locales.append(_locale)
supported_languages = {}
for q_locale in q_valid_locales:
try:
locale = babel.Locale.parse(q_locale, sep='_')
except babel.core.UnknownLocaleError:
print("ERROR: can't determine babel locale of quant's locale %s" % q_locale)
continue
# note: supported_languages (dict)
#
# dict's key is a string build up from a babel.Locale object / the
# notation 'xx-XX' (and 'xx') conforms to SearXNG's locale (and
# language) notation and dict's values are the locale strings used by
# the engine.
searxng_locale = locale.language + '-' + locale.territory # --> params['language']
supported_languages[searxng_locale] = q_locale
return supported_languages

View file

@ -10,6 +10,8 @@ import pathlib
from babel import Locale
from babel.support import Translations
import babel.languages
import babel.core
import flask_babel
import flask
from flask.ctx import has_request_context
@ -150,3 +152,144 @@ def locales_initialize(directory=None):
LOCALE_NAMES[tag] = get_locale_descr(locale, dirname)
if locale.text_direction == 'rtl':
RTL_LOCALES.add(tag)
def get_engine_locale(searxng_locale, engine_locales, default=None):
"""Return engine's language (aka locale) string that best fits to argument
``searxng_locale``.
Argument ``engine_locales`` is a python dict that maps *SearXNG locales* to
corresponding *engine locales*:
<engine>: {
# SearXNG string : engine-string
'ca-ES' : 'ca_ES',
'fr-BE' : 'fr_BE',
'fr-CA' : 'fr_CA',
'fr-CH' : 'fr_CH',
'fr' : 'fr_FR',
...
'pl-PL' : 'pl_PL',
'pt-PT' : 'pt_PT'
}
.. hint::
The *SearXNG locale* string has to be known by babel!
If there is no direct 1:1 mapping, this functions tries to narrow down
engine's language (locale). If no value can be determined by these
approximation attempts the ``default`` value is returned.
Assumptions:
A. When user select a language the results should be optimized according to
the selected language.
B. When user select a language and a territory the results should be
optimized with first priority on terrirtory and second on language.
First approximation rule (*by territory*):
When the user selects a locale with terrirtory (and a language), the
territory has priority over the language. If any of the offical languages
in the terrirtory is supported by the engine (``engine_locales``) it will
be used.
Second approximation rule (*by language*):
If "First approximation rule" brings no result or the user selects only a
language without a terrirtory. Check in which territories the language
has an offical status and if one of these territories is supported by the
engine.
"""
# pylint: disable=too-many-branches
engine_locale = engine_locales.get(searxng_locale)
if engine_locale is not None:
# There was a 1:1 mapping (e.g. "fr-BE --> fr_BE" or "fr --> fr_FR"), no
# need to narrow language nor territory.
return engine_locale
try:
locale = babel.Locale.parse(searxng_locale, sep='-')
except babel.core.UnknownLocaleError:
try:
locale = babel.Locale.parse(searxng_locale.split('-')[1])
except babel.core.UnknownLocaleError:
return default
# SearXNG's selected locale is not supported by the engine ..
if locale.territory:
# Try to narrow by *offical* languages in the territory (??-XX).
for official_language in babel.languages.get_official_languages(locale.territory, de_facto=True):
searxng_locale = official_language + '-' + locale.territory
engine_locale = engine_locales.get(searxng_locale)
if engine_locale is not None:
return engine_locale
# Engine does not support one of the offical languages in the territory or
# there is only a language selected without a territory.
# Now lets have a look if the searxng_lang (the language selected by the
# user) is a offical language in other territories. If so, check if
# engine does support the searxng_lang in this other territory.
if locale.language:
searxng_lang = locale.language
if locale.script:
searxng_lang += '_' + locale.script
terr_lang_dict = {}
for territory, langs in babel.core.get_global("territory_languages").items():
if not langs.get(searxng_lang, {}).get('official_status'):
continue
terr_lang_dict[territory] = langs.get(searxng_lang)
# first: check fr-FR, de-DE .. is supported by the engine
territory = locale.language.upper()
if terr_lang_dict.get(territory):
searxng_locale = locale.language + '-' + territory
engine_locale = engine_locales.get(searxng_locale)
if engine_locale is not None:
return engine_locale
# second: sort by population_percent and take first match
# drawback of "population percent": if there is a terrirtory with a
# small number of people (e.g 100) but the majority speaks the
# language, then the percentage migth be 100% (--> 100 people) but in
# a different terrirtory with more people (e.g. 10.000) where only 10%
# speak the language the total amount of speaker is higher (--> 200
# people).
#
# By example: The population of Saint-Martin is 33.000, of which 100%
# speak French, but this is less than the 30% of the approximately 2.5
# million Belgian citizens
#
# - 'fr-MF', 'population_percent': 100.0, 'official_status': 'official'
# - 'fr-BE', 'population_percent': 38.0, 'official_status': 'official'
terr_lang_list = []
for k, v in terr_lang_dict.items():
terr_lang_list.append((k, v))
for territory, _lang in sorted(terr_lang_list, key=lambda item: item[1]['population_percent'], reverse=True):
searxng_locale = locale.language + '-' + territory
engine_locale = engine_locales.get(searxng_locale)
if engine_locale is not None:
return engine_locale
# No luck: narrow by "language from territory" and "territory from language"
# does not fit to a locale supported by the engine.
if engine_locale is None:
engine_locale = default
return default

View file

@ -210,7 +210,7 @@ checker:
# to activate the scheduler:
# * uncomment "scheduling" section
# * add "cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1"
# * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1"
# to your uwsgi.ini
# scheduling:
@ -422,18 +422,13 @@ engines:
categories: general
disabled: true
paging: false
page_size: 10
content_html_to_text: true
title_html_to_text: true
search_url: https://api.yep.com/fs/1/?type=web&q={query}&no_correct=false
search_url: https://api.yep.com/fs/1/?type=web&q={query}&no_correct=false&limit=100
results_query: 1/results
title_query: title
url_query: url
content_query: snippet
timeout: 12.0
headers:
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8'
'Sec-Fetch-Dest': 'document'
about:
website: https://yep.com
use_official_api: false
@ -965,6 +960,38 @@ engines:
# collection: 'reviews' # name of the db collection
# key: 'name' # key in the collection to search for
- name: neeva
engine: xpath
shortcut: nv
time_range_support: true
time_range_url: '&alf%5Bfreshness%5D={time_range_val}'
time_range_map:
day: 'Day'
week: 'Week'
month: 'Month'
year: 'Year'
search_url: https://neeva.com/search?q={query}&c=All&src=Pagination&page={pageno}{time_range}
results_xpath: //div[@class="web-index__component-2rKiM"] | //li[@class="web-rich-deep-links__deepLink-SIbD4"]
url_xpath: .//a[@class="lib-doc-title__link-1b9rC"]/@href | ./h2/a/@href
title_xpath: .//a[@class="lib-doc-title__link-1b9rC"] | ./h2/a
content_xpath: >
.//div[@class="lib-doc-snippet__component-3ewW6"]/text() |
.//div[@class="lib-doc-snippet__component-3ewW6"]/*[not(self::a)] |
./p
content_html_to_text: true
suggestion_xpath: //span[@class="result-related-searches__link-2ho_u"]
paging: true
disabled: true
categories: [general, web]
timeout: 5.0
soft_max_redirects: 2
about:
website: https://neeva.com
official_api_documentation:
use_official_api: false
require_api_key: false
results: HTML
- name: npm
engine: json_engine
paging: true
@ -1171,6 +1198,7 @@ engines:
results: HTML
- name: qwant
qwant_categ: web
engine: qwant
shortcut: qw
categories: [general, web]
@ -1179,6 +1207,7 @@ engines:
rosebud: *test_rosebud
- name: qwant news
qwant_categ: news
engine: qwant
shortcut: qwn
categories: news
@ -1186,6 +1215,7 @@ engines:
network: qwant
- name: qwant images
qwant_categ: images
engine: qwant
shortcut: qwi
categories: [images, web]
@ -1193,6 +1223,7 @@ engines:
network: qwant
- name: qwant videos
qwant_categ: videos
engine: qwant
shortcut: qwv
categories: [videos, web]
@ -1458,6 +1489,27 @@ engines:
about:
website: https://wiby.me/
- name: marginalia
engine: json_engine
shortcut: mar
categories: general
paging: false
# index: {"0": "popular", "1": "blogs", "2": "big_sites",
# "3": "default", "4": experimental"}
search_url: https://api.marginalia.nu/public/search/{query}?index=4&count=20
results_query: results
url_query: url
title_query: title
content_query: description
timeout: 1.5
disabled: true
about:
website: https://www.marginalia.nu/
official_api_documentation: https://api.marginalia.nu/
use_official_api: true
require_api_key: true
results: JSON
- name: alexandria
engine: json_engine
shortcut: alx
@ -1768,12 +1820,19 @@ engines:
shortcut: brave
engine: xpath
paging: true
time_range_support: true
first_page_num: 0
search_url: https://search.brave.com/search?q={query}&offset={pageno}&spellcheck=1
time_range_url: "&tf={time_range_val}"
search_url: https://search.brave.com/search?q={query}&offset={pageno}&spellcheck=1{time_range}
url_xpath: //a[@class="result-header"]/@href
title_xpath: //span[@class="snippet-title"]
content_xpath: //p[1][@class="snippet-description"]
suggestion_xpath: //div[@class="text-gray h6"]/a
time_range_map:
day: 'pd'
week: 'pw'
month: 'pm'
year: 'py'
categories: [general, web]
about:
website: https://brave.com/search/
@ -1827,6 +1886,43 @@ engines:
require_api_key: false
results: HTML
- name: lib.rs
shortcut: lrs
engine: xpath
search_url: https://lib.rs/search?q={query}
results_xpath: /html/body/main/div/ol/li/a
url_xpath: ./@href
title_xpath: ./div[@class="h"]/h4
content_xpath: ./div[@class="h"]/p
categories: [it, packages]
disabled: true
about:
website: https://lib.rs
wikidata_id: Q113486010
use_official_api: false
require_api_key: false
results: HTML
- name: sourcehut
shortcut: srht
engine: xpath
paging: true
search_url: https://sr.ht/projects?page={pageno}&search={query}
results_xpath: (//div[@class="event-list"])[1]/div[@class="event"]
url_xpath: ./h4/a[2]/@href
title_xpath: ./h4/a[2]
content_xpath: ./p
first_page_num: 1
categories: [it, repos]
disabled: true
about:
website: https://sr.ht
wikidata_id: Q78514485
official_api_documentation: https://man.sr.ht/
use_official_api: false
require_api_key: false
results: HTML
# Doku engine lets you access to any Doku wiki instance:
# A public one or a privete/corporate one.
# - name: ubuntuwiki

View file

@ -23,7 +23,7 @@ else:
# uwsgi.ini configuration problem: disable all scheduling
logger.error(
'uwsgi.ini configuration error, add this line to your uwsgi.ini\n'
'cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1'
'cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1'
)
from .shared_simple import SimpleSharedDict as SharedDict

View file

@ -1,22 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/">
<ShortName>{{ instance_name }}</ShortName>
<Description>a privacy-respecting, hackable metasearch engine</Description>
<LongName>SearXNG metasearch</LongName>
<Description>SearXNG is a metasearch engine that respects your privacy.</Description>
<InputEncoding>UTF-8</InputEncoding>
<Image>{{ url_for('static', filename='img/favicon.png', _external=True) }}</Image>
<LongName>searx metasearch</LongName>
{% if opensearch_method == 'get' %}
<Url rel="results" type="text/html" method="get" template="{{ url_for('search', _external=True) }}?q={searchTerms}"/>
<Image type="image/png">{{ url_for('static', filename='img/favicon.png', _external=True) }}</Image>
{% if opensearch_method == 'GET' %}
<Url rel="results" type="text/html" method="{{ opensearch_method }}" template="{{ url_for('search', _external=True) }}?q={searchTerms}"/>
{% else %}
<Url rel="results" type="text/html" method="post" template="{{ url_for('search', _external=True) }}">
<Param name="q" value="{searchTerms}" />
</Url>
<Url rel="results" type="text/html" method="{{ opensearch_method }}" template="{{ url_for('search', _external=True) }}">
<Param name="q" value="{searchTerms}" />
</Url>
{% endif %}
{% if autocomplete %}
<Url rel="suggestions" type="application/x-suggestions+json" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/>
<Url rel="suggestions" type="application/x-suggestions+json" method="{{ opensearch_method }}" template="{{ url_for('autocompleter', _external=True) }}?q={searchTerms}"/>
{% endif %}
<Url type="application/opensearchdescription+xml"
rel="self"
template="{{ opensearch_url }}" />
<Url rel="self" type="application/opensearchdescription+xml" method="{{ opensearch_method }}" template="{{ opensearch_url }}" />
<Query role="example" searchTerms="SearXNG" />
<moz:SearchForm>{{ url_for('search', _external=True) }}</moz:SearchForm>
</OpenSearchDescription>

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -3,20 +3,22 @@
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2022.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# PRATYAY MUSTAFI <pratyaymustafi@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-19 05:46+0000\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Bengali <https://weblate.bubu1.eu/projects/searxng/searxng/bn/"
">\n"
"Language: bn\n"
"Language-Team: Bengali "
"<https://weblate.bubu1.eu/projects/searxng/searxng/bn/>\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -181,7 +183,7 @@ msgstr "অনেক বেশি অনুরোধ"
#: searx/webapp.py:187
msgid "access denied"
msgstr "অ্যাক্সেস অস্বীকৃত"
msgstr "অ্যাক্সেস অমান্য"
#: searx/webapp.py:188
msgid "server API error"
@ -266,16 +268,20 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"ছবির url টি পড়তে পারা যাচ্ছে না । এটি হতে পারে ফাইল ফরম্যাট এর পড়তে না পারা"
"র জন্যে। TinEye কেবল JPEG, PNG, GIF, BMP, TIFF আর WebP ফরম্যাট কে পড়তে পারে।"
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"এই ছবিটি খুবই সাধারণ হওয়ায় কোন মিল পাওয়া যাচ্ছে না। TinEye এর একটু চাক্ষু"
"ষ বিস্তর প্রয়োজন সফল ভাবে মিল পাওয়ার জন্যে ।"
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "ছবিটি ডাউনলোড করা যায়নি ।"
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -295,27 +301,31 @@ msgstr "ফলাফল হোস্টনাম পুনরায় লিখ
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
msgstr ""
msgstr "Open Access DOI পুনর্লিখন"
#: searx/plugins/oa_doi_rewrite.py:10
msgid ""
"Avoid paywalls by redirecting to open-access versions of publications "
"when available"
msgstr ""
"Paywall এড়িয়ে চলতে প্রকাশন গুলির open-access সংস্করণে রিডাইরেক্ট করুন উপলব্"
"ধ থাকলে"
#: searx/plugins/search_on_category_select.py:19
msgid "Search on category select"
msgstr ""
msgstr "বিভাগ নির্বাচন খুঁজে দেখুন"
#: searx/plugins/search_on_category_select.py:20
msgid ""
"Perform search immediately if a category selected. Disable to select "
"multiple categories. (JavaScript required)"
msgstr ""
"যখন একটি বিভাগ নির্বাচন করা হয়, অনুসন্ধান অবিলম্বে সঞ্চালিত হয়. একাধিক বিভা"
"গ নির্বাচন করতে অক্ষম করুন। (জাভাস্ক্রিপ্ট প্রয়োজন)"
#: searx/plugins/self_info.py:20
msgid "Self Informations"
msgstr ""
msgstr "নিজের তথ্য"
#: searx/plugins/self_info.py:21
msgid ""
@ -325,7 +335,7 @@ msgstr ""
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr ""
msgstr "টর চেক প্লাগইন"
#: searx/plugins/tor_check.py:28
msgid ""
@ -1110,4 +1120,3 @@ msgstr ""
#~ msgid "preferences"
#~ msgstr "পছন্দসমূহ"

View file

@ -25,8 +25,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"Last-Translator: alexfs2015 <alex04fs@gmail.com>\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Spanish <https://weblate.bubu1.eu/projects/searxng/searxng/es/"
">\n"
"Language: es\n"
@ -284,16 +284,22 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"No se pudo leer la URL de esa imagen. Esto puede deberse a un formato de "
"archivo no compatible. TinEye solo admite imágenes JPEG, PNG, GIF, BMP, TIFF "
"o WebP."
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"La imagen es demasiado simple para encontrar coincidencias. TinEye requiere "
"un nivel básico de detalle visual para identificar con éxito las "
"coincidencias."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "No se pudo descargar la imagen."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."

View file

@ -5,20 +5,22 @@
# Translators:
# Jiri Grönroos <jiri.gronroos@iki.fi>, 2017
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Mico Hautaluoma <m@mha.fi>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-06 00:21+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Mico Hautaluoma <m@mha.fi>\n"
"Language-Team: Finnish <https://weblate.bubu1.eu/projects/searxng/searxng/fi/"
">\n"
"Language: fi\n"
"Language-Team: Finnish "
"<https://weblate.bubu1.eu/projects/searxng/searxng/fi/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -268,16 +270,21 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"Kuvan url-osoitetta ei voitu lukea. Tämä saattaa johtua tiedostomuodosta, "
"jota ei tueta. TinEye tukee vain kuvia, jotka ovat JPEG, PNG, GIF, BMP, TIFF "
"tai WebP."
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"Kuva on liian yksinkertainen löytääkseen osumia. TinEye vaatii visuaalisen "
"tarkkuuden perustason, jotta osumien tunnistaminen onnistuu."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "Tätä kuvaa ei voida ladata."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -335,27 +342,32 @@ msgstr ""
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr ""
msgstr "Tor-verkon tarkistus lisäosa"
#: searx/plugins/tor_check.py:28
msgid ""
"This plugin checks if the address of the request is a TOR exit node, and "
"informs the user if it is, like check.torproject.org but from searxng."
msgstr ""
"Tämä lisäosa tarkistaa, tuleeko pyyntö TOR exit nodesta, ja ilmoittaa "
"käyttäjälle, jos se on, samalla tavalla kuin check.torproject.org, mutta "
"searxngista."
#: searx/plugins/tor_check.py:62
msgid ""
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
"unreachable."
msgstr ""
"TOR exit node listaan (https://check.torproject.org/exit-addresses) ei saada "
"yhteyttä."
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Sinä käytät TOR:ia. Sinun IP-osoitteesi näyttää olevan: {ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Sinä et käytä TOR:ia. Sinun IP-osoitteesi näyttää olevan: {ip_address}."
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"
@ -392,11 +404,11 @@ msgstr "hakusivulle"
#: searx/templates/simple/base.html:46
msgid "About"
msgstr ""
msgstr "Tietoa SearXNG:stä"
#: searx/templates/simple/base.html:50
msgid "Donate"
msgstr ""
msgstr "Lahjoita"
#: searx/templates/simple/base.html:54
#: searx/templates/simple/preferences.html:99
@ -430,7 +442,7 @@ msgstr "Julkiset palvelimet"
#: searx/templates/simple/base.html:72
msgid "Privacy policy"
msgstr ""
msgstr "Tietosuojakäytäntö"
#: searx/templates/simple/base.html:75
msgid "Contact instance maintainer"
@ -459,19 +471,20 @@ msgstr "välityspalvelimella"
#: searx/templates/simple/new_issue.html:64
msgid "Start submiting a new issue on GitHub"
msgstr ""
msgstr "Avaa uusi issue GitHubissa"
#: searx/templates/simple/new_issue.html:66
msgid "Please check for existing bugs about this engine on GitHub"
msgstr ""
msgstr "Tarkista tämän hakukoneen tämänhetkiset ongelmat GitHubista"
#: searx/templates/simple/new_issue.html:69
msgid "I confirm there is no existing bug about the issue I encounter"
msgstr ""
msgstr "Vahvistan, että tästä bugista ei ole olemassaolevaa issue:ta"
#: searx/templates/simple/new_issue.html:71
msgid "If this is a public instance, please specify the URL in the bug report"
msgstr ""
"Jos kyseessä on julkinen instanssi, määritä sen URL-osoite vikailmoituksessa"
#: searx/templates/simple/new_issue.html:72
msgid "Submit a new issue on Github including the above information"
@ -619,7 +632,7 @@ msgstr "Valitse auto seurataksesi selaimesi asetuksia"
#: searx/templates/simple/preferences.html:217
msgid "Center Alignment"
msgstr ""
msgstr "Keskipisteen kohdistus"
#: searx/templates/simple/preferences.html:220
#: searx/templates/simple/preferences.html:232
@ -635,7 +648,7 @@ msgstr "Pois"
#: searx/templates/simple/preferences.html:224
msgid "Displays results in the center of the page (Oscar layout)."
msgstr ""
msgstr "Näyttää tulokset sivun keskellä (Oscar-asettelu)."
#: searx/templates/simple/preferences.html:229
msgid "Results on new tabs"
@ -821,13 +834,15 @@ msgstr ""
#: searx/templates/simple/preferences.html:419
msgid "URL to restore your preferences in another browser"
msgstr ""
msgstr "URL-osoite asetusten palauttamiseksi toisessa selaimessa"
#: searx/templates/simple/preferences.html:423
msgid ""
"Specifying custom settings in the preferences URL can be used to sync "
"preferences across devices."
msgstr ""
"Määrittämällä mukautettuja asetuksia asetusten URL-osoitteessa voidaan "
"käyttää synkronoimiseen asetuksia eri laitteissa."
#: searx/templates/simple/preferences.html:428
msgid ""
@ -1381,4 +1396,3 @@ msgstr "piilota video"
#~ msgid "preferences"
#~ msgstr "asetukset"

View file

@ -10,21 +10,23 @@
# rike, 2014
# stf <stefan.marsiske@gmail.com>, 2014
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Shopimisrel <shopisrael12@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-06 00:21+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2022-08-12 07:18+0000\n"
"Last-Translator: Shopimisrel <shopisrael12@gmail.com>\n"
"Language-Team: Hebrew <https://weblate.bubu1.eu/projects/searxng/searxng/he/>"
"\n"
"Language: he\n"
"Language-Team: Hebrew "
"<https://weblate.bubu1.eu/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 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -274,16 +276,20 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"לא ניתן היה לקרוא את כתובת האתר של התמונה. ייתכן שהסיבה לכך היא פורמט קובץ "
"שאינו נתמך. TinEye תומך רק בתמונות שהן JPEG, PNG, GIF, BMP, TIFF או WebP."
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"התמונה הזו הינה יותר מידי פשוטה מכדי למצוא התאמות. TinEye צריך רמה בסיסית של "
"פרטים חזותיים כדי להצליח למצוא התאמות."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "אי אפשר להוריד את תמונה זו."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -339,27 +345,31 @@ msgstr ""
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr ""
msgstr "טור בודק תוסף"
#: searx/plugins/tor_check.py:28
msgid ""
"This plugin checks if the address of the request is a TOR exit node, and "
"informs the user if it is, like check.torproject.org but from searxng."
msgstr ""
"תוסף זה בודק אם הכתובת של הבקשה היא צומת יציאה של TOR, ומודיע למשתמש אם כן, "
"כמו check.torproject.org אבל מ-searxng."
#: searx/plugins/tor_check.py:62
msgid ""
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
"unreachable."
msgstr ""
"רשימת צומת היציאה של TOR (https://check.torproject.org/exit-addresses) אינה "
"ניתנת לגישה."
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "אתה משתמש ב-TOR. נראה שכתובת ה-IP שלך היא: {ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "אתה לא משתמש ב-TOR. נראה שכתובת ה-IP שלך היא: {ip_address}."
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"
@ -463,19 +473,19 @@ msgstr "פרוקסי"
#: searx/templates/simple/new_issue.html:64
msgid "Start submiting a new issue on GitHub"
msgstr ""
msgstr "התחל להגיש גיליון חדש ב- GitHub"
#: searx/templates/simple/new_issue.html:66
msgid "Please check for existing bugs about this engine on GitHub"
msgstr ""
msgstr "בדוק אם קיימים באגים לגבי מנוע זה ב-GitHub"
#: searx/templates/simple/new_issue.html:69
msgid "I confirm there is no existing bug about the issue I encounter"
msgstr ""
msgstr "אני מאשר שאין באג קיים לגבי הבעיה שאני נתקל בה"
#: searx/templates/simple/new_issue.html:71
msgid "If this is a public instance, please specify the URL in the bug report"
msgstr ""
msgstr "אם זה מופע ציבורי, אנא ציין את כתובת האתר בדוח הבאג"
#: searx/templates/simple/new_issue.html:72
msgid "Submit a new issue on Github including the above information"
@ -621,7 +631,7 @@ msgstr "בחר אוטומטית כדי לשמור על התאמה עם הגדר
#: searx/templates/simple/preferences.html:217
msgid "Center Alignment"
msgstr ""
msgstr "יישור מרכז"
#: searx/templates/simple/preferences.html:220
#: searx/templates/simple/preferences.html:232
@ -637,7 +647,7 @@ msgstr "כבוי"
#: searx/templates/simple/preferences.html:224
msgid "Displays results in the center of the page (Oscar layout)."
msgstr ""
msgstr "מציג תוצאות במרכז העמוד (פריסת אוסקר)."
#: searx/templates/simple/preferences.html:229
msgid "Results on new tabs"
@ -820,13 +830,15 @@ msgstr ""
#: searx/templates/simple/preferences.html:419
msgid "URL to restore your preferences in another browser"
msgstr ""
msgstr "כתובת אתר לשחזור ההעדפות שלך בדפדפן אחר"
#: searx/templates/simple/preferences.html:423
msgid ""
"Specifying custom settings in the preferences URL can be used to sync "
"preferences across devices."
msgstr ""
"ניתן להשתמש בציון הגדרות מותאמות אישית בכתובת ההעדפות כדי לסנכרן העדפות בין "
"מכשירים."
#: searx/templates/simple/preferences.html:428
msgid ""
@ -1374,4 +1386,3 @@ msgstr "הסתר וידאו"
#~ msgid "preferences"
#~ msgstr "העדפות"

View file

@ -9,20 +9,22 @@
# Noémi Ványi <sitbackandwait@gmail.com>, 2016-2017
# Kuka Manó <dumpster@perjel.hu>, 2022.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Lakatos Tamás <tomimost@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-21 21:02+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Lakatos Tamás <tomimost@gmail.com>\n"
"Language-Team: Hungarian <https://weblate.bubu1.eu/projects/searxng/searxng/"
"hu/>\n"
"Language: hu\n"
"Language-Team: Hungarian "
"<https://weblate.bubu1.eu/projects/searxng/searxng/hu/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -68,7 +70,7 @@ msgstr "videók"
#. CATEGORY_NAMES['IT']
#: searx/searxng.msg
msgid "it"
msgstr "az"
msgstr "IT"
#. CATEGORY_NAMES['NEWS']
#: searx/searxng.msg
@ -272,16 +274,21 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"Ennek a képnek az url-je nem olvasható. Ennek oka lehet egy nem támogatott "
"fájl formátum. A TinEye által támogatott formátumok: JPEG, PNG, GIF, BMP, "
"TIFF or WebP."
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"A kép túl egyszerű a kereséshez. A TinEye-nek szüksége van egy minimális "
"vizuális részletességre a sikeres kereséshez."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "A kép nem tölthető le."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -469,19 +476,20 @@ msgstr "proxy nézet"
#: searx/templates/simple/new_issue.html:64
msgid "Start submiting a new issue on GitHub"
msgstr ""
msgstr "Probléma bejelentése GitHubon"
#: searx/templates/simple/new_issue.html:66
msgid "Please check for existing bugs about this engine on GitHub"
msgstr ""
msgstr "Kérlek ellenőrizd a GitHubon bejelentett hibákat"
#: searx/templates/simple/new_issue.html:69
msgid "I confirm there is no existing bug about the issue I encounter"
msgstr "Megerősítem, hogy nincs már meglévő bejelentés a problémámról."
msgstr "Megerősítem, hogy nincs meglévő bejelentés a problémámról"
#: searx/templates/simple/new_issue.html:71
msgid "If this is a public instance, please specify the URL in the bug report"
msgstr "Ha ez egy nyilvános példány, kérlek add meg az URL-t a hibabejelntésben."
msgstr ""
"Ha ez egy nyilvános példány, kérlek add meg az URL-t a hiba bejelentésben"
#: searx/templates/simple/new_issue.html:72
msgid "Submit a new issue on Github including the above information"
@ -1388,4 +1396,3 @@ msgstr "videó elrejtése"
#~ msgid "preferences"
#~ msgstr "beállítások"

View file

@ -19,7 +19,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Italian <https://weblate.bubu1.eu/projects/searxng/searxng/it/"
">\n"
@ -290,7 +290,7 @@ msgstr ""
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "L'immagine non può essere scaricata."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -362,6 +362,8 @@ msgid ""
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
"unreachable."
msgstr ""
"La lista dei nodi d'uscita TOR non è raggiungibile (https://check.torproject."
"org/exit-addresses)."
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
@ -369,7 +371,7 @@ msgstr "Stai usando TOR. Il tuo indirizzo IP risulta essere : {ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Non stai usando TOR. Il tuo indirizzo IP sembra essere: {ip_address}."
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -3,20 +3,22 @@
# This file is distributed under the same license as the PROJECT project.
# FIRST AUTHOR <EMAIL@ADDRESS>, 2021.
# Morten R. Bjørklund <mortenrb@live.no>, 2022.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-06 00:21+0000\n"
"Last-Translator: Morten R. Bjørklund <mortenrb@live.no>\n"
"PO-Revision-Date: 2022-08-12 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Norwegian Bokmål <https://weblate.bubu1.eu/projects/searxng/"
"searxng/nb_NO/>\n"
"Language: nb_NO\n"
"Language-Team: Norwegian Bokmål "
"<https://weblate.bubu1.eu/projects/searxng/searxng/nb_NO/>\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -266,16 +268,21 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"Kunne ikke lese bilde-lenken. Dette kan være fordi bildet er i et format som "
"ikke er støttet. TinEye støtter bare JPEG, PNG, GIF, BMP, TIFF eller WebP "
"formater."
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"Bildet har for få særskilte detaljer for at TinEye kan finne like eller "
"lignende bilder."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "Bildet kunne ikke lastes ned."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -347,11 +354,11 @@ msgstr ""
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Du bruker TOR. Din ip-adresse er: {ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Du bruker ikke TOR. Din ip adresse er: {ip_address}."
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"
@ -1300,4 +1307,3 @@ msgstr "skjul video"
#~ msgid "preferences"
#~ msgstr "innstillinger"

View file

@ -14,7 +14,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Dutch <https://weblate.bubu1.eu/projects/searxng/searxng/nl/>"
"\n"
@ -288,7 +288,7 @@ msgstr ""
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "De afbeelding kon niet worden gedownload."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."

View file

@ -7,20 +7,21 @@
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-23 14:09+0000\n"
"PO-Revision-Date: 2022-08-12 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Polish <https://weblate.bubu1.eu/projects/searxng/searxng/pl/>"
"\n"
"Language: pl\n"
"Language-Team: Polish "
"<https://weblate.bubu1.eu/projects/searxng/searxng/pl/>\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && "
"(n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && "
"n%10<=9) || (n%100>=12 && n%100<=14) ? 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%10>=2 && n%10<=4) && (n"
"%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
"%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -270,6 +271,9 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"Nie można odczytać obrazu z tego adresu URL. Może być to spowodowane "
"nieobsługiwanym formatem pliku. TinEye obsługuje jedynie obrazy w formatach "
"JPEG, PNG, GIF, BMP, TIFF i WebP."
#: searx/engines/tineye.py:46
msgid ""
@ -279,7 +283,7 @@ msgstr ""
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "Nie można pobrać obrazu."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -351,7 +355,7 @@ msgstr ""
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Używasz sieci TOR. Twoje IP widoczne z zewnątrz to {ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
@ -1387,4 +1391,3 @@ msgstr "ukryj wideo"
#~ msgid "preferences"
#~ msgstr "preferencje"

View file

@ -12,8 +12,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"Last-Translator: Miguel Silva <miguelcabeca.dev@gmail.com>\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Portuguese <https://weblate.bubu1.eu/projects/searxng/searxng/"
"pt/>\n"
"Language: pt\n"
@ -283,7 +283,7 @@ msgstr ""
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "Não é possível fazer download da imagem."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."

View file

@ -16,7 +16,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Russian <https://weblate.bubu1.eu/projects/searxng/searxng/ru/"
">\n"
@ -286,6 +286,8 @@ msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"Изображение слишком простое для нахождения похожих. TinEye требует базовый "
"уровень визуальных деталей для успешной идентификации совпадений."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
@ -343,27 +345,32 @@ msgstr ""
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr ""
msgstr "Плагин проверки Tor'a"
#: searx/plugins/tor_check.py:28
msgid ""
"This plugin checks if the address of the request is a TOR exit node, and "
"informs the user if it is, like check.torproject.org but from searxng."
msgstr ""
"Этот плагин проверяет не является ли запрошенный адрес выходным узлом Tor'a, "
"и информирует пользователя если это так, как check.torproject.org, но от "
"searxng."
#: searx/plugins/tor_check.py:62
msgid ""
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
"unreachable."
msgstr ""
"Список выходных узлов Tor'a (https://check.torproject.org/exit-addresses) "
"недоступен."
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Вы используете Tor. Ваш IP адрес может быть: {ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "Вы не используете Tor. Ваш IP адрес может быть: {ip_address}."
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"
@ -482,7 +489,7 @@ msgstr ""
#: searx/templates/simple/new_issue.html:71
msgid "If this is a public instance, please specify the URL in the bug report"
msgstr ""
msgstr "Если это публичное зеркало, пожалуйста, укажите ссылку в баг-репорте"
#: searx/templates/simple/new_issue.html:72
msgid "Submit a new issue on Github including the above information"

View file

@ -10,7 +10,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Slovenian <https://weblate.bubu1.eu/projects/searxng/searxng/"
"sl/>\n"
@ -126,7 +126,7 @@ msgstr ""
#. CATEGORY_GROUPS['WEB']
#: searx/searxng.msg
msgid "web"
msgstr ""
msgstr "splet"
#. STYLE_NAMES['AUTO']
#: searx/searxng.msg
@ -279,7 +279,7 @@ msgstr ""
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "Slike ni bilo mogoče prevesti."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -604,7 +604,7 @@ msgstr "Spremeni jezik vmesnika"
#: searx/templates/simple/preferences.html:195
msgid "Theme"
msgstr ""
msgstr "Tema"
#: searx/templates/simple/preferences.html:203
msgid "Change SearXNG layout"
@ -1056,7 +1056,7 @@ msgstr ""
#: searx/templates/simple/result_templates/images.html:21
msgid "Engine"
msgstr ""
msgstr "Pogon"
#: searx/templates/simple/result_templates/images.html:22
msgid "View source"

View file

@ -15,7 +15,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-29 07:17+0000\n"
"PO-Revision-Date: 2022-08-12 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Turkish <https://weblate.bubu1.eu/projects/searxng/searxng/tr/"
">\n"
@ -283,6 +283,8 @@ msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
"Fotoğraf aranmak için fazla basit. TinEye 'ın başarılı şekilde çalışması "
"için basit detaylar gereklidir."
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."

View file

@ -13,20 +13,22 @@
# WhiredPlanck <fungdaat31@outlook.com>, 2020
# wordpure <wordlesspure@gmail.com>, 2022.
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# Academic tyro <y13593582403@gmail.com>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-01 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"PO-Revision-Date: 2022-08-12 07:18+0000\n"
"Last-Translator: wordpure <wordlesspure@gmail.com>\n"
"Language-Team: Chinese (Simplified) <https://weblate.bubu1.eu/projects/"
"searxng/searxng/zh_Hans/>\n"
"Language: zh_Hans_CN\n"
"Language-Team: Chinese (Simplified) "
"<https://weblate.bubu1.eu/projects/searxng/searxng/zh_Hans/>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -276,16 +278,19 @@ msgid ""
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
"无法读取该图片网址。这可能是由于文件格式不受支持。 TinEye 仅支持 "
"JPEG、PNG、GIF、BMP、TIFF 或 WebP 格式的图像。"
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
msgstr "图像过于简单,无法找到匹配项。 TinEye "
"需要基本级别的视觉细节才能成功识别匹配项。"
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "无法下载该图像."
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -335,27 +340,29 @@ msgstr "当您搜索「ip」时这将会显示您的 IP 地址;同理,在
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr ""
msgstr "Tor检查插件"
#: searx/plugins/tor_check.py:28
msgid ""
"This plugin checks if the address of the request is a TOR exit node, and "
"informs the user if it is, like check.torproject.org but from searxng."
msgstr ""
"该插件检查请求的 IP 地址是否为 TOR 出口节点,是的话就通知用户,可视为 "
"searxng 中的 check.torproject.org 。"
#: searx/plugins/tor_check.py:62
msgid ""
"The TOR exit node list (https://check.torproject.org/exit-addresses) is "
"unreachable."
msgstr ""
msgstr "TOR出口节点(https://check.torproject.org/exit-addresses)不可达。"
#: searx/plugins/tor_check.py:78
msgid "You are using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "你在使用TOR。你的IP地址应该是{ip_address}."
#: searx/plugins/tor_check.py:84
msgid "You are not using TOR. Your IP address seems to be: {ip_address}."
msgstr ""
msgstr "你没有在使用Tor。你的IP地址应该是{ip_address}."
#: searx/plugins/tracker_url_remover.py:29
msgid "Tracker URL remover"
@ -457,19 +464,19 @@ msgstr "代理"
#: searx/templates/simple/new_issue.html:64
msgid "Start submiting a new issue on GitHub"
msgstr ""
msgstr "在GitHub上提交一个新问题"
#: searx/templates/simple/new_issue.html:66
msgid "Please check for existing bugs about this engine on GitHub"
msgstr ""
msgstr "请在 GitHub 上检查有关此引擎的现有错误"
#: searx/templates/simple/new_issue.html:69
msgid "I confirm there is no existing bug about the issue I encounter"
msgstr ""
msgstr "我确定已知 bug 中没有我遇到的问题"
#: searx/templates/simple/new_issue.html:71
msgid "If this is a public instance, please specify the URL in the bug report"
msgstr ""
msgstr "如果这是一个公共问题请在Bug报告页面提交URL"
#: searx/templates/simple/new_issue.html:72
msgid "Submit a new issue on Github including the above information"
@ -1352,4 +1359,3 @@ msgstr "隐藏视频"
#~ msgid "preferences"
#~ msgstr "首选项"

View file

@ -9,20 +9,22 @@
# Mingye Wang <arthur200126@gmail.com>, 2018
# 黃柏諺 <s8321414@gmail.com>, 2020
# Markus Heiser <markus.heiser@darmarit.de>, 2022.
# GooGuJiang <gu@gmoe.cc>, 2022.
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2022-07-23 14:08+0000\n"
"PO-Revision-Date: 2022-07-23 14:09+0000\n"
"PO-Revision-Date: 2022-08-05 07:18+0000\n"
"Last-Translator: Markus Heiser <markus.heiser@darmarit.de>\n"
"Language-Team: Chinese (Traditional) <https://weblate.bubu1.eu/projects/"
"searxng/searxng/zh_Hant/>\n"
"Language: zh_Hant_TW\n"
"Language-Team: Chinese (Traditional) "
"<https://weblate.bubu1.eu/projects/searxng/searxng/zh_Hant/>\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.13.1\n"
"Generated-By: Babel 2.10.3\n"
#. CONSTANT_NAMES['DEFAULT_GROUP_NAME']
@ -271,17 +273,19 @@ msgid ""
"Could not read that image url. This may be due to an unsupported file "
"format. TinEye only supports images that are JPEG, PNG, GIF, BMP, TIFF or"
" WebP."
msgstr ""
msgstr "無法存取該圖像網址。這可能是因為不支援的文件格式造成的。TinEye只支持JPEG、PNG"
"、GIF、BMP、TIFF或WebP的圖像。"
#: searx/engines/tineye.py:46
msgid ""
"The image is too simple to find matches. TinEye requires a basic level of"
" visual detail to successfully identify matches."
msgstr ""
msgstr "圖片訊息量過少無法找到相符的結果。TinEye需要一個更基礎的圖片細節以成功辨識"
"相符的結果。"
#: searx/engines/tineye.py:52
msgid "The image could not be downloaded."
msgstr ""
msgstr "圖片無法下載。。"
#: searx/plugins/hash_plugin.py:24
msgid "Converts strings to different hash digests."
@ -297,7 +301,7 @@ msgstr "主機名替換"
#: searx/plugins/hostname_replace.py:10
msgid "Rewrite result hostnames or remove results based on the hostname"
msgstr "重寫結果的主機名或基於主機名移除結果"
msgstr "重寫結果的主機名或在此主機名移除結果"
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
@ -321,7 +325,7 @@ msgstr "若分類被選取時立刻執行搜尋。停用以選取多個分類。
#: searx/plugins/self_info.py:20
msgid "Self Informations"
msgstr "自身息"
msgstr "自身息"
#: searx/plugins/self_info.py:21
msgid ""
@ -331,7 +335,7 @@ msgstr "若搜尋字串爲「ip」則顯示您的 IP而若是「user agent」
#: searx/plugins/tor_check.py:25
msgid "Tor check plugin"
msgstr "Tor 網檢測"
msgstr "Tor 網檢測"
#: searx/plugins/tor_check.py:28
msgid ""
@ -1348,4 +1352,3 @@ msgstr "隱藏影片"
#~ msgid "preferences"
#~ msgstr "偏好設定"

View file

@ -1282,19 +1282,17 @@ Disallow: /*?*q=*
@app.route('/opensearch.xml', methods=['GET'])
def opensearch():
method = 'post'
if request.preferences.get_value('method') == 'GET':
method = 'get'
method = request.preferences.get_value('method')
autocomplete = request.preferences.get_value('autocomplete')
# chrome/chromium only supports HTTP GET....
if request.headers.get('User-Agent', '').lower().find('webkit') >= 0:
method = 'get'
method = 'GET'
autocomplete = request.preferences.get_value('autocomplete')
if method not in ('POST', 'GET'):
method = 'POST'
ret = render('opensearch.xml', opensearch_method=method, autocomplete=autocomplete)
resp = Response(response=ret, status=200, mimetype="application/opensearchdescription+xml")
return resp

View file

@ -244,7 +244,9 @@ class ViewsTestCase(SearxTestCase):
def test_opensearch_xml(self):
result = self.app.get('/opensearch.xml')
self.assertEqual(result.status_code, 200)
self.assertIn(b'<Description>a privacy-respecting, hackable metasearch engine</Description>', result.data)
self.assertIn(
b'<Description>SearXNG is a metasearch engine that respects your privacy.</Description>', result.data
)
def test_favicon(self):
result = self.app.get('/favicon.ico')