diff --git a/requirements-dev.txt b/requirements-dev.txt index e7fea88d2..c1d93b764 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,7 +4,7 @@ cov-core==1.15.0 black==22.12.0 pylint==2.17.1 splinter==0.19.0 -selenium==4.8.2 +selenium==4.8.3 twine==4.0.2 Pallets-Sphinx-Themes==2.0.3 Sphinx==5.3.0 diff --git a/requirements.txt b/requirements.txt index 3ee417d7c..f6b46ec8a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ Brotli==1.0.9 uvloop==0.17.0 httpx-socks[asyncio]==0.7.2 setproctitle==1.3.2 -redis==4.5.1 +redis==4.5.4 markdown-it-py==2.2.0 typing_extensions==4.5.0 fasttext-predict==0.9.2.1 diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py index 85e977bdb..4dd23c759 100644 --- a/searx/engines/duckduckgo.py +++ b/searx/engines/duckduckgo.py @@ -6,6 +6,7 @@ DuckDuckGo Lite """ from typing import TYPE_CHECKING +import re from urllib.parse import urlencode import json import babel @@ -15,6 +16,7 @@ from searx import ( network, locales, redislib, + external_bang, ) from searx import redisdb from searx.utils import ( @@ -197,6 +199,17 @@ ddg_lang_map = { def request(query, params): + # quote ddg bangs + query_parts = [] + # for val in re.split(r'(\s+)', query): + for val in re.split(r'(\s+)', query): + if not val.strip(): + continue + if val.startswith('!') and external_bang.get_node(external_bang.EXTERNAL_BANGS, val[1:]): + val = f"'{val}'" + query_parts.append(val) + query = ' '.join(query_parts) + eng_region = traits.get_region(params['searxng_locale'], traits.all_locale) # eng_lang = get_ddg_lang(traits, params['searxng_locale']) diff --git a/searx/engines/flickr_noapi.py b/searx/engines/flickr_noapi.py index 4ff59fc52..5299c604f 100644 --- a/searx/engines/flickr_noapi.py +++ b/searx/engines/flickr_noapi.py @@ -1,14 +1,22 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -""" - Flickr (Images) +# lint: pylint +"""Flickr (Images) + """ -from json import loads +from typing import TYPE_CHECKING + +import json from time import time import re from urllib.parse import urlencode from searx.utils import ecma_unescape, html_to_text +if TYPE_CHECKING: + import logging + + logger: logging.Logger + # about about = { "website": 'https://www.flickr.com', @@ -19,23 +27,24 @@ about = { "results": 'HTML', } +# engine dependent config categories = ['images'] - -url = 'https://www.flickr.com/' -search_url = url + 'search?{query}&page={page}' -time_range_url = '&min_upload_date={start}&max_upload_date={end}' -photo_url = 'https://www.flickr.com/photos/{userid}/{photoid}' -modelexport_re = re.compile(r"^\s*modelExport:\s*({.*}),$", re.M) -image_sizes = ('o', 'k', 'h', 'b', 'c', 'z', 'n', 'm', 't', 'q', 's') - paging = True time_range_support = True +safesearch = False + time_range_dict = { 'day': 60 * 60 * 24, 'week': 60 * 60 * 24 * 7, 'month': 60 * 60 * 24 * 7 * 4, 'year': 60 * 60 * 24 * 7 * 52, } +image_sizes = ('o', 'k', 'h', 'b', 'c', 'z', 'm', 'n', 't', 'q', 's') + +search_url = 'https://www.flickr.com/search?{query}&page={page}' +time_range_url = '&min_upload_date={start}&max_upload_date={end}' +photo_url = 'https://www.flickr.com/photos/{userid}/{photoid}' +modelexport_re = re.compile(r"^\s*modelExport:\s*({.*}),$", re.M) def build_flickr_url(user_id, photo_id): @@ -55,51 +64,59 @@ def request(query, params): return params -def response(resp): +def response(resp): # pylint: disable=too-many-branches results = [] matches = modelexport_re.search(resp.text) - if matches is None: return results match = matches.group(1) - model_export = loads(match) + model_export = json.loads(match) if 'legend' not in model_export: return results - legend = model_export['legend'] # handle empty page if not legend or not legend[0]: return results - for index in legend: - photo = model_export['main'][index[0]][int(index[1])][index[2]][index[3]][int(index[4])] + for x, index in enumerate(legend): + if len(index) != 8: + logger.debug("skip legend enty %s : %s", x, index) + continue + + photo = model_export['main'][index[0]][int(index[1])][index[2]][index[3]][index[4]][index[5]][int(index[6])][ + index[7] + ] author = ecma_unescape(photo.get('realname', '')) - source = ecma_unescape(photo.get('username', '')) + ' @ Flickr' + source = ecma_unescape(photo.get('username', '')) + if source: + source += ' @ Flickr' title = ecma_unescape(photo.get('title', '')) content = html_to_text(ecma_unescape(photo.get('description', ''))) img_src = None + # From the biggest to the lowest format + size_data = None for image_size in image_sizes: - if image_size in photo['sizes']: - img_src = photo['sizes'][image_size]['url'] - img_format = ( - 'jpg ' + str(photo['sizes'][image_size]['width']) + 'x' + str(photo['sizes'][image_size]['height']) - ) + if image_size in photo['sizes']['data']: + size_data = photo['sizes']['data'][image_size]['data'] break - if not img_src: - logger.debug('cannot find valid image size: {0}'.format(repr(photo))) + if not size_data: + logger.debug('cannot find valid image size: {0}'.format(repr(photo['sizes']['data']))) continue + img_src = size_data['url'] + img_format = 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']: - thumbnail_src = photo['sizes']['n']['url'] - elif 'z' in photo['sizes']: - thumbnail_src = photo['sizes']['z']['url'] + if 'n' in photo['sizes']['data']: + thumbnail_src = photo['sizes']['data']['n']['data']['url'] + elif 'z' in photo['sizes']['data']: + thumbnail_src = photo['sizes']['data']['z']['data']['url'] else: thumbnail_src = img_src diff --git a/searx/engines/google_news.py b/searx/engines/google_news.py index ae55ca9cb..4b1bffa30 100644 --- a/searx/engines/google_news.py +++ b/searx/engines/google_news.py @@ -27,10 +27,8 @@ The google news API ignores some parameters from the common :ref:`google API`: from typing import TYPE_CHECKING -import binascii -import re from urllib.parse import urlencode -from base64 import b64decode +import base64 from lxml import html import babel @@ -144,34 +142,17 @@ def response(resp): for result in eval_xpath_list(dom, '//div[@class="xrnccd"]'): - # The first tag in the
contains the link to the - # article The href attribute of the is a google internal link, - # we can't use. The real link is hidden in the jslog attribute: - # - # + # The first tag in the
contains the link to the article + # The href attribute of the tag is a google internal link, we have + # to decode - jslog = eval_xpath_getindex(result, './article/a/@jslog', 0) - url = re.findall('http[^;]*', jslog) - if url: - url = url[0] - else: - # The real URL is base64 encoded in the json attribute: - # jslog="95014; 5:W251bGwsbnVsbCxudW...giXQ==; track:click" - jslog = jslog.split(";")[1].split(':')[1].strip() - try: - padding = (4 - (len(jslog) % 4)) * "=" - jslog = b64decode(jslog + padding) - except binascii.Error: - # URL can't be read, skip this result - continue + href = eval_xpath_getindex(result, './article/a/@href', 0) + href = href.split('?')[0] + href = href.split('/')[-1] + href = base64.urlsafe_b64decode(href + '====') + href = href[href.index(b'http') :].split(b'\xd2')[0] + href = href.decode() - # now we have : b'[null, ... null,"https://www.cnn.com/.../index.html"]' - url = re.findall('http[^;"]*', str(jslog))[0] - - # the first

tag in the
contains the title of the link title = extract_text(eval_xpath(result, './article/h3[1]')) # The pub_date is mostly a string like 'yesertday', not a real @@ -189,7 +170,7 @@ def response(resp): results.append( { - 'url': url, + 'url': href, 'title': title, 'content': content, 'img_src': img_src, diff --git a/searx/engines/seznam.py b/searx/engines/seznam.py index 48a167ce0..36a38848a 100644 --- a/searx/engines/seznam.py +++ b/searx/engines/seznam.py @@ -1,6 +1,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later -""" - Seznam +# lint: pylint +"""Seznam + """ from urllib.parse import urlencode @@ -11,7 +12,6 @@ from searx.utils import ( extract_text, eval_xpath_list, eval_xpath_getindex, - eval_xpath, ) # about @@ -54,8 +54,12 @@ def response(resp): results = [] dom = html.fromstring(resp.content.decode()) - for result_element in eval_xpath_list(dom, '//div[@data-dot="results"]/div'): - result_data = eval_xpath_getindex(result_element, './/div[contains(@class, "bec586")]', 0, default=None) + for result_element in eval_xpath_list( + dom, '//div[@id="searchpage-root"]//div[@class="Layout--left"]/div[@class="f2c528"]' + ): + result_data = eval_xpath_getindex( + result_element, './/div[@class="c8774a" or @class="e69e8d a11657"]', 0, default=None + ) if result_data is None: continue title_element = eval_xpath_getindex(result_element, './/h3/a', 0) @@ -63,7 +67,7 @@ def response(resp): { 'url': title_element.get('href'), 'title': extract_text(title_element), - 'content': extract_text(eval_xpath(result_data, './/div[@class="_3eded7"]')), + 'content': extract_text(result_data), } ) diff --git a/searx/plugins/limiter.py b/searx/plugins/limiter.py index b66a0805c..2a9e6f8f5 100644 --- a/searx/plugins/limiter.py +++ b/searx/plugins/limiter.py @@ -17,21 +17,26 @@ import re from flask import request from searx import redisdb +from searx.plugins import logger from searx.redislib import incr_sliding_window name = "Request limiter" description = "Limit the number of request" default_on = False preference_section = 'service' +logger = logger.getChild('limiter') - -re_bot = re.compile( +block_user_agent = re.compile( r'(' - + r'[Cc][Uu][Rr][Ll]|[wW]get|Scrapy|splash|JavaFX|FeedFetcher|python-requests|Go-http-client|Java|Jakarta|okhttp' + + r'unknown' + + r'|[Cc][Uu][Rr][Ll]|[wW]get|Scrapy|splash|JavaFX|FeedFetcher|python-requests|Go-http-client|Java|Jakarta|okhttp' + r'|HttpClient|Jersey|Python|libwww-perl|Ruby|SynHttpClient|UniversalFeedParser|Googlebot|GoogleImageProxy' + r'|bingbot|Baiduspider|yacybot|YandexMobileBot|YandexBot|Yahoo! Slurp|MJ12bot|AhrefsBot|archive.org_bot|msnbot' + r'|MJ12bot|SeznamBot|linkdexbot|Netvibes|SMTBot|zgrab|James BOT|Sogou|Abonti|Pixray|Spinn3r|SemrushBot|Exabot' + r'|ZmEu|BLEXBot|bitlybot' + # when you block requests from Farside instances, your instance will + # disappear from https://farside.link/ + # + r'|Farside' + r')' ) @@ -39,47 +44,59 @@ re_bot = re.compile( def is_accepted_request() -> bool: # pylint: disable=too-many-return-statements redis_client = redisdb.client() - user_agent = request.headers.get('User-Agent', '') + user_agent = request.headers.get('User-Agent', 'unknown') x_forwarded_for = request.headers.get('X-Forwarded-For', '') - if request.path == '/image_proxy': - if re_bot.match(user_agent): - return False + if request.path == '/healthz': return True + if block_user_agent.match(user_agent): + logger.debug("BLOCK %s: %s --> detected User-Agent: %s" % (x_forwarded_for, request.path, user_agent)) + return False + if request.path == '/search': + c_burst = incr_sliding_window(redis_client, 'IP limit, burst' + x_forwarded_for, 20) c_10min = incr_sliding_window(redis_client, 'IP limit, 10 minutes' + x_forwarded_for, 600) if c_burst > 15 or c_10min > 150: - logger.debug("to many request") # pylint: disable=undefined-variable - return False - - if re_bot.match(user_agent): - logger.debug("detected bot") # pylint: disable=undefined-variable + logger.debug("BLOCK %s: to many request", x_forwarded_for) return False if len(request.headers.get('Accept-Language', '').strip()) == '': - logger.debug("missing Accept-Language") # pylint: disable=undefined-variable + logger.debug("BLOCK %s: missing Accept-Language", x_forwarded_for) return False if request.headers.get('Connection') == 'close': - logger.debug("got Connection=close") # pylint: disable=undefined-variable + logger.debug("BLOCK %s: got Connection=close", x_forwarded_for) return False accept_encoding_list = [l.strip() for l in request.headers.get('Accept-Encoding', '').split(',')] if 'gzip' not in accept_encoding_list and 'deflate' not in accept_encoding_list: - logger.debug("suspicious Accept-Encoding") # pylint: disable=undefined-variable + logger.debug("BLOCK %s: suspicious Accept-Encoding", x_forwarded_for) return False if 'text/html' not in request.accept_mimetypes: - logger.debug("Accept-Encoding misses text/html") # pylint: disable=undefined-variable + logger.debug("BLOCK %s: Accept-Encoding misses text/html", x_forwarded_for) return False if request.args.get('format', 'html') != 'html': c = incr_sliding_window(redis_client, 'API limit' + x_forwarded_for, 3600) if c > 4: - logger.debug("API limit exceeded") # pylint: disable=undefined-variable + logger.debug("BLOCK %s: API limit exceeded", x_forwarded_for) return False + + logger.debug( + "OK %s: '%s'" % (x_forwarded_for, request.path) + + " || form: %s" % request.form + + " || Accept: %s" % request.headers.get('Accept', '') + + " || Accept-Language: %s" % request.headers.get('Accept-Language', '') + + " || Accept-Encoding: %s" % request.headers.get('Accept-Encoding', '') + + " || Content-Type: %s" % request.headers.get('Content-Type', '') + + " || Content-Length: %s" % request.headers.get('Content-Length', '') + + " || Connection: %s" % request.headers.get('Connection', '') + + " || User-Agent: %s" % user_agent + ) + return True diff --git a/searx/static/themes/simple/package.json b/searx/static/themes/simple/package.json index 530a96c88..fdb4f88bf 100644 --- a/searx/static/themes/simple/package.json +++ b/searx/static/themes/simple/package.json @@ -11,10 +11,10 @@ "grunt-eslint": "^24.0.0", "grunt-stylelint": "^0.16.0", "grunt-image": "^6.4.0", - "ionicons": "^6.0.2", + "ionicons": "^7.1.0", "less": "^4.1.3", "less-plugin-clean-css": "^1.5.1", - "sharp": "^0.31.0", + "sharp": "^0.32.0", "stylelint": "^13.13.1", "stylelint-config-standard": "^22.0.0", "ejs": "^3.1.8", diff --git a/searx/translations/af/LC_MESSAGES/messages.mo b/searx/translations/af/LC_MESSAGES/messages.mo index f1f5847c3..39d5ce36a 100644 Binary files a/searx/translations/af/LC_MESSAGES/messages.mo and b/searx/translations/af/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ar/LC_MESSAGES/messages.mo b/searx/translations/ar/LC_MESSAGES/messages.mo index 91186bed0..d1072568c 100644 Binary files a/searx/translations/ar/LC_MESSAGES/messages.mo and b/searx/translations/ar/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/bg/LC_MESSAGES/messages.mo b/searx/translations/bg/LC_MESSAGES/messages.mo index 4aaedb420..8b77d342f 100644 Binary files a/searx/translations/bg/LC_MESSAGES/messages.mo and b/searx/translations/bg/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/bn/LC_MESSAGES/messages.mo b/searx/translations/bn/LC_MESSAGES/messages.mo index 117d597ba..fd695d78f 100644 Binary files a/searx/translations/bn/LC_MESSAGES/messages.mo and b/searx/translations/bn/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/bo/LC_MESSAGES/messages.mo b/searx/translations/bo/LC_MESSAGES/messages.mo index ece0e471c..0af22b4a5 100644 Binary files a/searx/translations/bo/LC_MESSAGES/messages.mo and b/searx/translations/bo/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ca/LC_MESSAGES/messages.mo b/searx/translations/ca/LC_MESSAGES/messages.mo index 8e496509d..c5744a3d2 100644 Binary files a/searx/translations/ca/LC_MESSAGES/messages.mo and b/searx/translations/ca/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/cs/LC_MESSAGES/messages.mo b/searx/translations/cs/LC_MESSAGES/messages.mo index 644478212..91023b2f0 100644 Binary files a/searx/translations/cs/LC_MESSAGES/messages.mo and b/searx/translations/cs/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/cy/LC_MESSAGES/messages.mo b/searx/translations/cy/LC_MESSAGES/messages.mo index cfa0feff2..08f5baccd 100644 Binary files a/searx/translations/cy/LC_MESSAGES/messages.mo and b/searx/translations/cy/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/da/LC_MESSAGES/messages.mo b/searx/translations/da/LC_MESSAGES/messages.mo index dbfc6ff59..ca2b1daf7 100644 Binary files a/searx/translations/da/LC_MESSAGES/messages.mo and b/searx/translations/da/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/de/LC_MESSAGES/messages.mo b/searx/translations/de/LC_MESSAGES/messages.mo index 25e26beb9..ba3b1523e 100644 Binary files a/searx/translations/de/LC_MESSAGES/messages.mo and b/searx/translations/de/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/dv/LC_MESSAGES/messages.mo b/searx/translations/dv/LC_MESSAGES/messages.mo index bff7b3bc9..02e83e349 100644 Binary files a/searx/translations/dv/LC_MESSAGES/messages.mo and b/searx/translations/dv/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/el_GR/LC_MESSAGES/messages.mo b/searx/translations/el_GR/LC_MESSAGES/messages.mo index c4662d843..356389398 100644 Binary files a/searx/translations/el_GR/LC_MESSAGES/messages.mo and b/searx/translations/el_GR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/en/LC_MESSAGES/messages.mo b/searx/translations/en/LC_MESSAGES/messages.mo index 18c360818..c613ebd95 100644 Binary files a/searx/translations/en/LC_MESSAGES/messages.mo and b/searx/translations/en/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/eo/LC_MESSAGES/messages.mo b/searx/translations/eo/LC_MESSAGES/messages.mo index 02e3d25e0..89360b786 100644 Binary files a/searx/translations/eo/LC_MESSAGES/messages.mo and b/searx/translations/eo/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo index 432d076ba..1ca44c9ac 100644 Binary files a/searx/translations/es/LC_MESSAGES/messages.mo and b/searx/translations/es/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/et/LC_MESSAGES/messages.mo b/searx/translations/et/LC_MESSAGES/messages.mo index 6e823fb92..1446f148f 100644 Binary files a/searx/translations/et/LC_MESSAGES/messages.mo and b/searx/translations/et/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/eu/LC_MESSAGES/messages.mo b/searx/translations/eu/LC_MESSAGES/messages.mo index 5a2153dc6..b2c92deb5 100644 Binary files a/searx/translations/eu/LC_MESSAGES/messages.mo and b/searx/translations/eu/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fa_IR/LC_MESSAGES/messages.mo b/searx/translations/fa_IR/LC_MESSAGES/messages.mo index 48f0b1ee2..5129a2c93 100644 Binary files a/searx/translations/fa_IR/LC_MESSAGES/messages.mo and b/searx/translations/fa_IR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fi/LC_MESSAGES/messages.mo b/searx/translations/fi/LC_MESSAGES/messages.mo index fccc2a524..b0c6f1502 100644 Binary files a/searx/translations/fi/LC_MESSAGES/messages.mo and b/searx/translations/fi/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fil/LC_MESSAGES/messages.mo b/searx/translations/fil/LC_MESSAGES/messages.mo index b612c5bbd..9e5033542 100644 Binary files a/searx/translations/fil/LC_MESSAGES/messages.mo and b/searx/translations/fil/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/fr/LC_MESSAGES/messages.mo b/searx/translations/fr/LC_MESSAGES/messages.mo index e0d547ec7..0088122e1 100644 Binary files a/searx/translations/fr/LC_MESSAGES/messages.mo and b/searx/translations/fr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/gl/LC_MESSAGES/messages.mo b/searx/translations/gl/LC_MESSAGES/messages.mo index 47e74548b..d96b64aa2 100644 Binary files a/searx/translations/gl/LC_MESSAGES/messages.mo and b/searx/translations/gl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/he/LC_MESSAGES/messages.mo b/searx/translations/he/LC_MESSAGES/messages.mo index 04df27cc7..57cdacec7 100644 Binary files a/searx/translations/he/LC_MESSAGES/messages.mo and b/searx/translations/he/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/hr/LC_MESSAGES/messages.mo b/searx/translations/hr/LC_MESSAGES/messages.mo index 55b9a23a9..4ca6a7f34 100644 Binary files a/searx/translations/hr/LC_MESSAGES/messages.mo and b/searx/translations/hr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/hu/LC_MESSAGES/messages.mo b/searx/translations/hu/LC_MESSAGES/messages.mo index 3df429548..c3056fff4 100644 Binary files a/searx/translations/hu/LC_MESSAGES/messages.mo and b/searx/translations/hu/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ia/LC_MESSAGES/messages.mo b/searx/translations/ia/LC_MESSAGES/messages.mo index cc1942b0f..51c50469e 100644 Binary files a/searx/translations/ia/LC_MESSAGES/messages.mo and b/searx/translations/ia/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/id/LC_MESSAGES/messages.mo b/searx/translations/id/LC_MESSAGES/messages.mo index c65b0fb06..a3d60506a 100644 Binary files a/searx/translations/id/LC_MESSAGES/messages.mo and b/searx/translations/id/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo index 5e88744b2..da300a570 100644 Binary files a/searx/translations/it/LC_MESSAGES/messages.mo and b/searx/translations/it/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ja/LC_MESSAGES/messages.mo b/searx/translations/ja/LC_MESSAGES/messages.mo index 372b1f0bc..0058f6485 100644 Binary files a/searx/translations/ja/LC_MESSAGES/messages.mo and b/searx/translations/ja/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ko/LC_MESSAGES/messages.mo b/searx/translations/ko/LC_MESSAGES/messages.mo index 81a1f0323..93bd60903 100644 Binary files a/searx/translations/ko/LC_MESSAGES/messages.mo and b/searx/translations/ko/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/lt/LC_MESSAGES/messages.mo b/searx/translations/lt/LC_MESSAGES/messages.mo index d2edb6e85..87a675639 100644 Binary files a/searx/translations/lt/LC_MESSAGES/messages.mo and b/searx/translations/lt/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/lv/LC_MESSAGES/messages.mo b/searx/translations/lv/LC_MESSAGES/messages.mo index 097080692..7a503a11d 100644 Binary files a/searx/translations/lv/LC_MESSAGES/messages.mo and b/searx/translations/lv/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ml/LC_MESSAGES/messages.mo b/searx/translations/ml/LC_MESSAGES/messages.mo index 5ff2e1005..1f02b2c9d 100644 Binary files a/searx/translations/ml/LC_MESSAGES/messages.mo and b/searx/translations/ml/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ms/LC_MESSAGES/messages.mo b/searx/translations/ms/LC_MESSAGES/messages.mo index c6bef8106..e7f4e8ed6 100644 Binary files a/searx/translations/ms/LC_MESSAGES/messages.mo and b/searx/translations/ms/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.mo b/searx/translations/nb_NO/LC_MESSAGES/messages.mo index 2e38949d1..032625117 100644 Binary files a/searx/translations/nb_NO/LC_MESSAGES/messages.mo and b/searx/translations/nb_NO/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/nb_NO/LC_MESSAGES/messages.po b/searx/translations/nb_NO/LC_MESSAGES/messages.po index 5e18b8a06..f5870c129 100644 --- a/searx/translations/nb_NO/LC_MESSAGES/messages.po +++ b/searx/translations/nb_NO/LC_MESSAGES/messages.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-02-20 11:22+0000\n" -"PO-Revision-Date: 2023-02-24 07:07+0000\n" +"PO-Revision-Date: 2023-03-30 12:37+0000\n" "Last-Translator: return42 \n" "Language-Team: Norwegian Bokmål \n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.15.2\n" +"X-Generator: Weblate 4.16.4\n" "Generated-By: Babel 2.11.0\n" #. CONSTANT_NAMES['DEFAULT_GROUP_NAME'] @@ -392,10 +392,12 @@ msgid "" "You are using Tor and it looks like you have this external IP address: " "{ip_address}" msgstr "" +"Du bruker Tor og det ser ut som om du har denne eksterne IP adressen: " +"{ip_address}" #: searx/plugins/tor_check.py:86 msgid "You are not using Tor and you have this external IP address: {ip_address}" -msgstr "" +msgstr "Du bruker ikke Tor og du har denne IP adressen: {ip_address}" #: searx/plugins/tracker_url_remover.py:29 msgid "Tracker URL remover" diff --git a/searx/translations/nl/LC_MESSAGES/messages.mo b/searx/translations/nl/LC_MESSAGES/messages.mo index fb0193b08..2982f47a1 100644 Binary files a/searx/translations/nl/LC_MESSAGES/messages.mo and b/searx/translations/nl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/oc/LC_MESSAGES/messages.mo b/searx/translations/oc/LC_MESSAGES/messages.mo index 339debbab..e479a21f6 100644 Binary files a/searx/translations/oc/LC_MESSAGES/messages.mo and b/searx/translations/oc/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pa/LC_MESSAGES/messages.mo b/searx/translations/pa/LC_MESSAGES/messages.mo index f0ffbda43..619a237c9 100644 Binary files a/searx/translations/pa/LC_MESSAGES/messages.mo and b/searx/translations/pa/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pap/LC_MESSAGES/messages.mo b/searx/translations/pap/LC_MESSAGES/messages.mo index b97570543..c3e9e4e4a 100644 Binary files a/searx/translations/pap/LC_MESSAGES/messages.mo and b/searx/translations/pap/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pl/LC_MESSAGES/messages.mo b/searx/translations/pl/LC_MESSAGES/messages.mo index 978fa553d..ae5602472 100644 Binary files a/searx/translations/pl/LC_MESSAGES/messages.mo and b/searx/translations/pl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pt/LC_MESSAGES/messages.mo b/searx/translations/pt/LC_MESSAGES/messages.mo index 64a602348..e626fb9f7 100644 Binary files a/searx/translations/pt/LC_MESSAGES/messages.mo and b/searx/translations/pt/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.mo b/searx/translations/pt_BR/LC_MESSAGES/messages.mo index 213457a6e..6e15fd6da 100644 Binary files a/searx/translations/pt_BR/LC_MESSAGES/messages.mo and b/searx/translations/pt_BR/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ro/LC_MESSAGES/messages.mo b/searx/translations/ro/LC_MESSAGES/messages.mo index 80190e389..23d1fca68 100644 Binary files a/searx/translations/ro/LC_MESSAGES/messages.mo and b/searx/translations/ro/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ru/LC_MESSAGES/messages.mo b/searx/translations/ru/LC_MESSAGES/messages.mo index 590a841f2..d1f939269 100644 Binary files a/searx/translations/ru/LC_MESSAGES/messages.mo and b/searx/translations/ru/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/si/LC_MESSAGES/messages.mo b/searx/translations/si/LC_MESSAGES/messages.mo index c5535a16c..0e9ab3787 100644 Binary files a/searx/translations/si/LC_MESSAGES/messages.mo and b/searx/translations/si/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sk/LC_MESSAGES/messages.mo b/searx/translations/sk/LC_MESSAGES/messages.mo index 5165b63ac..00aabfa38 100644 Binary files a/searx/translations/sk/LC_MESSAGES/messages.mo and b/searx/translations/sk/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sl/LC_MESSAGES/messages.mo b/searx/translations/sl/LC_MESSAGES/messages.mo index f0c8a1231..7391ac184 100644 Binary files a/searx/translations/sl/LC_MESSAGES/messages.mo and b/searx/translations/sl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sr/LC_MESSAGES/messages.mo b/searx/translations/sr/LC_MESSAGES/messages.mo index 39b7da617..47a552d2e 100644 Binary files a/searx/translations/sr/LC_MESSAGES/messages.mo and b/searx/translations/sr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/sv/LC_MESSAGES/messages.mo b/searx/translations/sv/LC_MESSAGES/messages.mo index 0a22f90e6..8275c63a7 100644 Binary files a/searx/translations/sv/LC_MESSAGES/messages.mo and b/searx/translations/sv/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/szl/LC_MESSAGES/messages.mo b/searx/translations/szl/LC_MESSAGES/messages.mo index abbd37716..8a01da089 100644 Binary files a/searx/translations/szl/LC_MESSAGES/messages.mo and b/searx/translations/szl/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ta/LC_MESSAGES/messages.mo b/searx/translations/ta/LC_MESSAGES/messages.mo index cb11269d8..81fe92743 100644 Binary files a/searx/translations/ta/LC_MESSAGES/messages.mo and b/searx/translations/ta/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/ta/LC_MESSAGES/messages.po b/searx/translations/ta/LC_MESSAGES/messages.po index 0fda30744..401f4af02 100644 --- a/searx/translations/ta/LC_MESSAGES/messages.po +++ b/searx/translations/ta/LC_MESSAGES/messages.po @@ -10,20 +10,22 @@ # POORAJITH ST , 2019 # Prasanna Venkadesh , 2019 # Markus Heiser , 2022. +# return42 , 2023. msgid "" msgstr "" -"Project-Id-Version: searx\n" +"Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2023-02-20 11:22+0000\n" -"PO-Revision-Date: 2022-11-04 07:18+0000\n" -"Last-Translator: Markus Heiser \n" +"PO-Revision-Date: 2023-03-30 12:37+0000\n" +"Last-Translator: return42 \n" +"Language-Team: Tamil \n" "Language: ta\n" -"Language-Team: Tamil " -"\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.16.4\n" "Generated-By: Babel 2.11.0\n" #. CONSTANT_NAMES['DEFAULT_GROUP_NAME'] @@ -427,7 +429,7 @@ msgstr "பக்கம் கிடைக்கவில்லை" #: searx/templates/simple/404.html:6 #, python-format msgid "Go to %(search_page)s." -msgstr "%(search_page)s-க்கு செல்" +msgstr "%(search_page)s-க்கு செல்." #: searx/templates/simple/404.html:6 msgid "search page" @@ -956,7 +958,7 @@ msgstr "முன் பக்கத்தைக் காட்டு" #: searx/templates/simple/search.html:9 #: searx/templates/simple/simple_search.html:5 msgid "Search for..." -msgstr "எதைப்பற்றி தேட வேண்டும்?" +msgstr "எதைப்பற்றி தேட வேண்டும..." #: searx/templates/simple/search.html:10 #: searx/templates/simple/simple_search.html:6 @@ -1529,4 +1531,3 @@ msgstr "காணொளிகளை மறை" #~ msgid "Automatically detect the query search language and switch to it." #~ msgstr "" - diff --git a/searx/translations/te/LC_MESSAGES/messages.mo b/searx/translations/te/LC_MESSAGES/messages.mo index c4149752c..d952dd94f 100644 Binary files a/searx/translations/te/LC_MESSAGES/messages.mo and b/searx/translations/te/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/th/LC_MESSAGES/messages.mo b/searx/translations/th/LC_MESSAGES/messages.mo index 0b9649bb0..293369b66 100644 Binary files a/searx/translations/th/LC_MESSAGES/messages.mo and b/searx/translations/th/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/tr/LC_MESSAGES/messages.mo b/searx/translations/tr/LC_MESSAGES/messages.mo index 2da509210..8cd7b9b0f 100644 Binary files a/searx/translations/tr/LC_MESSAGES/messages.mo and b/searx/translations/tr/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/uk/LC_MESSAGES/messages.mo b/searx/translations/uk/LC_MESSAGES/messages.mo index 92eabc82c..733c047b1 100644 Binary files a/searx/translations/uk/LC_MESSAGES/messages.mo and b/searx/translations/uk/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/vi/LC_MESSAGES/messages.mo b/searx/translations/vi/LC_MESSAGES/messages.mo index 2e08e3347..fc08008cc 100644 Binary files a/searx/translations/vi/LC_MESSAGES/messages.mo and b/searx/translations/vi/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo index ddd626e5f..87d78f394 100644 Binary files a/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo and b/searx/translations/zh_Hans_CN/LC_MESSAGES/messages.mo differ diff --git a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo index 13fe2ee96..53064da53 100644 Binary files a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo and b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.mo differ