logo

searx

My custom branche(s) on searx, a meta-search engine git clone https://hacktivis.me/git/searx.git
commit: ac8759cd3ff99024864fd04d7c4bef5c3a00b971
parent c7c6c35ccd7373d2107b70b92badb9b70d31905f
Author: Kang-min Liu <gugod@gugod.org>
Date:   Sat, 14 Nov 2015 00:05:44 +0100

Merge remote-tracking branch 'origin/master'

Diffstat:

M.travis.yml6++++++
MAUTHORS.rst4++++
MCHANGELOG.rst46++++++++++++++++++++++++++++++++++++++++++++++
MREADME.rst2+-
Msearx/__init__.py2+-
Msearx/autocomplete.py2+-
Msearx/engines/__init__.py2+-
Msearx/engines/bing.py2+-
Msearx/engines/bing_images.py2+-
Msearx/engines/gigablast.py8++++++--
Msearx/engines/google.py13+++++++++----
Msearx/engines/piratebay.py2+-
Msearx/engines/searchcode_code.py5+++++
Msearx/engines/searchcode_doc.py5+++++
Msearx/engines/startpage.py53++++++++++++++++++++++++++++++++++++++++++++++-------
Msearx/engines/twitter.py8++++++--
Msearx/engines/wikidata.py34++++++++++++++++++++++++++--------
Asearx/engines/yandex.py62++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dsearx/engines/youtube.py93-------------------------------------------------------------------------------
Msearx/plugins/self_info.py8++++----
Msearx/poolrequests.py18++++++++++--------
Asearx/results.py239+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msearx/search.py284++++++++-----------------------------------------------------------------------
Msearx/settings.yml39+++++++++++++++++++++++++++------------
Msearx/settings_robot.yml22+++++++++++++++++-----
Msearx/static/themes/oscar/css/oscar.min.css90+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Msearx/static/themes/oscar/less/oscar/results.less5+++++
Msearx/templates/courgette/opensearch.xml1+
Msearx/templates/default/opensearch.xml1+
Msearx/templates/oscar/macros.html6+++++-
Msearx/templates/oscar/opensearch.xml1+
Msearx/templates/pix-art/preferences.html4++--
Msearx/tests/engines/test_bing.py8++++----
Msearx/tests/engines/test_bing_images.py10+++++-----
Msearx/tests/engines/test_duckduckgo.py7++++---
Msearx/tests/engines/test_piratebay.py6+++---
Msearx/tests/engines/test_startpage.py6+++---
Dsearx/tests/engines/test_youtube.py204-------------------------------------------------------------------------------
Msearx/tests/test_engines.py1-
Msearx/tests/test_plugins.py28+++++++++++++++++-----------
Asearx/tests/test_results.py41+++++++++++++++++++++++++++++++++++++++++
Msearx/tests/test_search.py23++++-------------------
Msearx/tests/test_utils.py10++++++++++
Msearx/tests/test_webapp.py8+++++++-
Msearx/translations/de/LC_MESSAGES/messages.mo0
Msearx/translations/de/LC_MESSAGES/messages.po170++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/en/LC_MESSAGES/messages.mo0
Msearx/translations/es/LC_MESSAGES/messages.mo0
Msearx/translations/es/LC_MESSAGES/messages.po180+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Msearx/translations/fr/LC_MESSAGES/messages.mo0
Msearx/translations/fr/LC_MESSAGES/messages.po170++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/he/LC_MESSAGES/messages.mo0
Msearx/translations/he/LC_MESSAGES/messages.po174+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
Msearx/translations/hu/LC_MESSAGES/messages.mo0
Msearx/translations/hu/LC_MESSAGES/messages.po170++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/it/LC_MESSAGES/messages.mo0
Msearx/translations/it/LC_MESSAGES/messages.po168++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/ja/LC_MESSAGES/messages.mo0
Msearx/translations/ja/LC_MESSAGES/messages.po186+++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
Msearx/translations/nl/LC_MESSAGES/messages.mo0
Msearx/translations/nl/LC_MESSAGES/messages.po170++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/pt/LC_MESSAGES/messages.mo0
Msearx/translations/ro/LC_MESSAGES/messages.mo0
Msearx/translations/ro/LC_MESSAGES/messages.po172++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/ru/LC_MESSAGES/messages.mo0
Msearx/translations/ru/LC_MESSAGES/messages.po168++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Msearx/translations/tr/LC_MESSAGES/messages.mo0
Msearx/translations/tr/LC_MESSAGES/messages.po170++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------
Asearx/translations/zh_CN/LC_MESSAGES/messages.mo0
Asearx/translations/zh_CN/LC_MESSAGES/messages.po682+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msearx/utils.py44++++++++++++++++++++------------------------
Msearx/version.py2+-
Msearx/webapp.py70+++++++++++++++++++++++++++++++++++-----------------------------------
73 files changed, 2781 insertions(+), 1336 deletions(-)

diff --git a/.travis.yml b/.travis.yml @@ -1,3 +1,9 @@ +sudo: false +cache: + - pip + - npm + - directories: + - $HOME/.cache/pip language: python python: - "2.7" diff --git a/AUTHORS.rst b/AUTHORS.rst @@ -34,3 +34,7 @@ generally made searx better: - @opi - @dimqua - Giorgos Logiotatidis +- Luc Didry +- Niklas Haas +- @underr +- Emmanuel Benazera diff --git a/CHANGELOG.rst b/CHANGELOG.rst @@ -1,3 +1,49 @@ +0.8.0 2015.09.08 +================ + +- New engines + + - Blekko (image) + - Gigablast (general) + - Spotify (music) + - Swisscows (general, images) + - Qwant (general, images, news, social media) +- Plugin system +- New plugins + + - HTTPS rewrite + - Search on cagetory select + - User information + - Tracker url part remover +- Multiple outgoing IP and HTTP/HTTPS proxy support +- New autocompleter: startpage +- New theme: pix-art +- Settings file structure change +- Fabfile, docker deployment +- Optional safesearch result filter +- Force HTTPS in engines if possible +- Disabled HTTP referrer on outgoing links +- Display cookie information +- Prettier search URLs +- Right-to-left text handling in themes +- Translation updates (New locales: Chinese, Hebrew, Portuguese, Romanian) + + +New dependencies +~~~~~~~~~~~~~~~~ + +- pyopenssl +- ndg-httpsclient +- pyasn1 +- pyasn1-modules +- certifi + + +News +~~~~ + +@dalf joined the maintainer "team" + 0.7.0 2015.02.03 ================ diff --git a/README.rst b/README.rst @@ -96,7 +96,7 @@ remember 'untested code is broken code'. Runs robot (Selenium) tests, you must have ``firefox`` installed because this functional tests actually run the browser and perform operations on it. Also searx is executed with -`settings\_robot <https://github.com/asciimoo/searx/blob/master/searx/settings_robot.py>`__. +`settings\_robot <https://github.com/asciimoo/searx/blob/master/searx/settings_robot.yml>`__. ``make flake8`` ''''''''''''''' diff --git a/searx/__init__.py b/searx/__init__.py @@ -40,7 +40,7 @@ else: with open(settings_path) as settings_yaml: settings = load(settings_yaml) -if settings.get('server', {}).get('debug'): +if settings.get('general', {}).get('debug'): logging.basicConfig(level=logging.DEBUG) else: logging.basicConfig(level=logging.WARNING) diff --git a/searx/autocomplete.py b/searx/autocomplete.py @@ -29,7 +29,7 @@ from searx.poolrequests import get as http_get def get(*args, **kwargs): if 'timeout' not in kwargs: - kwargs['timeout'] = settings['server']['request_timeout'] + kwargs['timeout'] = settings['outgoing']['request_timeout'] return http_get(*args, **kwargs) diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py @@ -75,7 +75,7 @@ def load_engine(engine_data): engine.safesearch = False if not hasattr(engine, 'timeout'): - engine.timeout = settings['server']['request_timeout'] + engine.timeout = settings['outgoing']['request_timeout'] if not hasattr(engine, 'shortcut'): engine.shortcut = '' diff --git a/searx/engines/bing.py b/searx/engines/bing.py @@ -52,7 +52,7 @@ def request(query, params): def response(resp): results = [] - dom = html.fromstring(resp.content) + dom = html.fromstring(resp.text) # parse results for result in dom.xpath('//div[@class="sa_cc"]'): diff --git a/searx/engines/bing_images.py b/searx/engines/bing_images.py @@ -63,7 +63,7 @@ def request(query, params): def response(resp): results = [] - dom = html.fromstring(resp.content) + dom = html.fromstring(resp.text) # init regex for yaml-parsing p = re.compile('({|,)([a-z]+):(")') diff --git a/searx/engines/gigablast.py b/searx/engines/gigablast.py @@ -13,6 +13,8 @@ from urllib import urlencode from cgi import escape from lxml import etree +from random import randint +from time import time # engine dependent config categories = ['general'] @@ -21,7 +23,7 @@ number_of_results = 5 # search-url, invalid HTTPS certificate base_url = 'http://gigablast.com/' -search_string = 'search?{query}&n={number_of_results}&s={offset}&xml=1&qh=0' +search_string = 'search?{query}&n={number_of_results}&s={offset}&xml=1&qh=0&uxid={uxid}&rand={rand}' # specific xpath variables results_xpath = '//response//result' @@ -37,7 +39,9 @@ def request(query, params): search_path = search_string.format( query=urlencode({'q': query}), offset=offset, - number_of_results=number_of_results) + number_of_results=number_of_results, + uxid=randint(10000, 10000000), + rand=int(time())) params['url'] = base_url + search_path diff --git a/searx/engines/google.py b/searx/engines/google.py @@ -9,11 +9,15 @@ # @parse url, title, content, suggestion import re +from cgi import escape from urllib import urlencode from urlparse import urlparse, parse_qsl -from lxml import html +from lxml import html, etree from searx.poolrequests import get from searx.engines.xpath import extract_text, extract_url +from searx.search import logger + +logger = logger.getChild('google engine') # engine dependent config @@ -167,7 +171,7 @@ def parse_url(url_string, google_hostname): def extract_text_from_dom(result, xpath): r = result.xpath(xpath) if len(r) > 0: - return extract_text(r[0]) + return escape(extract_text(r[0])) return None @@ -224,8 +228,8 @@ def response(resp): # parse results for result in dom.xpath(results_xpath): - title = extract_text(result.xpath(title_xpath)[0]) try: + title = extract_text(result.xpath(title_xpath)[0]) url = parse_url(extract_url(result.xpath(url_xpath), google_url), google_hostname) parsed_url = urlparse(url, google_hostname) @@ -268,12 +272,13 @@ def response(resp): 'content': content }) except: + logger.debug('result parse error in:\n%s', etree.tostring(result, pretty_print=True)) continue # parse suggestion for suggestion in dom.xpath(suggestion_xpath): # append suggestion - results.append({'suggestion': extract_text(suggestion)}) + results.append({'suggestion': escape(extract_text(suggestion))}) # return results return results diff --git a/searx/engines/piratebay.py b/searx/engines/piratebay.py @@ -20,7 +20,7 @@ categories = ['videos', 'music', 'files'] paging = True # search-url -url = 'https://thepiratebay.am/' +url = 'https://thepiratebay.se/' search_url = url + 'search/{search_term}/{pageno}/99/{search_type}' # piratebay specific type-definitions diff --git a/searx/engines/searchcode_code.py b/searx/engines/searchcode_code.py @@ -34,6 +34,11 @@ def request(query, params): params['url'] = search_url.format(query=urlencode({'q': query}), pageno=params['pageno']-1) + # Disable SSL verification + # error: (60) SSL certificate problem: unable to get local issuer + # certificate + params['verify'] = False + return params diff --git a/searx/engines/searchcode_doc.py b/searx/engines/searchcode_doc.py @@ -27,6 +27,11 @@ def request(query, params): params['url'] = search_url.format(query=urlencode({'q': query}), pageno=params['pageno']-1) + # Disable SSL verification + # error: (60) SSL certificate problem: unable to get local issuer + # certificate + params['verify'] = False + return params diff --git a/searx/engines/startpage.py b/searx/engines/startpage.py @@ -12,6 +12,8 @@ from lxml import html from cgi import escape +from dateutil import parser +from datetime import datetime, timedelta import re from searx.engines.xpath import extract_text @@ -66,20 +68,57 @@ def response(resp): url = link.attrib.get('href') # block google-ad url's - if re.match("^http(s|)://www.google.[a-z]+/aclk.*$", url): + if re.match("^http(s|)://(www\.)?google\.[a-z]+/aclk.*$", url): + continue + + # block startpage search url's + if re.match("^http(s|)://(www\.)?startpage\.com/do/search\?.*$", url): + continue + + # block ixquick search url's + if re.match("^http(s|)://(www\.)?ixquick\.com/do/search\?.*$", url): continue title = escape(extract_text(link)) - if result.xpath('./p[@class="desc"]'): - content = escape(extract_text(result.xpath('./p[@class="desc"]'))) + if result.xpath('./p[@class="desc clk"]'): + content = escape(extract_text(result.xpath('./p[@class="desc clk"]'))) else: content = '' - # append result - results.append({'url': url, - 'title': title, - 'content': content}) + published_date = None + + # check if search result starts with something like: "2 Sep 2014 ... " + if re.match("^([1-9]|[1-2][0-9]|3[0-1]) [A-Z][a-z]{2} [0-9]{4} \.\.\. ", content): + date_pos = content.find('...')+4 + date_string = content[0:date_pos-5] + published_date = parser.parse(date_string, dayfirst=True) + + # fix content string + content = content[date_pos:] + + # check if search result starts with something like: "5 days ago ... " + elif re.match("^[0-9]+ days? ago \.\.\. ", content): + date_pos = content.find('...')+4 + date_string = content[0:date_pos-5] + + # calculate datetime + published_date = datetime.now() - timedelta(days=int(re.match(r'\d+', date_string).group())) + + # fix content string + content = content[date_pos:] + + if published_date: + # append result + results.append({'url': url, + 'title': title, + 'content': content, + 'publishedDate': published_date}) + else: + # append result + results.append({'url': url, + 'title': title, + 'content': content}) # return results return results diff --git a/searx/engines/twitter.py b/searx/engines/twitter.py @@ -55,10 +55,14 @@ def response(resp): # parse results for tweet in dom.xpath(results_xpath): - link = tweet.xpath(link_xpath)[0] + try: + link = tweet.xpath(link_xpath)[0] + content = extract_text(tweet.xpath(content_xpath)[0]) + except Exception: + continue + url = urljoin(base_url, link.attrib.get('href')) title = extract_text(tweet.xpath(title_xpath)) - content = extract_text(tweet.xpath(content_xpath)[0]) pubdate = tweet.xpath(timestamp_xpath) if len(pubdate) > 0: diff --git a/searx/engines/wikidata.py b/searx/engines/wikidata.py @@ -1,8 +1,15 @@ import json -from urllib import urlencode + +from searx import logger from searx.poolrequests import get from searx.utils import format_date_by_locale +from datetime import datetime +from dateutil.parser import parse as dateutil_parse +from urllib import urlencode + + +logger = logger.getChild('wikidata') result_count = 1 wikidata_host = 'https://www.wikidata.org' wikidata_api = wikidata_host + '/w/api.php' @@ -164,14 +171,12 @@ def getDetail(jsonresponse, wikidata_id, language, locale): if postal_code is not None: attributes.append({'label': 'Postal code(s)', 'value': postal_code}) - date_of_birth = get_time(claims, 'P569', None) + date_of_birth = get_time(claims, 'P569', locale, None) if date_of_birth is not None: - date_of_birth = format_date_by_locale(date_of_birth[8:], locale) attributes.append({'label': 'Date of birth', 'value': date_of_birth}) - date_of_death = get_time(claims, 'P570', None) + date_of_death = get_time(claims, 'P570', locale, None) if date_of_death is not None: - date_of_death = format_date_by_locale(date_of_death[8:], locale) attributes.append({'label': 'Date of death', 'value': date_of_death}) if len(attributes) == 0 and len(urls) == 2 and len(description) == 0: @@ -229,7 +234,7 @@ def get_string(claims, propertyName, defaultValue=None): return result[0] -def get_time(claims, propertyName, defaultValue=None): +def get_time(claims, propertyName, locale, defaultValue=None): propValue = claims.get(propertyName, {}) if len(propValue) == 0: return defaultValue @@ -244,9 +249,22 @@ def get_time(claims, propertyName, defaultValue=None): result.append(value.get('time', '')) if len(result) == 0: - return defaultValue + date_string = defaultValue else: - return ', '.join(result) + date_string = ', '.join(result) + + try: + parsed_date = datetime.strptime(date_string, "+%Y-%m-%dT%H:%M:%SZ") + except: + if date_string.startswith('-'): + return date_string.split('T')[0] + try: + parsed_date = dateutil_parse(date_string, fuzzy=False, default=False) + except: + logger.debug('could not parse date %s', date_string) + return date_string.split('T')[0] + + return format_date_by_locale(parsed_date, locale) def get_geolink(claims, propertyName, defaultValue=''): diff --git a/searx/engines/yandex.py b/searx/engines/yandex.py @@ -0,0 +1,62 @@ +""" + Yahoo (Web) + + @website https://yandex.ru/ + @provide-api ? + @using-api no + @results HTML (using search portal) + @stable no (HTML can change) + @parse url, title, content +""" + +from urllib import urlencode +from lxml import html +from searx.search import logger + +logger = logger.getChild('yandex engine') + +# engine dependent config +categories = ['general'] +paging = True +language_support = True # TODO + +default_tld = 'com' +language_map = {'ru': 'ru', + 'ua': 'uk', + 'tr': 'com.tr'} + +# search-url +base_url = 'https://yandex.{tld}/' +search_url = 'search/?{query}&p={page}' + +results_xpath = '//div[@class="serp-item serp-item_plain_yes clearfix i-bem"]' +url_xpath = './/h2/a/@href' +title_xpath = './/h2/a//text()' +content_xpath = './/div[@class="serp-item__text"]//text()' + + +def request(query, params): + lang = params['language'].split('_')[0] + host = base_url.format(tld=language_map.get(lang) or default_tld) + params['url'] = host + search_url.format(page=params['pageno']-1, + query=urlencode({'text': query})) + return params + + +# get response from search-request +def response(resp): + dom = html.fromstring(resp.text) + results = [] + + for result in dom.xpath(results_xpath): + try: + res = {'url': result.xpath(url_xpath)[0], + 'title': ''.join(result.xpath(title_xpath)), + 'content': ''.join(result.xpath(content_xpath))} + except: + logger.exception('yandex parse crash') + continue + + results.append(res) + + return results diff --git a/searx/engines/youtube.py b/searx/engines/youtube.py @@ -1,93 +0,0 @@ -# Youtube (Videos) -# -# @website https://www.youtube.com/ -# @provide-api yes (http://gdata-samples-youtube-search-py.appspot.com/) -# -# @using-api yes -# @results JSON -# @stable yes -# @parse url, title, content, publishedDate, thumbnail, embedded - -from json import loads -from urllib import urlencode -from dateutil import parser - -# engine dependent config -categories = ['videos', 'music'] -paging = True -language_support = True - -# search-url -base_url = 'https://gdata.youtube.com/feeds/api/videos' -search_url = base_url + '?alt=json&{query}&start-index={index}&max-results=5' - -embedded_url = '<iframe width="540" height="304" ' +\ - 'data-src="//www.youtube-nocookie.com/embed/{videoid}" ' +\ - 'frameborder="0" allowfullscreen></iframe>' - - -# do search-request -def request(query, params): - index = (params['pageno'] - 1) * 5 + 1 - - params['url'] = search_url.format(query=urlencode({'q': query}), - index=index) - - # add language tag if specified - if params['language'] != 'all': - params['url'] += '&lr=' + params['language'].split('_')[0] - - return params - - -# get response from search-request -def response(resp): - results = [] - - search_results = loads(resp.text) - - # return empty array if there are no results - if 'feed' not in search_results: - return [] - - feed = search_results['feed'] - - # parse results - for result in feed['entry']: - url = [x['href'] for x in result['link'] if x['type'] == 'text/html'] - - if not url: - continue - - # remove tracking - url = url[0].replace('feature=youtube_gdata', '') - if url.endswith('&'): - url = url[:-1] - - videoid = url[32:] - - title = result['title']['$t'] - content = '' - thumbnail = '' - - pubdate = result['published']['$t'] - publishedDate = parser.parse(pubdate) - - if 'media$thumbnail' in result['media$group']: - thumbnail = result['media$group']['media$thumbnail'][0]['url'] - - content = result['content']['$t'] - - embedded = embedded_url.format(videoid=videoid) - - # append result - results.append({'url': url, - 'title': title, - 'content': content, - 'template': 'videos.html', - 'publishedDate': publishedDate, - 'embedded': embedded, - 'thumbnail': thumbnail}) - - # return results - return results diff --git a/searx/plugins/self_info.py b/searx/plugins/self_info.py @@ -35,10 +35,10 @@ def post_search(request, ctx): ip = x_forwarded_for[0] else: ip = request.remote_addr - ctx['search'].answers.clear() - ctx['search'].answers.add(ip) + ctx['search'].result_container.answers.clear() + ctx['search'].result_container.answers.add(ip) elif p.match(ctx['search'].query): ua = request.user_agent - ctx['search'].answers.clear() - ctx['search'].answers.add(ua) + ctx['search'].result_container.answers.clear() + ctx['search'].result_container.answers.add(ua) return True diff --git a/searx/poolrequests.py b/searx/poolrequests.py @@ -1,5 +1,7 @@ import requests + from itertools import cycle +from threading import RLock from searx import settings @@ -39,11 +41,11 @@ class HTTPAdapterWithConnParams(requests.adapters.HTTPAdapter): block=self._pool_block, **self._conn_params) -if settings.get('source_ips'): +if settings['outgoing'].get('source_ips'): http_adapters = cycle(HTTPAdapterWithConnParams(pool_connections=100, source_address=(source_ip, 0)) - for source_ip in settings['source_ips']) + for source_ip in settings['outgoing']['source_ips']) https_adapters = cycle(HTTPAdapterWithConnParams(pool_connections=100, source_address=(source_ip, 0)) - for source_ip in settings['source_ips']) + for source_ip in settings['outgoing']['source_ips']) else: http_adapters = cycle((HTTPAdapterWithConnParams(pool_connections=100), )) https_adapters = cycle((HTTPAdapterWithConnParams(pool_connections=100), )) @@ -55,9 +57,10 @@ class SessionSinglePool(requests.Session): super(SessionSinglePool, self).__init__() # reuse the same adapters - self.adapters.clear() - self.mount('https://', next(https_adapters)) - self.mount('http://', next(http_adapters)) + with RLock(): + self.adapters.clear() + self.mount('https://', next(https_adapters)) + self.mount('http://', next(http_adapters)) def close(self): """Call super, but clear adapters since there are managed globaly""" @@ -67,9 +70,8 @@ class SessionSinglePool(requests.Session): def request(method, url, **kwargs): """same as requests/requests/api.py request(...) except it use SessionSinglePool and force proxies""" - global settings session = SessionSinglePool() - kwargs['proxies'] = settings.get('outgoing_proxies', None) + kwargs['proxies'] = settings['outgoing'].get('proxies', None) response = session.request(method=method, url=url, **kwargs) session.close() return response diff --git a/searx/results.py b/searx/results.py @@ -0,0 +1,239 @@ +import re +from collections import defaultdict +from operator import itemgetter +from threading import RLock +from urlparse import urlparse, unquote +from searx.engines import engines + +CONTENT_LEN_IGNORED_CHARS_REGEX = re.compile('[,;:!?\./\\\\ ()-_]', re.M | re.U) +WHITESPACE_REGEX = re.compile('( |\t|\n)+', re.M | re.U) + + +# return the meaningful length of the content for a result +def result_content_len(content): + if isinstance(content, basestring): + return len(CONTENT_LEN_IGNORED_CHARS_REGEX.sub('', content)) + else: + return 0 + + +def compare_urls(url_a, url_b): + if url_a.netloc != url_b.netloc or url_a.query != url_b.query: + return False + + # remove / from the end of the url if required + path_a = url_a.path[:-1]\ + if url_a.path.endswith('/')\ + else url_a.path + path_b = url_b.path[:-1]\ + if url_b.path.endswith('/')\ + else url_b.path + + return unquote(path_a) == unquote(path_b) + + +def merge_two_infoboxes(infobox1, infobox2): + if 'urls' in infobox2: + urls1 = infobox1.get('urls', None) + if urls1 is None: + urls1 = [] + infobox1.set('urls', urls1) + + urlSet = set() + for url in infobox1.get('urls', []): + urlSet.add(url.get('url', None)) + + for url in infobox2.get('urls', []): + if url.get('url', None) not in urlSet: + urls1.append(url) + + if 'attributes' in infobox2: + attributes1 = infobox1.get('attributes', None) + if attributes1 is None: + attributes1 = [] + infobox1.set('attributes', attributes1) + + attributeSet = set() + for attribute in infobox1.get('attributes', []): + if attribute.get('label', None) not in attributeSet: + attributeSet.add(attribute.get('label', None)) + + for attribute in infobox2.get('attributes', []): + attributes1.append(attribute) + + if 'content' in infobox2: + content1 = infobox1.get('content', None) + content2 = infobox2.get('content', '') + if content1 is not None: + if result_content_len(content2) > result_content_len(content1): + infobox1['content'] = content2 + else: + infobox1.set('content', content2) + + +def result_score(result): + weight = 1.0 + + for result_engine in result['engines']: + if hasattr(engines[result_engine], 'weight'): + weight *= float(engines[result_engine].weight) + + occurences = len(result['positions']) + + return sum((occurences * weight) / position for position in result['positions']) + + +class ResultContainer(object): + """docstring for ResultContainer""" + def __init__(self): + super(ResultContainer, self).__init__() + self.results = defaultdict(list) + self._merged_results = [] + self.infoboxes = [] + self._infobox_ids = {} + self.suggestions = set() + self.answers = set() + + def extend(self, engine_name, results): + for result in list(results): + if 'suggestion' in result: + self.suggestions.add(result['suggestion']) + results.remove(result) + elif 'answer' in result: + self.answers.add(result['answer']) + results.remove(result) + elif 'infobox' in result: + self._merge_infobox(result) + results.remove(result) + + with RLock(): + engines[engine_name].stats['search_count'] += 1 + engines[engine_name].stats['result_count'] += len(results) + + if not results: + return + + self.results[engine_name].extend(results) + + for i, result in enumerate(results): + position = i + 1 + self._merge_result(result, position) + + def _merge_infobox(self, infobox): + add_infobox = True + infobox_id = infobox.get('id', None) + if infobox_id is not None: + existingIndex = self._infobox_ids.get(infobox_id, None) + if existingIndex is not None: + merge_two_infoboxes(self.infoboxes[existingIndex], infobox) + add_infobox = False + + if add_infobox: + self.infoboxes.append(infobox) + self._infobox_ids[infobox_id] = len(self.infoboxes) - 1 + + def _merge_result(self, result, position): + result['parsed_url'] = urlparse(result['url']) + + # if the result has no scheme, use http as default + if not result['parsed_url'].scheme: + result['parsed_url'] = result['parsed_url']._replace(scheme="http") + + result['host'] = result['parsed_url'].netloc + + if result['host'].startswith('www.'): + result['host'] = result['host'].replace('www.', '', 1) + + result['engines'] = [result['engine']] + + # strip multiple spaces and cariage returns from content + if result.get('content'): + result['content'] = WHITESPACE_REGEX.sub(' ', result['content']) + + # check for duplicates + duplicated = False + for merged_result in self._merged_results: + if compare_urls(result['parsed_url'], merged_result['parsed_url'])\ + and result.get('template') == merged_result.get('template'): + duplicated = merged_result + break + + # merge duplicates together + if duplicated: + # using content with more text + if result_content_len(result.get('content', '')) >\ + result_content_len(duplicated.get('content', '')): + duplicated['content'] = result['content'] + + # add the new position + duplicated['positions'].append(position) + + # add engine to list of result-engines + duplicated['engines'].append(result['engine']) + + # using https if possible + if duplicated['parsed_url'].scheme != 'https' and result['parsed_url'].scheme == 'https': + duplicated['url'] = result['parsed_url'].geturl() + duplicated['parsed_url'] = result['parsed_url'] + + # if there is no duplicate found, append result + else: + result['positions'] = [position] + with RLock(): + self._merged_results.append(result) + + def get_ordered_results(self): + for result in self._merged_results: + score = result_score(result) + result['score'] = score + with RLock(): + for result_engine in result['engines']: + engines[result_engine].stats['score_count'] += score + + results = sorted(self._merged_results, key=itemgetter('score'), reverse=True) + + # pass 2 : group results by category and template + gresults = [] + categoryPositions = {} + + for i, res in enumerate(results): + # FIXME : handle more than one category per engine + category = engines[res['engine']].categories[0] + ':' + ''\ + if 'template' not in res\ + else res['template'] + + current = None if category not in categoryPositions\ + else categoryPositions[category] + + # group with previous results using the same category + # if the group can accept more result and is not too far + # from the current position + if current is not None and (current['count'] > 0)\ + and (len(gresults) - current['index'] < 20): + # group with the previous results using + # the same category with this one + index = current['index'] + gresults.insert(index, res) + + # update every index after the current one + # (including the current one) + for k in categoryPositions: + v = categoryPositions[k]['index'] + if v >= index: + categoryPositions[k]['index'] = v + 1 + + # update this category + current['count'] -= 1 + + else: + # same category + gresults.append(res) + + # update categoryIndex + categoryPositions[category] = {'index': len(gresults), 'count': 8} + + # return gresults + return gresults + + def results_length(self): + return len(self._merged_results) diff --git a/searx/search.py b/searx/search.py @@ -16,19 +16,16 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >. ''' import threading -import re import searx.poolrequests as requests_lib -from itertools import izip_longest, chain -from operator import itemgetter -from Queue import Queue from time import time -from urlparse import urlparse, unquote +from searx import settings from searx.engines import ( categories, engines ) from searx.languages import language_codes from searx.utils import gen_useragent, get_blocked_engines from searx.query import Query +from searx.results import ResultContainer from searx import logger logger = logger.getChild('search') @@ -41,7 +38,8 @@ def search_request_wrapper(fn, url, engine_name, **kwargs): return fn(url, **kwargs) except: # increase errors stats - engines[engine_name].stats['errors'] += 1 + with threading.RLock(): + engines[engine_name].stats['errors'] += 1 # print engine name and specific error message logger.exception('engine crash: {0}'.format(engine_name)) @@ -83,7 +81,7 @@ def default_request_params(): # create a callback wrapper for the search engine results -def make_callback(engine_name, results_queue, callback, params): +def make_callback(engine_name, callback, params, result_container): # creating a callback wrapper for the search engine results def process_callback(response, **kwargs): @@ -95,12 +93,17 @@ def make_callback(engine_name, results_queue, callback, params): response.search_params = params - timeout_overhead = 0.2 # seconds search_duration = time() - params['started'] + # update stats with current page-load-time + with threading.RLock(): + engines[engine_name].stats['page_load_time'] += search_duration + + timeout_overhead = 0.2 # seconds timeout_limit = engines[engine_name].timeout + timeout_overhead + if search_duration > timeout_limit: - engines[engine_name].stats['page_load_time'] += timeout_limit - engines[engine_name].stats['errors'] += 1 + with threading.RLock(): + engines[engine_name].stats['errors'] += 1 return # callback @@ -110,207 +113,11 @@ def make_callback(engine_name, results_queue, callback, params): for result in search_results: result['engine'] = engine_name - results_queue.put_nowait((engine_name, search_results)) - - # update stats with current page-load-time - engines[engine_name].stats['page_load_time'] += search_duration + result_container.extend(engine_name, search_results) return process_callback -# return the meaningful length of the content for a result -def content_result_len(content): - if isinstance(content, basestring): - content = re.sub('[,;:!?\./\\\\ ()-_]', '', content) - return len(content) - else: - return 0 - - -# score results and remove duplications -def score_results(results): - # calculate scoring parameters - flat_res = filter( - None, chain.from_iterable(izip_longest(*results.values()))) - flat_len = len(flat_res) - engines_len = len(results) - - results = [] - - # pass 1: deduplication + scoring - for i, res in enumerate(flat_res): - - res['parsed_url'] = urlparse(res['url']) - - res['host'] = res['parsed_url'].netloc - - if res['host'].startswith('www.'): - res['host'] = res['host'].replace('www.', '', 1) - - res['engines'] = [res['engine']] - - weight = 1.0 - - # strip multiple spaces and cariage returns from content - if res.get('content'): - res['content'] = re.sub(' +', ' ', - res['content'].strip().replace('\n', '')) - - # get weight of this engine if possible - if hasattr(engines[res['engine']], 'weight'): - weight = float(engines[res['engine']].weight) - - # calculate score for that engine - score = int((flat_len - i) / engines_len) * weight + 1 - - # check for duplicates - duplicated = False - for new_res in results: - # remove / from the end of the url if required - p1 = res['parsed_url'].path[:-1]\ - if res['parsed_url'].path.endswith('/')\ - else res['parsed_url'].path - p2 = new_res['parsed_url'].path[:-1]\ - if new_res['parsed_url'].path.endswith('/')\ - else new_res['parsed_url'].path - - # check if that result is a duplicate - if res['host'] == new_res['host'] and\ - unquote(p1) == unquote(p2) and\ - res['parsed_url'].query == new_res['parsed_url'].query and\ - res.get('template') == new_res.get('template'): - duplicated = new_res - break - - # merge duplicates together - if duplicated: - # using content with more text - if content_result_len(res.get('content', '')) >\ - content_result_len(duplicated.get('content', '')): - duplicated['content'] = res['content'] - - # increase result-score - duplicated['score'] += score - - # add engine to list of result-engines - duplicated['engines'].append(res['engine']) - - # using https if possible - if duplicated['parsed_url'].scheme == 'https': - continue - elif res['parsed_url'].scheme == 'https': - duplicated['url'] = res['parsed_url'].geturl() - duplicated['parsed_url'] = res['parsed_url'] - - # if there is no duplicate found, append result - else: - res['score'] = score - results.append(res) - - results = sorted(results, key=itemgetter('score'), reverse=True) - - # pass 2 : group results by category and template - gresults = [] - categoryPositions = {} - - for i, res in enumerate(results): - # FIXME : handle more than one category per engine - category = engines[res['engine']].categories[0] + ':' + ''\ - if 'template' not in res\ - else res['template'] - - current = None if category not in categoryPositions\ - else categoryPositions[category] - - # group with previous results using the same category - # if the group can accept more result and is not too far - # from the current position - if current is not None and (current['count'] > 0)\ - and (len(gresults) - current['index'] < 20): - # group with the previous results using - # the same category with this one - index = current['index'] - gresults.insert(index, res) - - # update every index after the current one - # (including the current one) - for k in categoryPositions: - v = categoryPositions[k]['index'] - if v >= index: - categoryPositions[k]['index'] = v + 1 - - # update this category - current['count'] -= 1 - - else: - # same category - gresults.append(res) - - # update categoryIndex - categoryPositions[category] = {'index': len(gresults), 'count': 8} - - # return gresults - return gresults - - -def merge_two_infoboxes(infobox1, infobox2): - if 'urls' in infobox2: - urls1 = infobox1.get('urls', None) - if urls1 is None: - urls1 = [] - infobox1.set('urls', urls1) - - urlSet = set() - for url in infobox1.get('urls', []): - urlSet.add(url.get('url', None)) - - for url in infobox2.get('urls', []): - if url.get('url', None) not in urlSet: - urls1.append(url) - - if 'attributes' in infobox2: - attributes1 = infobox1.get('attributes', None) - if attributes1 is None: - attributes1 = [] - infobox1.set('attributes', attributes1) - - attributeSet = set() - for attribute in infobox1.get('attributes', []): - if attribute.get('label', None) not in attributeSet: - attributeSet.add(attribute.get('label', None)) - - for attribute in infobox2.get('attributes', []): - attributes1.append(attribute) - - if 'content' in infobox2: - content1 = infobox1.get('content', None) - content2 = infobox2.get('content', '') - if content1 is not None: - if content_result_len(content2) > content_result_len(content1): - infobox1['content'] = content2 - else: - infobox1.set('content', content2) - - -def merge_infoboxes(infoboxes): - results = [] - infoboxes_id = {} - for infobox in infoboxes: - add_infobox = True - infobox_id = infobox.get('id', None) - if infobox_id is not None: - existingIndex = infoboxes_id.get(infobox_id, None) - if existingIndex is not None: - merge_two_infoboxes(results[existingIndex], infobox) - add_infobox = False - - if add_infobox: - results.append(infobox) - infoboxes_id[infobox_id] = len(results) - 1 - - return results - - class Search(object): """Search information container""" @@ -328,10 +135,7 @@ class Search(object): # set blocked engines self.blocked_engines = get_blocked_engines(engines, request.cookies) - self.results = [] - self.suggestions = set() - self.answers = set() - self.infoboxes = [] + self.result_container = ResultContainer() self.request_data = {} # set specific language if set @@ -386,11 +190,11 @@ class Search(object): load_default_categories = True for pd_name, pd in self.request_data.items(): if pd_name == 'categories': - self.categories.extend(categ.strip() for categ in pd.split(',') if categ in categories) + self.categories.extend(categ for categ in map(unicode.strip, pd.split(',')) if categ in categories) elif pd_name == 'engines': pd_engines = [{'category': engines[engine].categories[0], 'name': engine} - for engine in map(str.strip, pd.split(',')) if engine in engines] + for engine in map(unicode.strip, pd.split(',')) if engine in engines] if pd_engines: self.engines.extend(pd_engines) load_default_categories = False @@ -409,6 +213,9 @@ class Search(object): self.categories.remove(category) if not load_default_categories: + if not self.categories: + self.categories = list(set(engine['category'] + for engine in self.engines)) return # if no category is specified for this search, @@ -440,8 +247,6 @@ class Search(object): # init vars requests = [] - results_queue = Queue() - results = {} # increase number of searches number_of_searches += 1 @@ -473,16 +278,16 @@ class Search(object): request_params['started'] = time() request_params['pageno'] = self.pageno - if hasattr(engine, 'language'): + if hasattr(engine, 'language') and engine.language: request_params['language'] = engine.language else: request_params['language'] = self.lang try: # 0 = None, 1 = Moderate, 2 = Strict - request_params['safesearch'] = int(request.cookies.get('safesearch', 1)) - except ValueError: - request_params['safesearch'] = 1 + request_params['safesearch'] = int(request.cookies.get('safesearch')) + except Exception: + request_params['safesearch'] = settings['search']['safe_search'] # update request parameters dependent on # search-engine (contained in engines folder) @@ -495,9 +300,9 @@ class Search(object): # create a callback wrapper for the search engine results callback = make_callback( selected_engine['name'], - results_queue, engine.response, - request_params) + request_params, + self.result_container) # create dictionary which contain all # informations about the request @@ -530,42 +335,5 @@ class Search(object): # send all search-request threaded_requests(requests) - while not results_queue.empty(): - engine_name, engine_results = results_queue.get_nowait() - - # TODO type checks - [self.suggestions.add(x['suggestion']) - for x in list(engine_results) - if 'suggestion' in x - and engine_results.remove(x) is None] - - [self.answers.add(x['answer']) - for x in list(engine_results) - if 'answer' in x - and engine_results.remove(x) is None] - - self.infoboxes.extend(x for x in list(engine_results) - if 'infobox' in x - and engine_results.remove(x) is None) - - results[engine_name] = engine_results - - # update engine-specific stats - for engine_name, engine_results in results.items(): - engines[engine_name].stats['search_count'] += 1 - engines[engine_name].stats['result_count'] += len(engine_results) - - # score results and remove duplications - self.results = score_results(results) - - # merge infoboxes according to their ids - self.infoboxes = merge_infoboxes(self.infoboxes) - - # update engine stats, using calculated score - for result in self.results: - for res_engine in result['engines']: - engines[result['engine']]\ - .stats['score_count'] += result['score'] - # return results, suggestions, answers and infoboxes return self diff --git a/searx/settings.yml b/searx/settings.yml @@ -1,27 +1,36 @@ +general: + debug : False # Debug mode, only for development + +search: + safe_search : 0 # Filter results. 0: None, 1: Moderate, 2: Strict + autocomplete : "" # Existing autocomplete backends: "dbpedia", "duckduckgo", "google", "startpage", "wikipedia" - leave blank to turn it off by default + server: port : 8888 + bind_address : "127.0.0.1" # address to listen on secret_key : "ultrasecretkey" # change this! - debug : False # Debug mode, only for development - request_timeout : 2.0 # seconds base_url : False # Set custom base_url. Possible values: False or "https://your.custom.host/location/" + image_proxy : False # Proxying image results through searx + +ui: themes_path : "" # Custom ui themes path - leave it blank if you didn't change default_theme : oscar # ui theme - useragent_suffix : "" # suffix of searx_useragent, could contain informations like an email address to the administrator - image_proxy : False # Proxying image results through searx default_locale : "" # Default interface locale - leave blank to detect from browser information or use codes from the 'locales' config section +outgoing: # communication with search engines + request_timeout : 2.0 # seconds + useragent_suffix : "" # suffix of searx_useragent, could contain informations like an email address to the administrator # uncomment below section if you want to use a proxy # see http://docs.python-requests.org/en/latest/user/advanced/#proxies # SOCKS proxies are not supported : see https://github.com/kennethreitz/requests/pull/478 -#outgoing_proxies : -# http : http://127.0.0.1:8080 -# https: http://127.0.0.1:8080 - +# proxies : +# http : http://127.0.0.1:8080 +# https: http://127.0.0.1:8080 # uncomment below section only if you have more than one network interface # which can be the source of outgoing search requests -#source_ips: -# - 1.1.1.1 -# - 1.1.1.2 +# source_ips: +# - 1.1.1.1 +# - 1.1.1.2 engines: - name : wikipedia @@ -265,6 +274,11 @@ engines: engine : yahoo shortcut : yh + - name : yandex + engine : yandex + shortcut : yn + disabled : True + - name : yahoo news engine : yahoo_news shortcut : yhn @@ -310,6 +324,7 @@ locales: nl : Nederlands ja : 日本語 (Japanese) tr : Türkçe - pt: Português + pt : Português ru : Russian ro : Romanian + zh : 中文 (Chinese) diff --git a/searx/settings_robot.yml b/searx/settings_robot.yml @@ -1,13 +1,25 @@ +general: + debug : False + +search: + safe_search : 0 + autocomplete : 0 + server: port : 11111 + bind_address : 127.0.0.1 secret_key : "ultrasecretkey" # change this! - debug : False - request_timeout : 3.0 # seconds - base_url: False + base_url : False + image_proxy : False + +ui: themes_path : "" default_theme : default - https_rewrite : True - image_proxy : False + default_locale : "" + +outgoing: + request_timeout : 1.0 # seconds + useragent_suffix : "" engines: - name : general_dummy diff --git a/searx/static/themes/oscar/css/oscar.min.css b/searx/static/themes/oscar/css/oscar.min.css @@ -1 +1,88 @@ -html{position:relative;min-height:100%}body{margin-bottom:80px}.footer{position:absolute;bottom:0;width:100%;height:60px}input[type=checkbox]:checked+.label_hide_if_checked,input[type=checkbox]:checked+.label_hide_if_not_checked+.label_hide_if_checked{display:none}input[type=checkbox]:not(:checked)+.label_hide_if_not_checked,input[type=checkbox]:not(:checked)+.label_hide_if_checked+.label_hide_if_not_checked{display:none}.result_header{margin-bottom:5px;margin-top:20px}.result_header .favicon{margin-bottom:-3px}.result_header a{vertical-align:bottom}.result_header a .highlight{font-weight:bold}.result-content{margin-top:5px;word-wrap:break-word}.result-content .highlight{font-weight:bold}.result-default{clear:both}.result-images{float:left !important}.img-thumbnail{margin:5px;max-height:128px;min-height:128px}.result-videos{clear:both}.result-torrents{clear:both}.result-map{clear:both}.result-code{clear:both}.suggestion_item{margin:2px 5px}.result_download{margin-right:5px}#pagination{margin-top:30px;padding-bottom:50px}.infobox .infobox_part{margin-bottom:20px;word-wrap:break-word}.infobox .infobox_part:last-child{margin-bottom:0}.search_categories{margin:10px 0;text-transform:capitalize}.cursor-text{cursor:text !important}.cursor-pointer{cursor:pointer !important}.highlight .hll{background-color:#ffc}.highlight{background:#f8f8f8}.highlight .c{color:#408080;font-style:italic}.highlight .err{border:1px solid #f00}.highlight .k{color:#008000;font-weight:bold}.highlight .o{color:#666}.highlight .cm{color:#408080;font-style:italic}.highlight .cp{color:#bc7a00}.highlight .c1{color:#408080;font-style:italic}.highlight .cs{color:#408080;font-style:italic}.highlight .gd{color:#a00000}.highlight .ge{font-style:italic}.highlight .gr{color:#f00}.highlight .gh{color:#000080;font-weight:bold}.highlight .gi{color:#00a000}.highlight .go{color:#888}.highlight .gp{color:#000080;font-weight:bold}.highlight .gs{font-weight:bold}.highlight .gu{color:#800080;font-weight:bold}.highlight .gt{color:#04d}.highlight .kc{color:#008000;font-weight:bold}.highlight .kd{color:#008000;font-weight:bold}.highlight .kn{color:#008000;font-weight:bold}.highlight .kp{color:#008000}.highlight .kr{color:#008000;font-weight:bold}.highlight .kt{color:#b00040}.highlight .m{color:#666}.highlight .s{color:#ba2121}.highlight .na{color:#7d9029}.highlight .nb{color:#008000}.highlight .nc{color:#00f;font-weight:bold}.highlight .no{color:#800}.highlight .nd{color:#a2f}.highlight .ni{color:#999;font-weight:bold}.highlight .ne{color:#d2413a;font-weight:bold}.highlight .nf{color:#00f}.highlight .nl{color:#a0a000}.highlight .nn{color:#00f;font-weight:bold}.highlight .nt{color:#008000;font-weight:bold}.highlight .nv{color:#19177c}.highlight .ow{color:#a2f;font-weight:bold}.highlight .w{color:#bbb}.highlight .mf{color:#666}.highlight .mh{color:#666}.highlight .mi{color:#666}.highlight .mo{color:#666}.highlight .sb{color:#ba2121}.highlight .sc{color:#ba2121}.highlight .sd{color:#ba2121;font-style:italic}.highlight .s2{color:#ba2121}.highlight .se{color:#b62;font-weight:bold}.highlight .sh{color:#ba2121}.highlight .si{color:#b68;font-weight:bold}.highlight .sx{color:#008000}.highlight .sr{color:#b68}.highlight .s1{color:#ba2121}.highlight .ss{color:#19177c}.highlight .bp{color:#008000}.highlight .vc{color:#19177c}.highlight .vg{color:#19177c}.highlight .vi{color:#19177c}.highlight .il{color:#666}.highlight .lineno{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.highlight .lineno::selection{background:transparent}.highlight .lineno::-moz-selection{background:transparent} -\ No newline at end of file +html{position:relative;min-height:100%} +body{margin-bottom:80px} +.footer{position:absolute;bottom:0;width:100%;height:60px} +input[type=checkbox]:checked+.label_hide_if_checked,input[type=checkbox]:checked+.label_hide_if_not_checked+.label_hide_if_checked{display:none} +input[type=checkbox]:not(:checked)+.label_hide_if_not_checked,input[type=checkbox]:not(:checked)+.label_hide_if_checked+.label_hide_if_not_checked{display:none} +.result_header{margin-bottom:5px;margin-top:20px}.result_header .favicon{margin-bottom:-3px} +.result_header a{vertical-align:bottom}.result_header a .highlight{font-weight:bold} +.result-content{margin-top:5px;word-wrap:break-word}.result-content .highlight{font-weight:bold} +.result-default{clear:both} +.result-images{float:left !important} +.img-thumbnail{margin:5px;max-height:128px;min-height:128px} +.result-videos{clear:both} +.result-torrents{clear:both} +.result-map{clear:both} +.result-code{clear:both} +.suggestion_item{margin:2px 5px} +.result_download{margin-right:5px} +#pagination{margin-top:30px;padding-bottom:50px} +.label-default{color:#aaa;background:#fff} +.infobox .infobox_part{margin-bottom:20px;word-wrap:break-word} +.infobox .infobox_part:last-child{margin-bottom:0} +.search_categories{margin:10px 0;text-transform:capitalize} +.cursor-text{cursor:text !important} +.cursor-pointer{cursor:pointer !important} +.highlight .hll{background-color:#ffc} +.highlight{background:#f8f8f8} +.highlight .c{color:#408080;font-style:italic} +.highlight .err{border:1px solid #f00} +.highlight .k{color:#008000;font-weight:bold} +.highlight .o{color:#666} +.highlight .cm{color:#408080;font-style:italic} +.highlight .cp{color:#bc7a00} +.highlight .c1{color:#408080;font-style:italic} +.highlight .cs{color:#408080;font-style:italic} +.highlight .gd{color:#a00000} +.highlight .ge{font-style:italic} +.highlight .gr{color:#f00} +.highlight .gh{color:#000080;font-weight:bold} +.highlight .gi{color:#00a000} +.highlight .go{color:#888} +.highlight .gp{color:#000080;font-weight:bold} +.highlight .gs{font-weight:bold} +.highlight .gu{color:#800080;font-weight:bold} +.highlight .gt{color:#04d} +.highlight .kc{color:#008000;font-weight:bold} +.highlight .kd{color:#008000;font-weight:bold} +.highlight .kn{color:#008000;font-weight:bold} +.highlight .kp{color:#008000} +.highlight .kr{color:#008000;font-weight:bold} +.highlight .kt{color:#b00040} +.highlight .m{color:#666} +.highlight .s{color:#ba2121} +.highlight .na{color:#7d9029} +.highlight .nb{color:#008000} +.highlight .nc{color:#00f;font-weight:bold} +.highlight .no{color:#800} +.highlight .nd{color:#a2f} +.highlight .ni{color:#999;font-weight:bold} +.highlight .ne{color:#d2413a;font-weight:bold} +.highlight .nf{color:#00f} +.highlight .nl{color:#a0a000} +.highlight .nn{color:#00f;font-weight:bold} +.highlight .nt{color:#008000;font-weight:bold} +.highlight .nv{color:#19177c} +.highlight .ow{color:#a2f;font-weight:bold} +.highlight .w{color:#bbb} +.highlight .mf{color:#666} +.highlight .mh{color:#666} +.highlight .mi{color:#666} +.highlight .mo{color:#666} +.highlight .sb{color:#ba2121} +.highlight .sc{color:#ba2121} +.highlight .sd{color:#ba2121;font-style:italic} +.highlight .s2{color:#ba2121} +.highlight .se{color:#b62;font-weight:bold} +.highlight .sh{color:#ba2121} +.highlight .si{color:#b68;font-weight:bold} +.highlight .sx{color:#008000} +.highlight .sr{color:#b68} +.highlight .s1{color:#ba2121} +.highlight .ss{color:#19177c} +.highlight .bp{color:#008000} +.highlight .vc{color:#19177c} +.highlight .vg{color:#19177c} +.highlight .vi{color:#19177c} +.highlight .il{color:#666} +.highlight .lineno{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:default}.highlight .lineno::selection{background:transparent;} +.highlight .lineno::-moz-selection{background:transparent;} diff --git a/searx/static/themes/oscar/less/oscar/results.less b/searx/static/themes/oscar/less/oscar/results.less @@ -76,3 +76,8 @@ margin-top: 30px; padding-bottom: 50px; } + +.label-default { + color: #AAA; + background: #FFF; +} diff --git a/searx/templates/courgette/opensearch.xml b/searx/templates/courgette/opensearch.xml @@ -3,6 +3,7 @@ <ShortName>searx</ShortName> <Description>Search searx</Description> <InputEncoding>UTF-8</InputEncoding> + <Image>{{ host }}{{ url_for('static', filename='img/favicon.png') | replace("/", "", 1) }}</Image> <LongName>searx metasearch</LongName> {% if opensearch_method == 'get' %} <Url type="text/html" method="get" template="{{ host }}search?q={searchTerms}"/> diff --git a/searx/templates/default/opensearch.xml b/searx/templates/default/opensearch.xml @@ -3,6 +3,7 @@ <ShortName>searx</ShortName> <Description>Search searx</Description> <InputEncoding>UTF-8</InputEncoding> + <Image>{{ host }}{{ url_for('static', filename='img/favicon.png') | replace("/", "", 1) }}</Image> <LongName>searx metasearch</LongName> {% if opensearch_method == 'get' %} <Url type="text/html" method="get" template="{{ host }}search?q={searchTerms}"/> diff --git a/searx/templates/oscar/macros.html b/searx/templates/oscar/macros.html @@ -25,7 +25,11 @@ <!-- Draw result footer --> {% macro result_footer(result) -%} <div class="clearfix"></div> - <span class="label label-default pull-right">{{ result.engine }}</span> + <div class="pull-right"> + {% for engine in result.engines %} + <span class="label label-default">{{ engine }}</span> + {% endfor %} +</div> <p class="text-muted">{{ result.pretty_url }}</p> {%- endmacro %} diff --git a/searx/templates/oscar/opensearch.xml b/searx/templates/oscar/opensearch.xml @@ -3,6 +3,7 @@ <ShortName>searx</ShortName> <Description>Search searx</Description> <InputEncoding>UTF-8</InputEncoding> + <Image>{{ host }}{{ url_for('static', filename='img/favicon.png') | replace("/", "", 1) }}</Image> <LongName>searx metasearch</LongName> {% if opensearch_method == 'get' %} <Url type="text/html" method="get" template="{{ host }}search?q={searchTerms}"/> diff --git a/searx/templates/pix-art/preferences.html b/searx/templates/pix-art/preferences.html @@ -53,8 +53,8 @@ <th>{{ _('Engine name') }}</th> <th>{{ _('Allow') }} / {{ _('Block') }}</th> </tr> - {% for (categ,search_engines) in categs %} - {% for search_engine in search_engines %} + {% for categ in all_categories %} + {% for search_engine in engines_by_category[categ] %} {% if not search_engine.private %} <tr> diff --git a/searx/tests/engines/test_bing.py b/searx/tests/engines/test_bing.py @@ -29,10 +29,10 @@ class TestBingEngine(SearxTestCase): self.assertRaises(AttributeError, bing.response, '') self.assertRaises(AttributeError, bing.response, '[]') - response = mock.Mock(content='<html></html>') + response = mock.Mock(text='<html></html>') self.assertEqual(bing.response(response), []) - response = mock.Mock(content='<html></html>') + response = mock.Mock(text='<html></html>') self.assertEqual(bing.response(response), []) html = """ @@ -54,7 +54,7 @@ class TestBingEngine(SearxTestCase): </div> </div> """ - response = mock.Mock(content=html) + response = mock.Mock(text=html) results = bing.response(response) self.assertEqual(type(results), list) self.assertEqual(len(results), 1) @@ -81,7 +81,7 @@ class TestBingEngine(SearxTestCase): </div> </li> """ - response = mock.Mock(content=html) + response = mock.Mock(text=html) results = bing.response(response) self.assertEqual(type(results), list) self.assertEqual(len(results), 1) diff --git a/searx/tests/engines/test_bing_images.py b/searx/tests/engines/test_bing_images.py @@ -31,10 +31,10 @@ class TestBingImagesEngine(SearxTestCase): self.assertRaises(AttributeError, bing_images.response, '') self.assertRaises(AttributeError, bing_images.response, '[]') - response = mock.Mock(content='<html></html>') + response = mock.Mock(text='<html></html>') self.assertEqual(bing_images.response(response), []) - response = mock.Mock(content='<html></html>') + response = mock.Mock(text='<html></html>') self.assertEqual(bing_images.response(response), []) html = """ @@ -52,7 +52,7 @@ oh:&quot;238&quot;,tft:&quot;0&quot;,oi:&quot;http://www.image.url/Images/Test%2 </div> """ html = html.replace('\r\n', '').replace('\n', '').replace('\r', '') - response = mock.Mock(content=html) + response = mock.Mock(text=html) results = bing_images.response(response) self.assertEqual(type(results), list) self.assertEqual(len(results), 1) @@ -75,7 +75,7 @@ oh:&quot;238&quot;,tft:&quot;0&quot;,oi:&quot;http://www.image.url/Images/Test%2 style="height:144px;" width="178" height="144"/> </a> """ - response = mock.Mock(content=html) + response = mock.Mock(text=html) results = bing_images.response(response) self.assertEqual(type(results), list) self.assertEqual(len(results), 0) @@ -263,7 +263,7 @@ oh:&quot;238&quot;,tft:&quot;0&quot;,oi:&quot;http://www.image.url/Images/Test%2 </div> """ html = html.replace('\r\n', '').replace('\n', '').replace('\r', '') - response = mock.Mock(content=html) + response = mock.Mock(text=html) results = bing_images.response(response) self.assertEqual(type(results), list) self.assertEqual(len(results), 10) diff --git a/searx/tests/engines/test_duckduckgo.py b/searx/tests/engines/test_duckduckgo.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- from collections import defaultdict import mock from searx.engines import duckduckgo @@ -30,7 +31,7 @@ class TestDuckduckgoEngine(SearxTestCase): response = mock.Mock(text='<html></html>') self.assertEqual(duckduckgo.response(response), []) - html = """ + html = u""" <div class="results_links results_links_deep web-result"> <div class="icon_fav" style="display: block;"> <a rel="nofollow" href="https://www.test.com/"> @@ -39,7 +40,7 @@ class TestDuckduckgoEngine(SearxTestCase): </a> </div> <div class="links_main links_deep"> <!-- This is the visible part --> - <a rel="nofollow" class="large" href="http://this.should.be.the.link/"> + <a rel="nofollow" class="large" href="http://this.should.be.the.link/ű"> This <b>is</b> <b>the</b> title </a> <div class="snippet"><b>This</b> should be the content.</div> @@ -54,7 +55,7 @@ class TestDuckduckgoEngine(SearxTestCase): self.assertEqual(type(results), list) self.assertEqual(len(results), 1) self.assertEqual(results[0]['title'], 'This is the title') - self.assertEqual(results[0]['url'], 'http://this.should.be.the.link/') + self.assertEqual(results[0]['url'], u'http://this.should.be.the.link/ű') self.assertEqual(results[0]['content'], 'This should be the content.') html = """ diff --git a/searx/tests/engines/test_piratebay.py b/searx/tests/engines/test_piratebay.py @@ -15,7 +15,7 @@ class TestPiratebayEngine(SearxTestCase): params = piratebay.request(query, dicto) self.assertIn('url', params) self.assertIn(query, params['url']) - self.assertIn('piratebay.am', params['url']) + self.assertIn('piratebay.se', params['url']) self.assertIn('0', params['url']) dicto['category'] = 'music' @@ -99,7 +99,7 @@ class TestPiratebayEngine(SearxTestCase): self.assertEqual(type(results), list) self.assertEqual(len(results), 2) self.assertEqual(results[0]['title'], 'This is the title') - self.assertEqual(results[0]['url'], 'https://thepiratebay.am/this.is.the.link') + self.assertEqual(results[0]['url'], 'https://thepiratebay.se/this.is.the.link') self.assertEqual(results[0]['content'], 'This is the content and should be OK') self.assertEqual(results[0]['seed'], 13) self.assertEqual(results[0]['leech'], 334) @@ -149,7 +149,7 @@ class TestPiratebayEngine(SearxTestCase): self.assertEqual(type(results), list) self.assertEqual(len(results), 1) self.assertEqual(results[0]['title'], 'This is the title') - self.assertEqual(results[0]['url'], 'https://thepiratebay.am/this.is.the.link') + self.assertEqual(results[0]['url'], 'https://thepiratebay.se/this.is.the.link') self.assertEqual(results[0]['content'], 'This is the content and should be OK') self.assertEqual(results[0]['seed'], 0) self.assertEqual(results[0]['leech'], 0) diff --git a/searx/tests/engines/test_startpage.py b/searx/tests/engines/test_startpage.py @@ -42,7 +42,7 @@ class TestStartpageEngine(SearxTestCase): </a> <span id='title_stars_2' name='title_stars_2'> </span> </h3> - <p class='desc'> + <p class='desc clk'> This should be the content. </p> <p> @@ -78,7 +78,7 @@ class TestStartpageEngine(SearxTestCase): </a> <span id='title_stars_2' name='title_stars_2'> </span> </h3> - <p class='desc'> + <p class='desc clk'> This should be the content. </p> <p> @@ -101,7 +101,7 @@ class TestStartpageEngine(SearxTestCase): <h3> <span id='title_stars_2' name='title_stars_2'> </span> </h3> - <p class='desc'> + <p class='desc clk'> This should be the content. </p> <p> diff --git a/searx/tests/engines/test_youtube.py b/searx/tests/engines/test_youtube.py @@ -1,204 +0,0 @@ -from collections import defaultdict -import mock -from searx.engines import youtube -from searx.testing import SearxTestCase - - -class TestYoutubeEngine(SearxTestCase): - - def test_request(self): - query = 'test_query' - dicto = defaultdict(dict) - dicto['pageno'] = 0 - dicto['language'] = 'fr_FR' - params = youtube.request(query, dicto) - self.assertTrue('url' in params) - self.assertTrue(query in params['url']) - self.assertTrue('youtube.com' in params['url']) - self.assertTrue('fr' in params['url']) - - dicto['language'] = 'all' - params = youtube.request(query, dicto) - self.assertFalse('fr' in params['url']) - - def test_response(self): - self.assertRaises(AttributeError, youtube.response, None) - self.assertRaises(AttributeError, youtube.response, []) - self.assertRaises(AttributeError, youtube.response, '') - self.assertRaises(AttributeError, youtube.response, '[]') - - response = mock.Mock(text='{}') - self.assertEqual(youtube.response(response), []) - - response = mock.Mock(text='{"data": []}') - self.assertEqual(youtube.response(response), []) - - json = """ - {"feed":{"entry":[{ - "id":{"$t":"http://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM"}, - "published":{"$t":"2015-01-23T21:25:00.000Z"}, - "updated":{"$t":"2015-01-26T14:38:15.000Z"}, - "title":{"$t":"Title", - "type":"text"},"content":{"$t":"Description","type":"text"}, - "link":[{"rel":"alternate","type":"text/html", - "href":"https://www.youtube.com/watch?v=DIVZCPfAOeM&feature=youtube_gdata"}, - {"rel":"http://gdata.youtube.com/schemas/2007#video.related", - "type":"application/atom+xml", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM/related"}, - {"rel":"http://gdata.youtube.com/schemas/2007#mobile","type":"text/html", - "href":"https://m.youtube.com/details?v=DIVZCPfAOeM"}, - {"rel":"self","type":"application/atom+xml", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM"}], - "author":[{"name":{"$t":"Cauet"}, - "uri":{"$t":"https://gdata.youtube.com/feeds/api/users/cauetofficiel"} }], - "gd$comments":{"gd$feedLink":{"rel":"http://gdata.youtube.com/schemas/2007#comments", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM/comments", - "countHint":8} }, - "media$group":{"media$category":[{"$t":"Comedy","label":"Comedy", - "scheme":"http://gdata.youtube.com/schemas/2007/categories.cat"}], - "media$content":[{"url":"https://www.youtube.com/v/DIVZCPfAOeM?version=3&f=videos&app=youtube_gdata", - "type":"application/x-shockwave-flash","medium":"video", - "isDefault":"true","expression":"full","duration":354,"yt$format":5}, - {"url":"rtsp://r1---sn-cg07luel.c.youtube.com/CiILENy73wIaGQnjOcD3CFmFDBMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", - "type":"video/3gpp","medium":"video","expression":"full","duration":354, - "yt$format":1}, - {"url":"rtsp://r1---sn-cg07luel.c.youtube.com/CiILENy73wIaGQnjOcD3CFmFDBMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", - "type":"video/3gpp","medium":"video","expression":"full","duration":354,"yt$format":6}], - "media$description":{"$t":"Desc","type":"plain"}, - "media$keywords":{}, - "media$player":[{"url":"https://www.youtube.com/watch?v=DIVZCPfAOeM&feature=youtube_gdata_player"}], - "media$thumbnail":[{"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/0.jpg", - "height":360,"width":480,"time":"00:02:57"}, - {"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/1.jpg","height":90,"width":120,"time":"00:01:28.500"}, - {"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/2.jpg","height":90,"width":120,"time":"00:02:57"}, - {"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/3.jpg","height":90,"width":120,"time":"00:04:25.500"}], - "media$title":{"$t":"Title","type":"plain"}, - "yt$duration":{"seconds":"354"} }, - "gd$rating":{"average":4.932159,"max":5,"min":1,"numRaters":1533, - "rel":"http://schemas.google.com/g/2005#overall"}, - "yt$statistics":{"favoriteCount":"0","viewCount":"92464"} } - ] - } - } - """ - response = mock.Mock(text=json) - results = youtube.response(response) - self.assertEqual(type(results), list) - self.assertEqual(len(results), 1) - self.assertEqual(results[0]['title'], 'Title') - self.assertEqual(results[0]['url'], 'https://www.youtube.com/watch?v=DIVZCPfAOeM') - self.assertEqual(results[0]['content'], 'Description') - self.assertEqual(results[0]['thumbnail'], 'https://i.ytimg.com/vi/DIVZCPfAOeM/0.jpg') - self.assertTrue('DIVZCPfAOeM' in results[0]['embedded']) - - json = """ - {"feed":{"entry":[{ - "id":{"$t":"http://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM"}, - "published":{"$t":"2015-01-23T21:25:00.000Z"}, - "updated":{"$t":"2015-01-26T14:38:15.000Z"}, - "title":{"$t":"Title", - "type":"text"},"content":{"$t":"Description","type":"text"}, - "link":[{"rel":"http://gdata.youtube.com/schemas/2007#video.related", - "type":"application/atom+xml", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM/related"}, - {"rel":"self","type":"application/atom+xml", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM"}], - "author":[{"name":{"$t":"Cauet"}, - "uri":{"$t":"https://gdata.youtube.com/feeds/api/users/cauetofficiel"} }], - "gd$comments":{"gd$feedLink":{"rel":"http://gdata.youtube.com/schemas/2007#comments", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM/comments", - "countHint":8} }, - "media$group":{"media$category":[{"$t":"Comedy","label":"Comedy", - "scheme":"http://gdata.youtube.com/schemas/2007/categories.cat"}], - "media$content":[{"url":"https://www.youtube.com/v/DIVZCPfAOeM?version=3&f=videos&app=youtube_gdata", - "type":"application/x-shockwave-flash","medium":"video", - "isDefault":"true","expression":"full","duration":354,"yt$format":5}, - {"url":"rtsp://r1---sn-cg07luel.c.youtube.com/CiILENy73wIaGQnjOcD3CFmFDBMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", - "type":"video/3gpp","medium":"video","expression":"full","duration":354, - "yt$format":1}, - {"url":"rtsp://r1---sn-cg07luel.c.youtube.com/CiILENy73wIaGQnjOcD3CFmFDBMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", - "type":"video/3gpp","medium":"video","expression":"full","duration":354,"yt$format":6}], - "media$description":{"$t":"Desc","type":"plain"}, - "media$keywords":{}, - "media$player":[{"url":"https://www.youtube.com/watch?v=DIVZCPfAOeM&feature=youtube_gdata_player"}], - "media$thumbnail":[{"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/0.jpg", - "height":360,"width":480,"time":"00:02:57"}, - {"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/1.jpg","height":90,"width":120,"time":"00:01:28.500"}, - {"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/2.jpg","height":90,"width":120,"time":"00:02:57"}, - {"url":"https://i.ytimg.com/vi/DIVZCPfAOeM/3.jpg","height":90,"width":120,"time":"00:04:25.500"}], - "media$title":{"$t":"Title","type":"plain"}, - "yt$duration":{"seconds":"354"} }, - "gd$rating":{"average":4.932159,"max":5,"min":1,"numRaters":1533, - "rel":"http://schemas.google.com/g/2005#overall"}, - "yt$statistics":{"favoriteCount":"0","viewCount":"92464"} } - ] - } - } - """ - response = mock.Mock(text=json) - results = youtube.response(response) - self.assertEqual(type(results), list) - self.assertEqual(len(results), 0) - - json = """ - {"feed":{"entry":[{ - "id":{"$t":"http://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM"}, - "published":{"$t":"2015-01-23T21:25:00.000Z"}, - "updated":{"$t":"2015-01-26T14:38:15.000Z"}, - "title":{"$t":"Title", - "type":"text"},"content":{"$t":"Description","type":"text"}, - "link":[{"rel":"alternate","type":"text/html", - "href":"https://www.youtube.com/watch?v=DIVZCPfAOeM"}, - {"rel":"http://gdata.youtube.com/schemas/2007#video.related", - "type":"application/atom+xml", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM/related"}, - {"rel":"http://gdata.youtube.com/schemas/2007#mobile","type":"text/html", - "href":"https://m.youtube.com/details?v=DIVZCPfAOeM"}, - {"rel":"self","type":"application/atom+xml", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM"}], - "author":[{"name":{"$t":"Cauet"}, - "uri":{"$t":"https://gdata.youtube.com/feeds/api/users/cauetofficiel"} }], - "gd$comments":{"gd$feedLink":{"rel":"http://gdata.youtube.com/schemas/2007#comments", - "href":"https://gdata.youtube.com/feeds/api/videos/DIVZCPfAOeM/comments", - "countHint":8} }, - "media$group":{"media$category":[{"$t":"Comedy","label":"Comedy", - "scheme":"http://gdata.youtube.com/schemas/2007/categories.cat"}], - "media$content":[{"url":"https://www.youtube.com/v/DIVZCPfAOeM?version=3&f=videos&app=youtube_gdata", - "type":"application/x-shockwave-flash","medium":"video", - "isDefault":"true","expression":"full","duration":354,"yt$format":5}, - {"url":"rtsp://r1---sn-cg07luel.c.youtube.com/CiILENy73wIaGQnjOcD3CFmFDBMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", - "type":"video/3gpp","medium":"video","expression":"full","duration":354, - "yt$format":1}, - {"url":"rtsp://r1---sn-cg07luel.c.youtube.com/CiILENy73wIaGQnjOcD3CFmFDBMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp", - "type":"video/3gpp","medium":"video","expression":"full","duration":354,"yt$format":6}], - "media$description":{"$t":"Desc","type":"plain"}, - "media$keywords":{}, - "media$player":[{"url":"https://www.youtube.com/watch?v=DIVZCPfAOeM&feature=youtube_gdata_player"}], - "media$title":{"$t":"Title","type":"plain"}, - "yt$duration":{"seconds":"354"} }, - "gd$rating":{"average":4.932159,"max":5,"min":1,"numRaters":1533, - "rel":"http://schemas.google.com/g/2005#overall"}, - "yt$statistics":{"favoriteCount":"0","viewCount":"92464"} } - ] - } - } - """ - response = mock.Mock(text=json) - results = youtube.response(response) - self.assertEqual(type(results), list) - self.assertEqual(len(results), 1) - self.assertEqual(results[0]['title'], 'Title') - self.assertEqual(results[0]['url'], 'https://www.youtube.com/watch?v=DIVZCPfAOeM') - self.assertEqual(results[0]['content'], 'Description') - self.assertEqual(results[0]['thumbnail'], '') - self.assertTrue('DIVZCPfAOeM' in results[0]['embedded']) - - json = """ - {"toto":{"entry":[] - } - } - """ - response = mock.Mock(text=json) - results = youtube.response(response) - self.assertEqual(type(results), list) - self.assertEqual(len(results), 0) diff --git a/searx/tests/test_engines.py b/searx/tests/test_engines.py @@ -40,7 +40,6 @@ from searx.tests.engines.test_www1x import * # noqa from searx.tests.engines.test_www500px import * # noqa from searx.tests.engines.test_yacy import * # noqa from searx.tests.engines.test_yahoo import * # noqa -from searx.tests.engines.test_youtube import * # noqa from searx.tests.engines.test_youtube_api import * # noqa from searx.tests.engines.test_youtube_noapi import * # noqa from searx.tests.engines.test_yahoo_news import * # noqa diff --git a/searx/tests/test_plugins.py b/searx/tests/test_plugins.py @@ -5,6 +5,12 @@ from searx import plugins from mock import Mock +def get_search_mock(query, **kwargs): + return {'search': Mock(query=query, + result_container=Mock(answers=set()), + **kwargs)} + + class PluginStoreTest(SearxTestCase): def test_PluginStore_init(self): @@ -46,23 +52,23 @@ class SelfIPTest(SearxTestCase): request = Mock(user_plugins=store.plugins, remote_addr='127.0.0.1') request.headers.getlist.return_value = [] - ctx = {'search': Mock(answers=set(), - query='ip')} + ctx = get_search_mock(query='ip') store.call('post_search', request, ctx) - self.assertTrue('127.0.0.1' in ctx['search'].answers) + self.assertTrue('127.0.0.1' in ctx['search'].result_container.answers) # User agent test request = Mock(user_plugins=store.plugins, user_agent='Mock') request.headers.getlist.return_value = [] - ctx = {'search': Mock(answers=set(), - query='user-agent')} + + ctx = get_search_mock(query='user-agent') store.call('post_search', request, ctx) - self.assertTrue('Mock' in ctx['search'].answers) - ctx = {'search': Mock(answers=set(), - query='user agent')} + self.assertTrue('Mock' in ctx['search'].result_container.answers) + + ctx = get_search_mock(query='user-agent') store.call('post_search', request, ctx) - self.assertTrue('Mock' in ctx['search'].answers) - ctx = {'search': Mock(answers=set(), - query='What is my User-Agent?')} + self.assertTrue('Mock' in ctx['search'].result_container.answers) + + ctx = get_search_mock(query='What is my User-Agent?') store.call('post_search', request, ctx) + self.assertTrue('Mock' in ctx['search'].result_container.answers) diff --git a/searx/tests/test_results.py b/searx/tests/test_results.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +from searx.results import ResultContainer +from searx.testing import SearxTestCase + + +def fake_result(url='https://aa.bb/cc?dd=ee#ff', + title='aaa', + content='bbb', + engine='wikipedia', **kwargs): + result = {'url': url, + 'title': title, + 'content': content, + 'engine': engine} + result.update(kwargs) + return result + + +# TODO +class ResultContainerTestCase(SearxTestCase): + + def test_empty(self): + c = ResultContainer() + self.assertEqual(c.get_ordered_results(), []) + + def test_one_result(self): + c = ResultContainer() + c.extend('wikipedia', [fake_result()]) + self.assertEqual(c.results_length(), 1) + + def test_one_suggestion(self): + c = ResultContainer() + c.extend('wikipedia', [fake_result(suggestion=True)]) + self.assertEqual(len(c.suggestions), 1) + self.assertEqual(c.results_length(), 0) + + def test_result_merge(self): + c = ResultContainer() + c.extend('wikipedia', [fake_result()]) + c.extend('wikidata', [fake_result(), fake_result(url='https://example.com/')]) + self.assertEqual(c.results_length(), 2) diff --git a/searx/tests/test_search.py b/searx/tests/test_search.py @@ -1,25 +1,10 @@ # -*- coding: utf-8 -*- -from searx.search import score_results from searx.testing import SearxTestCase -def fake_result(url='https://aa.bb/cc?dd=ee#ff', - title='aaa', - content='bbb', - engine='wikipedia'): - return {'url': url, - 'title': title, - 'content': content, - 'engine': engine} +# TODO +class SearchTestCase(SearxTestCase): - -class ScoreResultsTestCase(SearxTestCase): - - def test_empty(self): - self.assertEqual(score_results(dict()), []) - - def test_urlparse(self): - results = score_results(dict(a=[fake_result(url='https://aa.bb/cc?dd=ee#ff')])) - parsed_url = results[0]['parsed_url'] - self.assertEqual(parsed_url.query, 'dd=ee') + def test_(self): + pass diff --git a/searx/tests/test_utils.py b/searx/tests/test_utils.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import mock from searx.testing import SearxTestCase from searx import utils @@ -51,6 +52,15 @@ class TestUtils(SearxTestCase): self.assertIsNotNone(utils.html_to_text(html)) self.assertEqual(utils.html_to_text(html), "Test text") + def test_prettify_url(self): + data = (('https://searx.me/', 'https://searx.me/'), + (u'https://searx.me/ű', u'https://searx.me/ű'), + ('https://searx.me/' + (100 * 'a'), 'https://searx.me/[...]aaaaaaaaaaaaaaaaa'), + (u'https://searx.me/' + (100 * u'ű'), u'https://searx.me/[...]űűűűűűűűűűűűűűűűű')) + + for test_url, expected in data: + self.assertEqual(utils.prettify_url(test_url, max_length=32), expected) + class TestHTMLTextExtractor(SearxTestCase): diff --git a/searx/tests/test_webapp.py b/searx/tests/test_webapp.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import json +from mock import Mock from urlparse import ParseResult from searx import webapp from searx.testing import SearxTestCase @@ -33,7 +34,12 @@ class ViewsTestCase(SearxTestCase): ] def search_mock(search_self, *args): - search_self.results = self.test_results + search_self.result_container = Mock(get_ordered_results=lambda: self.test_results, + answers=set(), + suggestions=set(), + infoboxes=[], + results=self.test_results, + results_length=lambda: len(self.test_results)) webapp.Search.search = search_mock diff --git a/searx/translations/de/LC_MESSAGES/messages.mo b/searx/translations/de/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/de/LC_MESSAGES/messages.po b/searx/translations/de/LC_MESSAGES/messages.po @@ -14,10 +14,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-26 19:24+0000\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 10:00+0000\n" "Last-Translator: pointhi\n" -"Language-Team: German (http://www.transifex.com/projects/p/searx/language/de/)\n" +"Language-Team: German (http://www.transifex.com/asciimoo/searx/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,67 +25,67 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "Dateien" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "Allgemein" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "Musik" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "Soziale Medien" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "Bilder" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "Videos" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "IT" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "Neuigkeiten" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "Karte" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "vor {minutes} Minute(n)" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "vor {hours} Stunde(n), {minutes} Minute(n)" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Ladezeit (sek)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Trefferanzahl" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Punkte" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Punkte pro Treffer" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Fehler" @@ -100,12 +100,22 @@ msgstr "Starte Suche wenn Kategorie angeklickt wird" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "Startet eine Suche sofort, wenn eine Kategorie angeklickt wird. Deaktiviere dieses Plugin um mehrere Kategorien anzuwählen." +"multiple categories. (JavaScript required)" +msgstr "Starte die Suche sofort wenn eine Kategorie ausgewählt wird. Es ist nicht mehr möglich mehrere Kategorien auszuwählen. (JavaScript benötigt)" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "Zeigt deine IP-Adresse an wenn die Suchanfrage \"ip\" lautet" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "Zeigt deine IP-Adresse wenn die Suche \"ip\" lautet, und deinen User-Agent wenn deine Suche \"user agent\" beinhaltet." + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "Tracker-URL entferner" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "Entferne Tracker Argumente von den URLs" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -133,90 +143,92 @@ msgstr "Einstellungen" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Standardkategorien" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Suchsprache" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automatisch" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Oberflächensprache" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Autovervollständigung" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Bilder Proxy" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Aktiviert" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Deaktiviert" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Methode" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "Sichere Suche (SafeSearch)" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Streng" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Moderat" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Keine" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Designs" @@ -257,6 +269,8 @@ msgstr "Aktuell benutzte Suchmaschinen" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Suchmaschinenname" @@ -271,6 +285,8 @@ msgstr "Kategorie" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -288,7 +304,7 @@ msgstr "Blockieren" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -297,7 +313,7 @@ msgstr "Diese Informationen werden in Cookies auf Ihrem Rechner gespeichert, dam #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -306,20 +322,20 @@ msgstr "Diese Cookies dienen einzig Ihrem Komfort. Wir verwenden sie nicht, um S #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "Speichern" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "Zurücksetzen" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "Zurück" @@ -429,51 +445,89 @@ msgid "Toggle navigation" msgstr "Navigation umschalten" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "Allgemein" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Suchmaschinen" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Erweiterungen" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "Cookies" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "welche Sprache bevorzugst du für die Suche?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "ändere die Sprache des Layouts" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "zeige Vorschläge während der Eingabe an" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "tunnel Bilder durch searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "ändere wie Formulare übertragen werden, <a href=\"https://de.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP-Anfragemethoden\" rel=\"external\">lerne mehr über Anfragemethoden</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Inhalte filtern" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "ändere das Aussehen von searx" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "Abkürzung" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "mittlere Zeit" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "max. Zeit" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "Diese Liste zeigt alle Daten welche searx auf deinem Computer speichert." + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "Mit dieser Liste können Sie die Transparenz von searx bewerten" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "Cookie Name" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "Wert" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Suchergebnisse" @@ -523,6 +577,14 @@ msgstr "Warnung!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Bitte aktiviere JavaScript, um alle Funktionen dieser Seite zu nutzen. " +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "Information!" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "derzeit sind keine Cookies gesetzt." + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "Es sind derzeit keine Daten vorhanden." diff --git a/searx/translations/en/LC_MESSAGES/messages.mo b/searx/translations/en/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/es/LC_MESSAGES/messages.mo b/searx/translations/es/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/es/LC_MESSAGES/messages.po b/searx/translations/es/LC_MESSAGES/messages.po @@ -3,16 +3,18 @@ # This file is distributed under the same license as the PROJECT project. # # Translators: +# Adam Tauber <asciimoo@gmail.com>, 2015 # Alejandro León Aznar, 2014 # Alejandro León Aznar, 2014-2015 +# Oscar Carrero <holaoscar@protonmail.ch>, 2015 msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-27 23:48+0000\n" -"Last-Translator: Alejandro León Aznar\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/searx/language/es/)\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-09-05 20:46+0000\n" +"Last-Translator: Oscar Carrero <holaoscar@protonmail.ch>\n" +"Language-Team: Spanish (http://www.transifex.com/asciimoo/searx/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,67 +22,67 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "Archivos" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "General" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "Música" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "Medios sociales" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "Imágenes" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "Vídeos" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "TIC" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "noticias" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "mapa" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "hace {minutes} minuto(s)" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "hace {hours} hora(s) y {minutes} minuto(s)" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Tiempo de carga (segundos)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Número de resultados" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Puntuaciones" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Puntuaciones por resultado" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Errores" @@ -95,12 +97,22 @@ msgstr "Buscar en la categoría seleccionada" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "Realizar la búsqueda inmediatamente si se ha seleccionado una categoría. Desactivar la selección simultánea de varias categorías." +"multiple categories. (JavaScript required)" +msgstr "Realizar una búsqueda inmediatamente si se ha seleccionado una categoría. Desactivar para seleccionar varias categorías. (Se requiere JavaScript)" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "Mostrar tu dirección IP si el término de búsqueda es «ip»" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "Muestra tu dirección IP si la consulta es \"ip\" y tu Agente de Usuario si la consulta contiene \"agente de usuario\"." + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "Eliminador de URL rastreadora" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "Eliminar los argumentos de los rastreadores en la URL devuelta" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -128,90 +140,92 @@ msgstr "Preferencias" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Categorías predeterminadas" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Buscar idioma" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automático" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Idioma de la interfaz" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Autocompletar" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Imagen proxy" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Activado" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Desactivado" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Método" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "Búsqueda segura" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Riguroso" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Moderado" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Ninguno" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Temas" @@ -252,6 +266,8 @@ msgstr "Motores de búsqueda actualmente en uso" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Nombre del motor de búsqueda" @@ -266,6 +282,8 @@ msgstr "Categoría" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -283,7 +301,7 @@ msgstr "Bloquear" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -292,7 +310,7 @@ msgstr "Esta configuración se guarda en sus cookies, lo que nos permite no alma #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -301,20 +319,20 @@ msgstr "Estas cookies son para su propia comodidad, no las utilizamos para rastr #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "Guardar" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "Restablecer configuración por defecto" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "Atrás" @@ -323,7 +341,7 @@ msgstr "Atrás" #: searx/templates/default/results.html:13 #: searx/templates/oscar/results.html:110 msgid "Search URL" -msgstr "Buscar URL" +msgstr "URL de la búsqueda" #: searx/templates/courgette/results.html:16 #: searx/templates/default/results.html:17 @@ -413,7 +431,7 @@ msgstr "Creado por" #: searx/templates/oscar/base.html:78 msgid "a privacy-respecting, hackable metasearch engine" -msgstr "un metabuscador hackeable que respeta la privacidad" +msgstr "un metabuscador hackable que respeta la privacidad" #: searx/templates/oscar/navbar.html:9 searx/templates/oscar/navbar.html:33 msgid "home" @@ -424,51 +442,89 @@ msgid "Toggle navigation" msgstr "Cambiar navegación" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "General" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Motores" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Plugins" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "Cookies" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "¿Qué idioma prefieres para la búsqueda?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Cambiar idioma de la interfaz" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Buscar mientras escribes" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Filtrando resultados de imágenes en searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Modifica cómo se envian los formularios <a href=\"http://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol#M.C3.A9todos_de_petici.C3.B3n\" rel=\"external\">más información sobre métodos de peticiones</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Filtro de contenido" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "Cambiar aspecto de searx" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "Atajo" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "Tiempo promedio" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "Tiempo máximo" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "Esta es la lista de cookies y sus valores que searx está almacenando en tu ordenador." + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "Con esa lista puedes valorar la transparencia de searx." + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "Nombre de la cookie" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "Valor" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Buscar" @@ -516,7 +572,15 @@ msgstr "¡Cuidado!" #: searx/templates/oscar/messages/js_disabled.html:3 msgid "Please enable JavaScript to use full functionality of this site." -msgstr "Por favor, activa JavaScript para poder usar esta página al 100%." +msgstr "Por favor, activa JavaScript para poder usar esta página al 100%%." + +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "¡Información!" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "No existen cookies definidas actualmente." #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " diff --git a/searx/translations/fr/LC_MESSAGES/messages.mo b/searx/translations/fr/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/fr/LC_MESSAGES/messages.po b/searx/translations/fr/LC_MESSAGES/messages.po @@ -13,10 +13,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-05-14 00:01+0000\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 15:35+0000\n" "Last-Translator: Cqoicebordel <david.barouh@wanadoo.fr>\n" -"Language-Team: French (http://www.transifex.com/projects/p/searx/language/fr/)\n" +"Language-Team: French (http://www.transifex.com/asciimoo/searx/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -24,67 +24,67 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "fichiers" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "général" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "musique" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "réseaux sociaux" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "images" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "vidéos" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "informatique" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "actus" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "carte" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "il y a {minutes} minute(s)" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "il y a {hours} heure(s), {minutes} minute(s)" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Chargement de la page (sec)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Nombre de résultats" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Score" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Score par résultat" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Erreurs" @@ -99,12 +99,22 @@ msgstr "Lancer la recherche lors du choix d'une catégorie" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "Exécute la recherche immédiatement si une catégorie est sélectionnée. Désactiver pour sélectionner plusieurs catégories." +"multiple categories. (JavaScript required)" +msgstr "Exécute la recherche immédiatement si une catégorie est sélectionnée. Désactiver pour sélectionner plusieurs catégories (nécessite JavaScript)." -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "Afficher votre adresse IP si la requête contient \"ip\"." +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "Affiche votre adresse IP si la requête est \"ip\", et affiche votre user-agent si la requete contient \"user agent\"." + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "Nettoyeur d'URL de suivis" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "Retire les arguments utilisés pour vous pister des URL retournées" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -132,90 +142,92 @@ msgstr "Préférences" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Catégories par défaut" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Langue de recherche" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automatique" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Langue de l'interface" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Complétion automatique" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Proxy d'images" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Activé" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Désactivé" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Méthode" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "Recherche sécurisée" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Stricte" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Moyen" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Pas du tout" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Thème" @@ -256,6 +268,8 @@ msgstr "Moteurs de recherche actuellement utilisés" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Nom du moteur" @@ -270,6 +284,8 @@ msgstr "Catégorie" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -287,7 +303,7 @@ msgstr "Bloquer" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -296,7 +312,7 @@ msgstr "Ces paramètres sont stockés dans vos cookies ; ceci nous permet de ne #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -305,20 +321,20 @@ msgstr "Ces cookies existent pour votre confort d'utilisation, nous ne les utili #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "enregistrer" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "Remettre les valeurs par défaut" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "retour" @@ -428,51 +444,89 @@ msgid "Toggle navigation" msgstr "Afficher/Masquer la navigation" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "Général" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Moteurs" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Plugins" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "Cookies" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "Dans quelle langue préférez-vous effectuer la recherche ?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Changer la langue d'affichage" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Chercher au fil de la saisie" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Proxifier les images de résultats à travers searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Permet de choisir comment la recherche est envoyée, <a href=\"https://fr.wikipedia.org/wiki/Hypertext_Transfer_Protocol#M.C3.A9thodes\" rel=\"external\">en savoir plus sur les méthodes HTTP</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Filtrer le contenu" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "Modifier l'affichage de searx" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "Raccourcis" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "Temps moy." + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "Temps max" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "C'est une liste de cookies et de leurs valeurs que searx enregistre sur votre ordinateur." + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "Avec cette liste, vous pouvez juger de la transparence de searx." + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "Nom du cookie" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "Valeur" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Résultats de recherche" @@ -522,6 +576,14 @@ msgstr "Attention !" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Merci d'activer JavaScript pour utiliser toutes les fonctionnalités de ce site." +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "Information !" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "il n'y a pas de cookies définit pour le moment." + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "Aucune donnée disponible pour l'instant. " diff --git a/searx/translations/he/LC_MESSAGES/messages.mo b/searx/translations/he/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/he/LC_MESSAGES/messages.po b/searx/translations/he/LC_MESSAGES/messages.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-27 06:42+0000\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 11:19+0000\n" "Last-Translator: GenghisKhan <genghiskhan@gmx.ca>\n" -"Language-Team: Hebrew (http://www.transifex.com/projects/p/searx/language/he/)\n" +"Language-Team: Hebrew (http://www.transifex.com/asciimoo/searx/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -23,67 +23,67 @@ msgstr "" "Language: he\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "קבצים" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "כללי" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "מוזיקה" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "מדיה חברתית" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "תמונות" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "סרטונים" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "IT" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "חדשות" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "מפה" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "לפני {minutes} דקות" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "לפני {hours} שעות, {minutes} דקות" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "עומס עמוד (שניות)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "מספר תוצאות" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "דירוג" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "דירוג לכל תוצאה" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "שגיאות" @@ -98,12 +98,22 @@ msgstr "חפש בעת בחירת קטגוריה" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "בצע חיפוש מיד לאחר שקטגוריה נבחרת. נטרל כדי לבחור מספר קטגוריות." +"multiple categories. (JavaScript required)" +msgstr "בצע חיפוש לאלתר כאשר קטגוריה נבחרת. נטרל כדי לבחור קטגוריות מרובות. (מצריך JavaScript)" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "הצג מקור כתובת IP כאשר מילת שאילתא היא \"ip\"" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "מציגה כתובת IP המשוייכת לך אם השאילתא היא \"ip\" וגם סוכן משתמש אם שאילתא מכילה \"user agent\"." + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "מסיר URL גשש" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "הסר ארגומנטים מאתרים מתוך URL מוחזר" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -131,90 +141,92 @@ msgstr "העדפות" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "קטגוריות ברירת מחדל" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "שפת חיפוש" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "אוטומטי" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "שפת ממשק" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "השלמה אוטומטית" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "proxy תמונה" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "מאופשר" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "מנוטרל" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "שיטה" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "חיפוש בטוח" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "מחמיר" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "מתון" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "בלי" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "מוטיבים" @@ -251,10 +263,12 @@ msgstr "אדום" #: searx/templates/default/preferences.html:84 #: searx/templates/pix-art/preferences.html:49 msgid "Currently used search engines" -msgstr "מנועי חיפוש שבשימוש עתה" +msgstr "מנועי חיפוש בשימוש עתה" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "שם מנוע" @@ -269,6 +283,8 @@ msgstr "קטגוריה" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -286,7 +302,7 @@ msgstr "חסום" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -295,7 +311,7 @@ msgstr "הגדרות אלו מאוחסנות בתוך העוגיות שלך, א #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -304,20 +320,20 @@ msgstr "עוגיות אלו משרתות את נוחותך הבלעדית, אנ #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "שמור" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "אפס ברירות מחדל" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "חזור" @@ -412,7 +428,7 @@ msgstr "מוטמן" #: searx/templates/oscar/base.html:78 msgid "Powered by" -msgstr "ממונע באמצעות" +msgstr "מופעל באמצעות" #: searx/templates/oscar/base.html:78 msgid "a privacy-respecting, hackable metasearch engine" @@ -427,51 +443,89 @@ msgid "Toggle navigation" msgstr "Toggle ניווט" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "כללי" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "מנועים" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "תוספים" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "עוגיות" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "איזו שפה אתם מעדיפים לצורך חיפוש?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "שינוי שפת הממשק" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "מציאת דברים בזמן הקלדה" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Proxying תוצאות תמונה מבעד searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "שינוי האופן בו טפסים נשלחים, <a href=\"http://he.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">למדו עוד אודות שיטות בקשה (request methods)</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "סנן תוכן" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "שינוי ממשק searx" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "קיצור דרך" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "זמן ממוצע" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "זמן מירבי" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "זוהי רשימה של עוגיות וערכיהן אשר searx מאחסנת על המחשב שלך." + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "בעזרת רשימה זו, באפשרותך לגשת אל searx transparency." + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "שם עוגייה" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "ערך" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "תוצאות חיפוש" @@ -521,6 +575,14 @@ msgstr "אזהרה!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "אנא אפשרו JavaScript כדי לנצל תפקודיות מלאה של אתר זה." +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "מידע!" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "ברגע זה, אין עוגיות מוגדרות." + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "אין כעת מידע זמין. " diff --git a/searx/translations/hu/LC_MESSAGES/messages.mo b/searx/translations/hu/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/hu/LC_MESSAGES/messages.po b/searx/translations/hu/LC_MESSAGES/messages.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-26 17:13+0000\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-25 16:29+0000\n" "Last-Translator: Adam Tauber <asciimoo@gmail.com>\n" -"Language-Team: Hungarian (http://www.transifex.com/projects/p/searx/language/hu/)\n" +"Language-Team: Hungarian (http://www.transifex.com/asciimoo/searx/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,67 +20,67 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "fájlok" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "általános" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "zene" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "közösségi média" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "képek" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "videók" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "it" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "hírek" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "térkép" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "{minutes} perce" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} óra, {minutes} perce" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Válaszidők (sec)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Találatok száma" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Pontszámok" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Pontszámok találatonként" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Hibák" @@ -95,12 +95,22 @@ msgstr "Azonnal keresés kategória választással" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "Keresés megkezdése kategória kiválasztáskor. Több kategória kiválasztásához deaktiválás szükséges" +"multiple categories. (JavaScript required)" +msgstr "Keresés megkezdése kategória kiválasztáskor. Több kategória kiválasztásához deaktiválás szükséges. (Javascript szükséges)" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "Saját IP cím megjelenítése az \"ip\" kulcsszóra keresve" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "Saját IP cím, user agent megjelenítés az \"ip\", \"user agent\" szavakra keresve." + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "Tracker URL eltávolítás" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "Felhasználó követéshez használt találati URL paraméterek eltávolítása" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -128,90 +138,92 @@ msgstr "Beállítások" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Alapértelmezett kategóriák" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Keresés nyelve" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automatikus" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Felület nyelve" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Automatikus kiegészítés" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Kép proxy" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Engedélyez" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Inaktivál" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Method" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "Felnőtt tartalom szűrés" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Erős" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Enyhe" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Nincs" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Megjelenés" @@ -252,6 +264,8 @@ msgstr "Jelenleg használt keresők" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Kereső neve" @@ -266,6 +280,8 @@ msgstr "Kategória" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -283,7 +299,7 @@ msgstr "Tiltás" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -292,7 +308,7 @@ msgstr "Ezek a beállítások csak a böngésző cookie-jaiban tárolódnak." #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -301,20 +317,20 @@ msgstr "Ezek a cookie-k csak kényelmi funkciókat látnak el, nem használjuk a #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "mentés" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "Alapbeállítások visszaállítása" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "vissza" @@ -424,51 +440,89 @@ msgid "Toggle navigation" msgstr "Navigáció megjelenítés" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "Általános" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Kereső motorok" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Pluginek" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "Sütik" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "Preferált keresési nyelv" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Felület nyelve" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Autómatikus kereső kifejezés kiegészítés" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Kép találatok betöltése searx-ön keresztül" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Keresés metódusa (<a href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">bővebben</a>)" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Tartalom szűrés" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "Megjelenés" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "Rövidítés" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "Átlag idő" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "Maximális idő" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "Searx által használt sütik listája." + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "Ez a lista a kereső transzparenciáját hivatott megmutatni." + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "Süti név" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "Érték" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Keresési eredmények" @@ -518,6 +572,14 @@ msgstr "Figyelem!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Engedélyezze a javascript-et a teljes funkcionalitás használathoz" +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "Figyelem!" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "jelenleg nincs süti definiálva" + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "Nincs megjeleníthető adat." diff --git a/searx/translations/it/LC_MESSAGES/messages.mo b/searx/translations/it/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/it/LC_MESSAGES/messages.po b/searx/translations/it/LC_MESSAGES/messages.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-26 17:02+0000\n" -"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n" -"Language-Team: Italian (http://www.transifex.com/projects/p/searx/language/it/)\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 09:45+0000\n" +"Last-Translator: pointhi\n" +"Language-Team: Italian (http://www.transifex.com/asciimoo/searx/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,67 +20,67 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "documenti" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "generale" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "musica" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "social media" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "immagini" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "video" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "it" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "notizie" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "mappe" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "di {minutes} minuti fa" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "di {ore} h e {minutes} minuti fa" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr " Caricamento della pagina (secondi)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Risultati ottenuti" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Punteggio" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Punteggio per risultato" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Errori" @@ -95,11 +95,21 @@ msgstr "" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." +"multiple categories. (JavaScript required)" msgstr "" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "" + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" msgstr "" #: searx/templates/courgette/index.html:9 @@ -128,90 +138,92 @@ msgstr "Preferenze" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Categorie predefinite" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Lingua di ricerca" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automatico" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Linguaggio dell'interfaccia" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Completamento automatico" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Metodo" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Grafica" @@ -252,6 +264,8 @@ msgstr "Motori di ricerca attualmente in uso" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Nome del motore" @@ -266,6 +280,8 @@ msgstr "Categoria" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -283,7 +299,7 @@ msgstr "Blocca" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -292,7 +308,7 @@ msgstr "Queste impostazioni sono salvate nei tuoi cookie, consentendoci di non c #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -301,20 +317,20 @@ msgstr "I cookie sono funzionali ad un servizio migliore. Non usiamo i cookie pe #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "salva" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "indietro" @@ -424,51 +440,89 @@ msgid "Toggle navigation" msgstr "" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "" + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "" @@ -518,6 +572,14 @@ msgstr "" msgid "Please enable JavaScript to use full functionality of this site." msgstr "" +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "" + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "" diff --git a/searx/translations/ja/LC_MESSAGES/messages.mo b/searx/translations/ja/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/ja/LC_MESSAGES/messages.po b/searx/translations/ja/LC_MESSAGES/messages.po @@ -12,10 +12,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-26 17:02+0000\n" -"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/searx/language/ja/)\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-09-03 07:37+0000\n" +"Last-Translator: pointhi\n" +"Language-Team: Japanese (http://www.transifex.com/asciimoo/searx/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -23,67 +23,67 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "ファイル" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "一般的な" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "音楽" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "社会的ネットワーク" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "画像" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "動画" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "情報技術" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "お知らせ" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "地図" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "{minutes}分前" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours}時間と{minutes}分前" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "通知の数" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "エラー" @@ -98,11 +98,21 @@ msgstr "" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." +"multiple categories. (JavaScript required)" msgstr "" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "" + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" msgstr "" #: searx/templates/courgette/index.html:9 @@ -131,93 +141,95 @@ msgstr "設定" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "検索の言語" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "界面の言語" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" -msgstr "" +msgstr "活性化する" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" -msgstr "" +msgstr "使用不可能にする" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "安全な検索" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "たくさん。" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "少し" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "なし" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" -msgstr "" +msgstr "図様" #: searx/templates/courgette/preferences.html:83 msgid "Color" @@ -255,6 +267,8 @@ msgstr "" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "" @@ -269,6 +283,8 @@ msgstr "カテゴリー" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -282,11 +298,11 @@ msgstr "許可する" #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:65 msgid "Block" -msgstr "" +msgstr "封鎖する" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -295,7 +311,7 @@ msgstr "" #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -304,20 +320,20 @@ msgstr "" #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "保存" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "バック" @@ -427,51 +443,89 @@ msgid "Toggle navigation" msgstr "" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "レイアウトのsearxの変更" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "" + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "検索結果" @@ -515,12 +569,20 @@ msgstr "" #: searx/templates/oscar/messages/js_disabled.html:2 msgid "Warning!" -msgstr "" +msgstr "意見" #: searx/templates/oscar/messages/js_disabled.html:3 msgid "Please enable JavaScript to use full functionality of this site." msgstr "" +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "異見" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "" + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "" @@ -537,7 +599,7 @@ msgstr "" #: searx/templates/oscar/messages/save_settings_successfull.html:7 msgid "Well done!" -msgstr "" +msgstr "あっぱれ。" #: searx/templates/oscar/messages/save_settings_successfull.html:8 msgid "Settings saved successfully." @@ -545,7 +607,7 @@ msgstr "" #: searx/templates/oscar/messages/unknow_error.html:7 msgid "Oh snap!" -msgstr "" +msgstr "ちぇっ" #: searx/templates/oscar/messages/unknow_error.html:8 msgid "Something went wrong." @@ -585,7 +647,7 @@ msgstr "" #: searx/templates/oscar/result_templates/torrent.html:7 msgid "Filesize" -msgstr "" +msgstr "ファイル・サイズ" #: searx/templates/oscar/result_templates/torrent.html:9 msgid "Bytes" @@ -609,7 +671,7 @@ msgstr "" #: searx/templates/oscar/result_templates/torrent.html:15 msgid "Number of Files" -msgstr "" +msgstr "ファイル数" #: searx/templates/oscar/result_templates/videos.html:7 msgid "show video" diff --git a/searx/translations/nl/LC_MESSAGES/messages.mo b/searx/translations/nl/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/nl/LC_MESSAGES/messages.po b/searx/translations/nl/LC_MESSAGES/messages.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-27 07:45+0000\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 14:41+0000\n" "Last-Translator: Nathan Follens\n" -"Language-Team: Dutch (http://www.transifex.com/projects/p/searx/language/nl/)\n" +"Language-Team: Dutch (http://www.transifex.com/asciimoo/searx/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,67 +20,67 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "bestanden" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "algemeen" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "muziek" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "social media" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "afbeeldingen" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "video's" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "it" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "nieuws" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "kaart" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "{minutes} min geleden" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} uur, {minutes} min geleden" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Pagina laadt (sec)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Aantal zoekresultaten" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Scores" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Scores per zoekresultaat" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Fouten" @@ -95,12 +95,22 @@ msgstr "Zoeken bij selecteren van categorie" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "Zoekopdracht onmiddellijk uitvoeren wanneer een categorie geselecteerd wordt. Zet dit uit om meerdere categorieën te selecteren." +"multiple categories. (JavaScript required)" +msgstr "Zoekopdracht onmiddellijk uitvoeren wanneer een categorie geselecteerd wordt. Zet dit uit om meerdere categorieën te selecteren. (JavaScript vereist)" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "Geef je IP-adres weer wanneer de zoekopdracht \"ip\" is" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "Geeft je IP-adres weer als de zoekopdracht \"ip\" is en je gebruikersagent als de zoekopdracht \"user agent\" bevat." + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "Tracker-URL verwijderaar" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "Verwijdert trackerargumenten van de gekregen URL" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -128,90 +138,92 @@ msgstr "Voorkeuren" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Standaardcategorieën" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Zoektaal" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automatisch" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Interfacetaal" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Auto-aanvullen" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Afbeeldingen proxy" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Ingeschakeld" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Uitgeschakeld" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Methode" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "SafeSearch" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Strikt" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Gemiddeld" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Geen" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Thema's" @@ -252,6 +264,8 @@ msgstr "Momenteel gebruikte zoekmachines" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Naam zoekmachine" @@ -266,6 +280,8 @@ msgstr "Categorie" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -283,7 +299,7 @@ msgstr "Blokkeren" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -292,7 +308,7 @@ msgstr "Deze instellingen worden bewaard in je cookies. Hierdoor hoeven wij niet #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -301,20 +317,20 @@ msgstr "Deze cookies zijn alleen voor je eigen gemak, we gebruiken deze cookies #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "bewaren" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "Standaardinstellingen herstellen" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "terug" @@ -424,51 +440,89 @@ msgid "Toggle navigation" msgstr "Omschakelen navigatie" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "Algemeen" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Zoekmachines" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Plugins" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "Cookies" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "Welke taal wil je gebruiken voor het zoeken?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Wijzig de taal van de layout" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Zoek tijdens het typen" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Proxyen afbeeldingen resultaat via searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Bepaal hoe de formulieren worden ingestuurd, <a href=\"http://nl.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP-requests\" rel=\"external\">lees meer over request methodes</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Filteren content" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "Wijzig searx layout" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "Snelkoppeling" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "Gem. duur" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "Max. duur" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "Dit is de lijst van cookies en hun waarden die searx op je computer opslaat." + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "Met deze lijst kan je de openheid van searx beoordelen." + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "Cookienaam" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "Waarde" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Zoekresultaten" @@ -518,6 +572,14 @@ msgstr "Waarschuwing!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Activeer JavaScript om alle functionaliteit van deze site te gebruiken." +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "Informatie!" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "er zijn momenteel geen cookies gedefinieerd." + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "Er zijn momenteel geen gegevens beschikbaar." diff --git a/searx/translations/pt/LC_MESSAGES/messages.mo b/searx/translations/pt/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/ro/LC_MESSAGES/messages.mo b/searx/translations/ro/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/ro/LC_MESSAGES/messages.po b/searx/translations/ro/LC_MESSAGES/messages.po @@ -8,10 +8,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-05-02 22:23+0000\n" -"Last-Translator: adrian.fita <adrian.fita@gmail.com>\n" -"Language-Team: Romanian (http://www.transifex.com/projects/p/searx/language/ro/)\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 09:45+0000\n" +"Last-Translator: pointhi\n" +"Language-Team: Romanian (http://www.transifex.com/asciimoo/searx/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -19,67 +19,67 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "fișiere" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "general" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "muzică" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "rețele sociale" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "imagini" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "videouri" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "el(ea)" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "știri" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "hartă" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "{minutes} minut(e) în urmă" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} oră(e), {minutes} minut(e) în urmă" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Încărcarea paginilor (sec)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Numărul de rezultate" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Scoruri" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Scoruri per rezultat" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Erori" @@ -94,12 +94,22 @@ msgstr "Căutare în categoria selectată" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." -msgstr "Realizează căutarea imediat dacă s-a selectat o categorie. Dezactivați pentru a selecta mai multe categorii." +"multiple categories. (JavaScript required)" +msgstr "" + +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" -msgstr "Afișează adresa voastră IP sursă dacă expresia interogării este „ip”" +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "" #: searx/templates/courgette/index.html:9 #: searx/templates/courgette/index.html:13 @@ -127,90 +137,92 @@ msgstr "Preferințe" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Categorii implicite" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Limba de căutare" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Automat" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Limba interfeței" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Completare automată" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Proxy de imagini" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Activat" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Dezactivat" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Metodă" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "CăutareSigură" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Strict" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Moderat" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Nimic" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Teme" @@ -251,6 +263,8 @@ msgstr "Motoarele de căutare folosite curent" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Numele motorului" @@ -265,6 +279,8 @@ msgstr "Categorie" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -282,7 +298,7 @@ msgstr "Blochează" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -291,7 +307,7 @@ msgstr "Aceste setări sunt stocate în cookie-urile d-voastră, aceasta ne perm #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -300,20 +316,20 @@ msgstr "Aceste cookie-uri servesc doar pentru confortul d-voastră, noi nu stoc #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "salvează" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "Resetează valorile implicite" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "înapoi" @@ -423,51 +439,89 @@ msgid "Toggle navigation" msgstr "Comută navigarea" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "General" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Motoare" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Module" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "Ce limbă preferați pentru căutare?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Schimbă limba aspectului" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Găsește lucruri în timp ce tastezi" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Transferă rezultatele cu imagini prin searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Modificați cum sunt trimise formularele, <a href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">învățați mai multe despre metodele de transfer</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Filtrează conținutul" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "Schimbă aspectul lui searx" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "" + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Rezultatele căutării" @@ -517,6 +571,14 @@ msgstr "Avertizare!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Vă rog activați JavaScript pentru a utiliza funcționalitatea completă a acestui site." +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "" + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "Deocamdată nu există date disponibile." diff --git a/searx/translations/ru/LC_MESSAGES/messages.mo b/searx/translations/ru/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/ru/LC_MESSAGES/messages.po b/searx/translations/ru/LC_MESSAGES/messages.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-26 17:02+0000\n" -"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/searx/language/ru/)\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 09:45+0000\n" +"Last-Translator: pointhi\n" +"Language-Team: Russian (http://www.transifex.com/asciimoo/searx/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,67 +20,67 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "файлы" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "общие" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "музыка" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "соцсети" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "картинки" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "видео" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "IT" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "новости" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "карты" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "{minutes} минут назад" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} час, {minutes} минут назад" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Время загрузки (сек)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Число результатов" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "Попаданий" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "Попаданий за результат" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Ошибок" @@ -95,11 +95,21 @@ msgstr "" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." +"multiple categories. (JavaScript required)" msgstr "" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "" + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" msgstr "" #: searx/templates/courgette/index.html:9 @@ -128,90 +138,92 @@ msgstr "Опции" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Категории по-умолчанию" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Язык поиска" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Выбирать автоматически" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Язык интерфейса" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Авто-подсказки" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Прокси для картинок" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Включен" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Выключен" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Метод" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "Безопасный поиск" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Строгий" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Умеренный" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Выключен" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Темы" @@ -252,6 +264,8 @@ msgstr "Используемые поисковые движки" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Имя движка" @@ -266,6 +280,8 @@ msgstr "Категория" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -283,7 +299,7 @@ msgstr "Блокировать" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -292,7 +308,7 @@ msgstr "Настройки хранятся в ваших cookies-файлах, #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -301,20 +317,20 @@ msgstr "Данные cookies применяются для вашего удоб #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "сохранить" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" msgstr "" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "назад" @@ -424,51 +440,89 @@ msgid "Toggle navigation" msgstr "Переключить навигацию" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "Общие" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Движки" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "На каком языке вы предпочитаете искать?" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Изменить язык сайта" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Поисковые предложения при наборе" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Проксировать найденные изображения с помощью searx" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Изменяет способ отправки запросов (<a href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">подробней о методах запросов</a>)" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "Использовать ли фильтр контента" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "Изменить тему сайта" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "" + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Результаты поиска" @@ -518,6 +572,14 @@ msgstr "Внимание!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Пожалуйста включите JavaScript, чтобы использовать все функции сайта." +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "" + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "На данный момент данные недоступны." diff --git a/searx/translations/tr/LC_MESSAGES/messages.mo b/searx/translations/tr/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/tr/LC_MESSAGES/messages.po b/searx/translations/tr/LC_MESSAGES/messages.po @@ -9,10 +9,10 @@ msgid "" msgstr "" "Project-Id-Version: searx\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-04-26 18:57+0200\n" -"PO-Revision-Date: 2015-04-28 17:33+0000\n" -"Last-Translator: Caner Başaran <basaran.caner@gmail.com>\n" -"Language-Team: Turkish (http://www.transifex.com/projects/p/searx/language/tr/)\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-24 09:45+0000\n" +"Last-Translator: pointhi\n" +"Language-Team: Turkish (http://www.transifex.com/asciimoo/searx/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -20,67 +20,67 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: searx/webapp.py:104 +#: searx/webapp.py:114 msgid "files" msgstr "dosyalar" -#: searx/webapp.py:105 +#: searx/webapp.py:115 msgid "general" msgstr "genel" -#: searx/webapp.py:106 +#: searx/webapp.py:116 msgid "music" msgstr "müzik" -#: searx/webapp.py:107 +#: searx/webapp.py:117 msgid "social media" msgstr "sosyal medya" -#: searx/webapp.py:108 +#: searx/webapp.py:118 msgid "images" msgstr "görseller" -#: searx/webapp.py:109 +#: searx/webapp.py:119 msgid "videos" msgstr "videolar" -#: searx/webapp.py:110 +#: searx/webapp.py:120 msgid "it" msgstr "bilişim" -#: searx/webapp.py:111 +#: searx/webapp.py:121 msgid "news" msgstr "haberler" -#: searx/webapp.py:112 +#: searx/webapp.py:122 msgid "map" msgstr "harita" -#: searx/webapp.py:396 +#: searx/webapp.py:414 msgid "{minutes} minute(s) ago" msgstr "{minutes} dakika() önce" -#: searx/webapp.py:398 +#: searx/webapp.py:416 msgid "{hours} hour(s), {minutes} minute(s) ago" msgstr "{hours} saat(), {minutes} dakika() önce" -#: searx/engines/__init__.py:182 +#: searx/engines/__init__.py:185 msgid "Page loads (sec)" msgstr "Yüklenen sayfa (sn)" -#: searx/engines/__init__.py:186 +#: searx/engines/__init__.py:189 msgid "Number of results" msgstr "Sonuç sayısı" -#: searx/engines/__init__.py:190 +#: searx/engines/__init__.py:193 msgid "Scores" msgstr "" -#: searx/engines/__init__.py:194 +#: searx/engines/__init__.py:197 msgid "Scores per result" msgstr "" -#: searx/engines/__init__.py:198 +#: searx/engines/__init__.py:201 msgid "Errors" msgstr "Hatalar" @@ -95,11 +95,21 @@ msgstr "" #: searx/plugins/search_on_category_select.py:19 msgid "" "Perform search immediately if a category selected. Disable to select " -"multiple categories." +"multiple categories. (JavaScript required)" msgstr "" -#: searx/plugins/self_ip.py:19 -msgid "Display your source IP address if the query expression is \"ip\"" +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "" + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" msgstr "" #: searx/templates/courgette/index.html:9 @@ -128,90 +138,92 @@ msgstr "Tercihler" #: searx/templates/courgette/preferences.html:9 #: searx/templates/default/preferences.html:9 -#: searx/templates/oscar/preferences.html:35 -#: searx/templates/oscar/preferences.html:37 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 msgid "Default categories" msgstr "Öntanımlı kategoriler" #: searx/templates/courgette/preferences.html:13 #: searx/templates/default/preferences.html:14 -#: searx/templates/oscar/preferences.html:43 +#: searx/templates/oscar/preferences.html:44 #: searx/templates/pix-art/preferences.html:9 msgid "Search language" msgstr "Arama dili" #: searx/templates/courgette/preferences.html:16 #: searx/templates/default/preferences.html:17 -#: searx/templates/oscar/preferences.html:47 +#: searx/templates/oscar/preferences.html:48 #: searx/templates/pix-art/preferences.html:12 msgid "Automatic" msgstr "Otomatik" #: searx/templates/courgette/preferences.html:24 #: searx/templates/default/preferences.html:25 -#: searx/templates/oscar/preferences.html:54 +#: searx/templates/oscar/preferences.html:55 #: searx/templates/pix-art/preferences.html:20 msgid "Interface language" msgstr "Arayüz dili" #: searx/templates/courgette/preferences.html:34 #: searx/templates/default/preferences.html:35 -#: searx/templates/oscar/preferences.html:64 +#: searx/templates/oscar/preferences.html:65 msgid "Autocomplete" msgstr "Otomatik tamamlama" #: searx/templates/courgette/preferences.html:45 #: searx/templates/default/preferences.html:46 -#: searx/templates/oscar/preferences.html:75 +#: searx/templates/oscar/preferences.html:76 msgid "Image proxy" msgstr "Görsel vekil sunucu" #: searx/templates/courgette/preferences.html:48 #: searx/templates/default/preferences.html:49 -#: searx/templates/oscar/preferences.html:79 +#: searx/templates/oscar/preferences.html:80 msgid "Enabled" msgstr "Etkin" #: searx/templates/courgette/preferences.html:49 #: searx/templates/default/preferences.html:50 -#: searx/templates/oscar/preferences.html:80 +#: searx/templates/oscar/preferences.html:81 msgid "Disabled" msgstr "Devre dışı" #: searx/templates/courgette/preferences.html:54 #: searx/templates/default/preferences.html:55 -#: searx/templates/oscar/preferences.html:84 +#: searx/templates/oscar/preferences.html:85 #: searx/templates/pix-art/preferences.html:30 msgid "Method" msgstr "Sorgu gönderim yöntemi" #: searx/templates/courgette/preferences.html:63 #: searx/templates/default/preferences.html:64 -#: searx/templates/oscar/preferences.html:93 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 msgid "SafeSearch" msgstr "Güvenli Arama" #: searx/templates/courgette/preferences.html:66 #: searx/templates/default/preferences.html:67 -#: searx/templates/oscar/preferences.html:97 +#: searx/templates/oscar/preferences.html:98 msgid "Strict" msgstr "Sıkı" #: searx/templates/courgette/preferences.html:67 #: searx/templates/default/preferences.html:68 -#: searx/templates/oscar/preferences.html:98 +#: searx/templates/oscar/preferences.html:99 msgid "Moderate" msgstr "Orta" #: searx/templates/courgette/preferences.html:68 #: searx/templates/default/preferences.html:69 -#: searx/templates/oscar/preferences.html:99 +#: searx/templates/oscar/preferences.html:100 msgid "None" msgstr "Yok" #: searx/templates/courgette/preferences.html:73 #: searx/templates/default/preferences.html:74 -#: searx/templates/oscar/preferences.html:103 +#: searx/templates/oscar/preferences.html:104 #: searx/templates/pix-art/preferences.html:39 msgid "Themes" msgstr "Temalar" @@ -252,6 +264,8 @@ msgstr "Şu anda kullanılan arama motorları" #: searx/templates/courgette/preferences.html:100 #: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 #: searx/templates/pix-art/preferences.html:53 msgid "Engine name" msgstr "Motor adı" @@ -266,6 +280,8 @@ msgstr "Türü" #: searx/templates/default/preferences.html:90 #: searx/templates/default/preferences.html:101 #: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 #: searx/templates/pix-art/preferences.html:54 #: searx/templates/pix-art/preferences.html:64 msgid "Allow" @@ -283,7 +299,7 @@ msgstr "Engelle" #: searx/templates/courgette/preferences.html:122 #: searx/templates/default/preferences.html:110 -#: searx/templates/oscar/preferences.html:180 +#: searx/templates/oscar/preferences.html:235 #: searx/templates/pix-art/preferences.html:73 msgid "" "These settings are stored in your cookies, this allows us not to store this " @@ -292,7 +308,7 @@ msgstr "Ayarlar çerezlerinizde saklanır. Verdiğiniz izinler, sizin hakkınız #: searx/templates/courgette/preferences.html:124 #: searx/templates/default/preferences.html:112 -#: searx/templates/oscar/preferences.html:182 +#: searx/templates/oscar/preferences.html:237 #: searx/templates/pix-art/preferences.html:75 msgid "" "These cookies serve your sole convenience, we don't use these cookies to " @@ -301,20 +317,20 @@ msgstr "Bu çerezler size kolaylık sağlar. Sizi takip etmek için kullanılmaz #: searx/templates/courgette/preferences.html:127 #: searx/templates/default/preferences.html:115 -#: searx/templates/oscar/preferences.html:185 +#: searx/templates/oscar/preferences.html:240 #: searx/templates/pix-art/preferences.html:78 msgid "save" msgstr "kaydet" #: searx/templates/courgette/preferences.html:128 #: searx/templates/default/preferences.html:116 -#: searx/templates/oscar/preferences.html:187 +#: searx/templates/oscar/preferences.html:242 msgid "Reset defaults" -msgstr "" +msgstr "Varsayılanları sıfırla" #: searx/templates/courgette/preferences.html:129 #: searx/templates/default/preferences.html:117 -#: searx/templates/oscar/preferences.html:186 +#: searx/templates/oscar/preferences.html:241 #: searx/templates/pix-art/preferences.html:79 msgid "back" msgstr "geri" @@ -424,51 +440,89 @@ msgid "Toggle navigation" msgstr "" #: searx/templates/oscar/preferences.html:17 -#: searx/templates/oscar/preferences.html:24 +#: searx/templates/oscar/preferences.html:25 msgid "General" msgstr "Genel" #: searx/templates/oscar/preferences.html:18 -#: searx/templates/oscar/preferences.html:125 +#: searx/templates/oscar/preferences.html:126 msgid "Engines" msgstr "Motorlar" #: searx/templates/oscar/preferences.html:19 -#: searx/templates/oscar/preferences.html:159 +#: searx/templates/oscar/preferences.html:187 msgid "Plugins" msgstr "Eklentiler" -#: searx/templates/oscar/preferences.html:44 +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "" + +#: searx/templates/oscar/preferences.html:45 msgid "What language do you prefer for search?" msgstr "Tercih ettiğiniz arama sonuçları dili" -#: searx/templates/oscar/preferences.html:55 +#: searx/templates/oscar/preferences.html:56 msgid "Change the language of the layout" msgstr "Site dilini değiştir" -#: searx/templates/oscar/preferences.html:65 +#: searx/templates/oscar/preferences.html:66 msgid "Find stuff as you type" msgstr "Leb demeden leblebiyi anlasın" -#: searx/templates/oscar/preferences.html:76 +#: searx/templates/oscar/preferences.html:77 msgid "Proxying image results through searx" msgstr "Görsel arama sonuçlarını, searx vekil sunucusu üzerinden geçir" -#: searx/templates/oscar/preferences.html:85 +#: searx/templates/oscar/preferences.html:86 msgid "" "Change how forms are submited, <a " "href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" " rel=\"external\">learn more about request methods</a>" msgstr "Aramaların nasıl gönderildiğini değiştir, <a href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">istek yöntemleri hakkında daha fazla bilgi</a>" -#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:95 msgid "Filter content" msgstr "İçeriyi süz" -#: searx/templates/oscar/preferences.html:104 +#: searx/templates/oscar/preferences.html:105 msgid "Change searx layout" msgstr "searx yerleşim düzenini değiştir" +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "" + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "" + #: searx/templates/oscar/results.html:7 msgid "Search results" msgstr "Arama sonuçları" @@ -518,6 +572,14 @@ msgstr "Uyarı!" msgid "Please enable JavaScript to use full functionality of this site." msgstr "Lütfen, bu sitenin tüm işlevlerini kullanmak için JavaScript'i etkinleştirin." +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "" + #: searx/templates/oscar/messages/no_data_available.html:4 msgid "There is currently no data available. " msgstr "Şuan uygun veri yok." diff --git a/searx/translations/zh_CN/LC_MESSAGES/messages.mo b/searx/translations/zh_CN/LC_MESSAGES/messages.mo Binary files differ. diff --git a/searx/translations/zh_CN/LC_MESSAGES/messages.po b/searx/translations/zh_CN/LC_MESSAGES/messages.po @@ -0,0 +1,682 @@ +# Translations template for PROJECT. +# Copyright (C) 2015 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# +# Translators: +# 文科, 2015 +msgid "" +msgstr "" +"Project-Id-Version: searx\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2015-08-24 11:44+0200\n" +"PO-Revision-Date: 2015-08-29 07:35+0000\n" +"Last-Translator: 文科\n" +"Language-Team: Chinese (China) (http://www.transifex.com/asciimoo/searx/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 1.3\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: searx/webapp.py:114 +msgid "files" +msgstr "文件" + +#: searx/webapp.py:115 +msgid "general" +msgstr "一般" + +#: searx/webapp.py:116 +msgid "music" +msgstr "音乐" + +#: searx/webapp.py:117 +msgid "social media" +msgstr "社交媒体" + +#: searx/webapp.py:118 +msgid "images" +msgstr "图片" + +#: searx/webapp.py:119 +msgid "videos" +msgstr "视频" + +#: searx/webapp.py:120 +msgid "it" +msgstr "it" + +#: searx/webapp.py:121 +msgid "news" +msgstr "新闻" + +#: searx/webapp.py:122 +msgid "map" +msgstr "地图" + +#: searx/webapp.py:414 +msgid "{minutes} minute(s) ago" +msgstr "{minutes}分钟之前" + +#: searx/webapp.py:416 +msgid "{hours} hour(s), {minutes} minute(s) ago" +msgstr "{hours}小时{minutes}分钟之前" + +#: searx/engines/__init__.py:185 +msgid "Page loads (sec)" +msgstr "页面加载 (秒)" + +#: searx/engines/__init__.py:189 +msgid "Number of results" +msgstr "结果数" + +#: searx/engines/__init__.py:193 +msgid "Scores" +msgstr "得分" + +#: searx/engines/__init__.py:197 +msgid "Scores per result" +msgstr "每个结果等分" + +#: searx/engines/__init__.py:201 +msgid "Errors" +msgstr "错误" + +#: searx/plugins/https_rewrite.py:29 +msgid "Rewrite HTTP links to HTTPS if possible" +msgstr "如果可能的话重定向HTTP链接到HTTPS" + +#: searx/plugins/search_on_category_select.py:18 +msgid "Search on category select" +msgstr "搜索类别选择" + +#: searx/plugins/search_on_category_select.py:19 +msgid "" +"Perform search immediately if a category selected. Disable to select " +"multiple categories. (JavaScript required)" +msgstr "如果选中一个类别立即搜索。禁用选择多个类别功能。(JavaScript 启用)" + +#: searx/plugins/self_info.py:20 +msgid "" +"Displays your IP if the query is \"ip\" and your user agent if the query " +"contains \"user agent\"." +msgstr "搜索“ip”显示你的ip和搜索内容包括“user agent”显示你的user agent。" + +#: searx/plugins/tracker_url_remover.py:26 +msgid "Tracker URL remover" +msgstr "移除跟踪链接" + +#: searx/plugins/tracker_url_remover.py:27 +msgid "Remove trackers arguments from the returned URL" +msgstr "从返回的链接中移除跟踪参数" + +#: searx/templates/courgette/index.html:9 +#: searx/templates/courgette/index.html:13 +#: searx/templates/courgette/results.html:5 +#: searx/templates/default/index.html:8 searx/templates/default/index.html:12 +#: searx/templates/oscar/navbar.html:7 searx/templates/oscar/navbar.html:35 +#: searx/templates/oscar/preferences.html:3 +#: searx/templates/pix-art/index.html:8 +msgid "preferences" +msgstr "首选项" + +#: searx/templates/courgette/index.html:11 +#: searx/templates/default/index.html:10 searx/templates/oscar/about.html:3 +#: searx/templates/oscar/navbar.html:8 searx/templates/oscar/navbar.html:34 +#: searx/templates/pix-art/index.html:7 +msgid "about" +msgstr "关于" + +#: searx/templates/courgette/preferences.html:5 +#: searx/templates/default/preferences.html:5 +#: searx/templates/oscar/preferences.html:12 +#: searx/templates/pix-art/preferences.html:5 +msgid "Preferences" +msgstr "首选项" + +#: searx/templates/courgette/preferences.html:9 +#: searx/templates/default/preferences.html:9 +#: searx/templates/oscar/preferences.html:36 +#: searx/templates/oscar/preferences.html:38 +msgid "Default categories" +msgstr "默认类别" + +#: searx/templates/courgette/preferences.html:13 +#: searx/templates/default/preferences.html:14 +#: searx/templates/oscar/preferences.html:44 +#: searx/templates/pix-art/preferences.html:9 +msgid "Search language" +msgstr "搜索语言" + +#: searx/templates/courgette/preferences.html:16 +#: searx/templates/default/preferences.html:17 +#: searx/templates/oscar/preferences.html:48 +#: searx/templates/pix-art/preferences.html:12 +msgid "Automatic" +msgstr "自动" + +#: searx/templates/courgette/preferences.html:24 +#: searx/templates/default/preferences.html:25 +#: searx/templates/oscar/preferences.html:55 +#: searx/templates/pix-art/preferences.html:20 +msgid "Interface language" +msgstr "界面语言" + +#: searx/templates/courgette/preferences.html:34 +#: searx/templates/default/preferences.html:35 +#: searx/templates/oscar/preferences.html:65 +msgid "Autocomplete" +msgstr "自动完成" + +#: searx/templates/courgette/preferences.html:45 +#: searx/templates/default/preferences.html:46 +#: searx/templates/oscar/preferences.html:76 +msgid "Image proxy" +msgstr "代理图片" + +#: searx/templates/courgette/preferences.html:48 +#: searx/templates/default/preferences.html:49 +#: searx/templates/oscar/preferences.html:80 +msgid "Enabled" +msgstr "启用" + +#: searx/templates/courgette/preferences.html:49 +#: searx/templates/default/preferences.html:50 +#: searx/templates/oscar/preferences.html:81 +msgid "Disabled" +msgstr "禁用" + +#: searx/templates/courgette/preferences.html:54 +#: searx/templates/default/preferences.html:55 +#: searx/templates/oscar/preferences.html:85 +#: searx/templates/pix-art/preferences.html:30 +msgid "Method" +msgstr "方法" + +#: searx/templates/courgette/preferences.html:63 +#: searx/templates/default/preferences.html:64 +#: searx/templates/oscar/preferences.html:94 +#: searx/templates/oscar/preferences.html:144 +#: searx/templates/oscar/preferences.html:150 +msgid "SafeSearch" +msgstr "安全搜索" + +#: searx/templates/courgette/preferences.html:66 +#: searx/templates/default/preferences.html:67 +#: searx/templates/oscar/preferences.html:98 +msgid "Strict" +msgstr "严格模式" + +#: searx/templates/courgette/preferences.html:67 +#: searx/templates/default/preferences.html:68 +#: searx/templates/oscar/preferences.html:99 +msgid "Moderate" +msgstr "中等" + +#: searx/templates/courgette/preferences.html:68 +#: searx/templates/default/preferences.html:69 +#: searx/templates/oscar/preferences.html:100 +msgid "None" +msgstr "不过滤" + +#: searx/templates/courgette/preferences.html:73 +#: searx/templates/default/preferences.html:74 +#: searx/templates/oscar/preferences.html:104 +#: searx/templates/pix-art/preferences.html:39 +msgid "Themes" +msgstr "主题" + +#: searx/templates/courgette/preferences.html:83 +msgid "Color" +msgstr "颜色" + +#: searx/templates/courgette/preferences.html:86 +msgid "Blue (default)" +msgstr "蓝色(默认)" + +#: searx/templates/courgette/preferences.html:87 +msgid "Violet" +msgstr "紫色" + +#: searx/templates/courgette/preferences.html:88 +msgid "Green" +msgstr "绿色" + +#: searx/templates/courgette/preferences.html:89 +msgid "Cyan" +msgstr "青色" + +#: searx/templates/courgette/preferences.html:90 +msgid "Orange" +msgstr "橙色" + +#: searx/templates/courgette/preferences.html:91 +msgid "Red" +msgstr "红色" + +#: searx/templates/courgette/preferences.html:96 +#: searx/templates/default/preferences.html:84 +#: searx/templates/pix-art/preferences.html:49 +msgid "Currently used search engines" +msgstr "目前使用的搜索引擎" + +#: searx/templates/courgette/preferences.html:100 +#: searx/templates/default/preferences.html:88 +#: searx/templates/oscar/preferences.html:142 +#: searx/templates/oscar/preferences.html:152 +#: searx/templates/pix-art/preferences.html:53 +msgid "Engine name" +msgstr "搜索引擎名字" + +#: searx/templates/courgette/preferences.html:101 +#: searx/templates/default/preferences.html:89 +msgid "Category" +msgstr "类别" + +#: searx/templates/courgette/preferences.html:102 +#: searx/templates/courgette/preferences.html:113 +#: searx/templates/default/preferences.html:90 +#: searx/templates/default/preferences.html:101 +#: searx/templates/oscar/macros.html:67 +#: searx/templates/oscar/preferences.html:141 +#: searx/templates/oscar/preferences.html:153 +#: searx/templates/pix-art/preferences.html:54 +#: searx/templates/pix-art/preferences.html:64 +msgid "Allow" +msgstr "允许" + +#: searx/templates/courgette/preferences.html:102 +#: searx/templates/courgette/preferences.html:114 +#: searx/templates/default/preferences.html:90 +#: searx/templates/default/preferences.html:102 +#: searx/templates/oscar/macros.html:66 +#: searx/templates/pix-art/preferences.html:54 +#: searx/templates/pix-art/preferences.html:65 +msgid "Block" +msgstr "屏蔽" + +#: searx/templates/courgette/preferences.html:122 +#: searx/templates/default/preferences.html:110 +#: searx/templates/oscar/preferences.html:235 +#: searx/templates/pix-art/preferences.html:73 +msgid "" +"These settings are stored in your cookies, this allows us not to store this " +"data about you." +msgstr "这些设置保存你的cookie,这代表我们不能储存你的数据。" + +#: searx/templates/courgette/preferences.html:124 +#: searx/templates/default/preferences.html:112 +#: searx/templates/oscar/preferences.html:237 +#: searx/templates/pix-art/preferences.html:75 +msgid "" +"These cookies serve your sole convenience, we don't use these cookies to " +"track you." +msgstr "这些cookie是为了让你更加方便,我们不会使用这些cookie跟踪你。" + +#: searx/templates/courgette/preferences.html:127 +#: searx/templates/default/preferences.html:115 +#: searx/templates/oscar/preferences.html:240 +#: searx/templates/pix-art/preferences.html:78 +msgid "save" +msgstr "保存" + +#: searx/templates/courgette/preferences.html:128 +#: searx/templates/default/preferences.html:116 +#: searx/templates/oscar/preferences.html:242 +msgid "Reset defaults" +msgstr "恢复默认" + +#: searx/templates/courgette/preferences.html:129 +#: searx/templates/default/preferences.html:117 +#: searx/templates/oscar/preferences.html:241 +#: searx/templates/pix-art/preferences.html:79 +msgid "back" +msgstr "后" + +#: searx/templates/courgette/results.html:12 +#: searx/templates/default/results.html:13 +#: searx/templates/oscar/results.html:110 +msgid "Search URL" +msgstr "搜索链接" + +#: searx/templates/courgette/results.html:16 +#: searx/templates/default/results.html:17 +#: searx/templates/oscar/results.html:115 +msgid "Download results" +msgstr "下载结果" + +#: searx/templates/courgette/results.html:34 +#: searx/templates/default/results.html:35 +msgid "Answers" +msgstr "回答" + +#: searx/templates/courgette/results.html:42 +#: searx/templates/default/results.html:43 +#: searx/templates/oscar/results.html:90 +msgid "Suggestions" +msgstr "搜索建议" + +#: searx/templates/courgette/results.html:70 +#: searx/templates/default/results.html:81 +#: searx/templates/oscar/results.html:51 searx/templates/oscar/results.html:63 +msgid "previous page" +msgstr "上一页" + +#: searx/templates/courgette/results.html:81 +#: searx/templates/default/results.html:92 +#: searx/templates/oscar/results.html:44 searx/templates/oscar/results.html:71 +msgid "next page" +msgstr "下一页" + +#: searx/templates/courgette/search.html:3 +#: searx/templates/default/search.html:3 searx/templates/oscar/search.html:4 +#: searx/templates/oscar/search_full.html:9 +#: searx/templates/pix-art/search.html:3 +msgid "Search for..." +msgstr "搜索..." + +#: searx/templates/courgette/stats.html:4 searx/templates/default/stats.html:4 +#: searx/templates/oscar/stats.html:5 searx/templates/pix-art/stats.html:4 +msgid "Engine stats" +msgstr "搜索引擎统计" + +#: searx/templates/courgette/result_templates/images.html:4 +#: searx/templates/default/result_templates/images.html:4 +#: searx/templates/pix-art/result_templates/images.html:4 +msgid "original context" +msgstr "原始上下文" + +#: searx/templates/courgette/result_templates/torrent.html:7 +#: searx/templates/default/result_templates/torrent.html:11 +#: searx/templates/oscar/result_templates/torrent.html:6 +msgid "Seeder" +msgstr "" + +#: searx/templates/courgette/result_templates/torrent.html:7 +#: searx/templates/default/result_templates/torrent.html:11 +#: searx/templates/oscar/result_templates/torrent.html:6 +msgid "Leecher" +msgstr "" + +#: searx/templates/courgette/result_templates/torrent.html:9 +#: searx/templates/default/result_templates/torrent.html:9 +#: searx/templates/oscar/macros.html:21 +msgid "magnet link" +msgstr "磁力链接" + +#: searx/templates/courgette/result_templates/torrent.html:10 +#: searx/templates/default/result_templates/torrent.html:10 +#: searx/templates/oscar/macros.html:22 +msgid "torrent file" +msgstr "种子文件" + +#: searx/templates/default/categories.html:8 +msgid "Click on the magnifier to perform search" +msgstr "点击放大镜执行搜索" + +#: searx/templates/default/result_templates/code.html:3 +#: searx/templates/default/result_templates/default.html:3 +#: searx/templates/default/result_templates/map.html:9 +#: searx/templates/oscar/macros.html:20 +msgid "cached" +msgstr "缓存" + +#: searx/templates/oscar/base.html:78 +msgid "Powered by" +msgstr "Powered by" + +#: searx/templates/oscar/base.html:78 +msgid "a privacy-respecting, hackable metasearch engine" +msgstr "一个尊重隐私,可再开发的元搜索引擎" + +#: searx/templates/oscar/navbar.html:9 searx/templates/oscar/navbar.html:33 +msgid "home" +msgstr "主页" + +#: searx/templates/oscar/navbar.html:14 searx/templates/oscar/navbar.html:24 +msgid "Toggle navigation" +msgstr "切换导航" + +#: searx/templates/oscar/preferences.html:17 +#: searx/templates/oscar/preferences.html:25 +msgid "General" +msgstr "常规" + +#: searx/templates/oscar/preferences.html:18 +#: searx/templates/oscar/preferences.html:126 +msgid "Engines" +msgstr "搜索引擎" + +#: searx/templates/oscar/preferences.html:19 +#: searx/templates/oscar/preferences.html:187 +msgid "Plugins" +msgstr "插件" + +#: searx/templates/oscar/preferences.html:20 +#: searx/templates/oscar/preferences.html:210 +msgid "Cookies" +msgstr "Cookie" + +#: searx/templates/oscar/preferences.html:45 +msgid "What language do you prefer for search?" +msgstr "你更喜欢搜索什么语言?" + +#: searx/templates/oscar/preferences.html:56 +msgid "Change the language of the layout" +msgstr "改变界面语言" + +#: searx/templates/oscar/preferences.html:66 +msgid "Find stuff as you type" +msgstr "找到你的搜索的东西" + +#: searx/templates/oscar/preferences.html:77 +msgid "Proxying image results through searx" +msgstr "通过searx代理图片" + +#: searx/templates/oscar/preferences.html:86 +msgid "" +"Change how forms are submited, <a " +"href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\"" +" rel=\"external\">learn more about request methods</a>" +msgstr "更改请求方法,<a href=\"http://zh.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">关于请求方法了解更多</a>" + +#: searx/templates/oscar/preferences.html:95 +msgid "Filter content" +msgstr "过滤内容" + +#: searx/templates/oscar/preferences.html:105 +msgid "Change searx layout" +msgstr "改变searx布局" + +#: searx/templates/oscar/preferences.html:143 +#: searx/templates/oscar/preferences.html:151 +msgid "Shortcut" +msgstr "快捷键" + +#: searx/templates/oscar/preferences.html:145 +#: searx/templates/oscar/preferences.html:149 +msgid "Avg. time" +msgstr "平均时间" + +#: searx/templates/oscar/preferences.html:146 +#: searx/templates/oscar/preferences.html:148 +msgid "Max time" +msgstr "最大时间" + +#: searx/templates/oscar/preferences.html:213 +msgid "" +"This is the list of cookies and their values searx is storing on your " +"computer." +msgstr "这是searx保存在你的电脑上的cookie列表。" + +#: searx/templates/oscar/preferences.html:214 +msgid "With that list, you can assess searx transparency." +msgstr "有了这个列表,你可以评价searx透明度。" + +#: searx/templates/oscar/preferences.html:219 +msgid "Cookie name" +msgstr "cookie名称" + +#: searx/templates/oscar/preferences.html:220 +msgid "Value" +msgstr "值" + +#: searx/templates/oscar/results.html:7 +msgid "Search results" +msgstr "搜索结果" + +#: searx/templates/oscar/results.html:105 +msgid "Links" +msgstr "链接" + +#: searx/templates/oscar/search.html:6 +#: searx/templates/oscar/search_full.html:11 +msgid "Start search" +msgstr "开始搜索" + +#: searx/templates/oscar/search_full.html:15 +msgid "Show search filters" +msgstr "显示搜索过滤器" + +#: searx/templates/oscar/search_full.html:15 +msgid "Hide search filters" +msgstr "隐藏搜索过滤器" + +#: searx/templates/oscar/stats.html:2 +msgid "stats" +msgstr "统计" + +#: searx/templates/oscar/messages/first_time.html:4 +#: searx/templates/oscar/messages/no_results.html:5 +#: searx/templates/oscar/messages/save_settings_successfull.html:5 +#: searx/templates/oscar/messages/unknow_error.html:5 +msgid "Close" +msgstr "关闭" + +#: searx/templates/oscar/messages/first_time.html:6 +#: searx/templates/oscar/messages/no_data_available.html:3 +msgid "Heads up!" +msgstr "小心!" + +#: searx/templates/oscar/messages/first_time.html:7 +msgid "It look like you are using searx first time." +msgstr "看起来你是第一次使用searx。" + +#: searx/templates/oscar/messages/js_disabled.html:2 +msgid "Warning!" +msgstr "警告!" + +#: searx/templates/oscar/messages/js_disabled.html:3 +msgid "Please enable JavaScript to use full functionality of this site." +msgstr "请启用JavaScript来使用本网站全部功能。" + +#: searx/templates/oscar/messages/no_cookies.html:3 +msgid "Information!" +msgstr "信息!" + +#: searx/templates/oscar/messages/no_cookies.html:4 +msgid "currently, there are no cookies defined." +msgstr "目前还未保存cookie。" + +#: searx/templates/oscar/messages/no_data_available.html:4 +msgid "There is currently no data available. " +msgstr "目前没有数据可用。" + +#: searx/templates/oscar/messages/no_results.html:7 +msgid "Sorry!" +msgstr "抱歉!" + +#: searx/templates/oscar/messages/no_results.html:8 +msgid "" +"we didn't find any results. Please use another query or search in more " +"categories." +msgstr "我们没有找到任何结果。请换用其他词语或在更多类别中搜索。" + +#: searx/templates/oscar/messages/save_settings_successfull.html:7 +msgid "Well done!" +msgstr "做得好!" + +#: searx/templates/oscar/messages/save_settings_successfull.html:8 +msgid "Settings saved successfully." +msgstr "设置保存成功。" + +#: searx/templates/oscar/messages/unknow_error.html:7 +msgid "Oh snap!" +msgstr "哦,糟糕!" + +#: searx/templates/oscar/messages/unknow_error.html:8 +msgid "Something went wrong." +msgstr "出了些问题。" + +#: searx/templates/oscar/result_templates/default.html:7 +msgid "show media" +msgstr "显示媒体" + +#: searx/templates/oscar/result_templates/default.html:7 +msgid "hide media" +msgstr "隐藏媒体" + +#: searx/templates/oscar/result_templates/images.html:23 +msgid "Get image" +msgstr "获取图片" + +#: searx/templates/oscar/result_templates/images.html:24 +msgid "View source" +msgstr "查看来源" + +#: searx/templates/oscar/result_templates/map.html:7 +msgid "show map" +msgstr "显示地图" + +#: searx/templates/oscar/result_templates/map.html:7 +msgid "hide map" +msgstr "隐藏地图" + +#: searx/templates/oscar/result_templates/map.html:11 +msgid "show details" +msgstr "显示详细信息" + +#: searx/templates/oscar/result_templates/map.html:11 +msgid "hide details" +msgstr "隐藏详细信息" + +#: searx/templates/oscar/result_templates/torrent.html:7 +msgid "Filesize" +msgstr "文件大小" + +#: searx/templates/oscar/result_templates/torrent.html:9 +msgid "Bytes" +msgstr "B" + +#: searx/templates/oscar/result_templates/torrent.html:10 +msgid "kiB" +msgstr "KB" + +#: searx/templates/oscar/result_templates/torrent.html:11 +msgid "MiB" +msgstr "MB" + +#: searx/templates/oscar/result_templates/torrent.html:12 +msgid "GiB" +msgstr "GB" + +#: searx/templates/oscar/result_templates/torrent.html:13 +msgid "TiB" +msgstr "TB" + +#: searx/templates/oscar/result_templates/torrent.html:15 +msgid "Number of Files" +msgstr "文件数" + +#: searx/templates/oscar/result_templates/videos.html:7 +msgid "show video" +msgstr "显示视频" + +#: searx/templates/oscar/result_templates/videos.html:7 +msgid "hide video" +msgstr "隐藏视频" + +#: searx/templates/pix-art/results.html:28 +msgid "Load more..." +msgstr "载入更多..." diff --git a/searx/utils.py b/searx/utils.py @@ -1,11 +1,9 @@ -# import htmlentitydefs -import locale -import dateutil.parser import cStringIO import csv import os import re +from babel.dates import format_date from codecs import getincrementalencoder from HTMLParser import HTMLParser from random import choice @@ -21,11 +19,15 @@ ua_versions = ('33.0', '34.0', '35.0', '36.0', - '37.0') + '37.0', + '38.0', + '39.0', + '40.0') ua_os = ('Windows NT 6.3; WOW64', 'X11; Linux x86_64', 'X11; Linux x86') + ua = "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}" blocked_tags = ('script', @@ -40,7 +42,7 @@ def gen_useragent(): def searx_useragent(): return 'searx/{searx_version} {suffix}'.format( searx_version=VERSION_STRING, - suffix=settings['server'].get('useragent_suffix', '')) + suffix=settings['outgoing'].get('useragent_suffix', '')) def highlight_content(content, query): @@ -194,23 +196,16 @@ def get_result_templates(base_path): return result_templates -def format_date_by_locale(date_string, locale_string): +def format_date_by_locale(date, locale_string): # strftime works only on dates after 1900 - parsed_date = dateutil.parser.parse(date_string) - if parsed_date.year <= 1900: - return parsed_date.isoformat().split('T')[0] - - orig_locale = locale.getlocale()[0] - try: - locale.setlocale(locale.LC_ALL, locale_string) - except: - logger.warning('cannot set locale: {0}'.format(locale_string)) - formatted_date = parsed_date.strftime(locale.nl_langinfo(locale.D_FMT)) - try: - locale.setlocale(locale.LC_ALL, orig_locale) - except: - logger.warning('cannot set original locale: {0}'.format(orig_locale)) - return formatted_date + + if date.year <= 1900: + return date.isoformat().split('T')[0] + + if locale_string == 'all': + locale_string = settings['ui']['default_locale'] or 'en_US' + + return format_date(date, locale=locale_string) def dict_subset(d, properties): @@ -221,9 +216,10 @@ def dict_subset(d, properties): return result -def prettify_url(url): - if len(url) > 74: - return u'{0}[...]{1}'.format(url[:35], url[-35:]) +def prettify_url(url, max_length=74): + if len(url) > max_length: + chunk_len = max_length / 2 + 1 + return u'{0}[...]{1}'.format(url[:chunk_len], url[-chunk_len:]) else: return url diff --git a/searx/version.py b/searx/version.py @@ -18,7 +18,7 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >. # version of searx VERSION_MAJOR = 0 -VERSION_MINOR = 7 +VERSION_MINOR = 8 VERSION_BUILD = 0 VERSION_STRING = "{0}.{1}.{2}".format(VERSION_MAJOR, diff --git a/searx/webapp.py b/searx/webapp.py @@ -42,7 +42,7 @@ except: from datetime import datetime, timedelta from urllib import urlencode -from urlparse import urlparse +from urlparse import urlparse, urljoin from werkzeug.contrib.fixers import ProxyFix from flask import ( Flask, request, render_template, url_for, Response, make_response, @@ -77,11 +77,11 @@ except ImportError: static_path, templates_path, themes =\ - get_themes(settings['themes_path'] - if settings.get('themes_path') + get_themes(settings['ui']['themes_path'] + if settings['ui']['themes_path'] else searx_dir) -default_theme = settings['server'].get('default_theme', 'default') +default_theme = settings['ui']['default_theme'] static_files = get_static_files(searx_dir) @@ -121,15 +121,15 @@ _category_names = (gettext('files'), gettext('news'), gettext('map')) -outgoing_proxies = settings.get('outgoing_proxies', None) +outgoing_proxies = settings['outgoing'].get('proxies', None) @babel.localeselector def get_locale(): locale = request.accept_languages.best_match(settings['locales'].keys()) - if settings['server'].get('default_locale'): - locale = settings['server']['default_locale'] + if settings['ui'].get('default_locale'): + locale = settings['ui']['default_locale'] if request.cookies.get('locale', '') in settings['locales']: locale = request.cookies.get('locale', '') @@ -263,7 +263,7 @@ def image_proxify(url): def render(template_name, override_theme=None, **kwargs): blocked_engines = get_blocked_engines(engines, request.cookies) - autocomplete = request.cookies.get('autocomplete') + autocomplete = request.cookies.get('autocomplete', settings['search']['autocomplete']) if autocomplete not in autocomplete_backends: autocomplete = None @@ -312,7 +312,7 @@ def render(template_name, override_theme=None, **kwargs): kwargs['method'] = request.cookies.get('method', 'POST') - kwargs['safesearch'] = request.cookies.get('safesearch', '1') + kwargs['safesearch'] = request.cookies.get('safesearch', str(settings['search']['safe_search'])) # override url_for function in templates kwargs['url_for'] = url_for_theme @@ -383,7 +383,7 @@ def index(): plugins.call('post_search', request, locals()) - for result in search.results: + for result in search.result_container.get_ordered_results(): plugins.call('on_result', request, locals()) if not search.paging and engines[result['engine']].paging: @@ -411,7 +411,7 @@ def index(): minutes = int((timedifference.seconds / 60) % 60) hours = int(timedifference.seconds / 60 / 60) if hours == 0: - result['publishedDate'] = gettext(u'{minutes} minute(s) ago').format(minutes=minutes) # noqa + result['publishedDate'] = gettext(u'{minutes} minute(s) ago').format(minutes=minutes) else: result['publishedDate'] = gettext(u'{hours} hour(s), {minutes} minute(s) ago').format(hours=hours, minutes=minutes) # noqa else: @@ -419,17 +419,16 @@ def index(): if search.request_data.get('format') == 'json': return Response(json.dumps({'query': search.query, - 'results': search.results}), + 'results': search.result_container.get_ordered_results()}), mimetype='application/json') elif search.request_data.get('format') == 'csv': csv = UnicodeWriter(cStringIO.StringIO()) keys = ('title', 'url', 'content', 'host', 'engine', 'score') - if search.results: - csv.writerow(keys) - for row in search.results: - row['host'] = row['parsed_url'].netloc - csv.writerow([row.get(key, '') for key in keys]) - csv.stream.seek(0) + csv.writerow(keys) + for row in search.result_container.get_ordered_results(): + row['host'] = row['parsed_url'].netloc + csv.writerow([row.get(key, '') for key in keys]) + csv.stream.seek(0) response = Response(csv.stream.read(), mimetype='application/csv') cont_disp = 'attachment;Filename=searx_-_{0}.csv'.format(search.query) response.headers.add('Content-Disposition', cont_disp) @@ -437,24 +436,24 @@ def index(): elif search.request_data.get('format') == 'rss': response_rss = render( 'opensearch_response_rss.xml', - results=search.results, + results=search.result_container.get_ordered_results(), q=search.request_data['q'], - number_of_results=len(search.results), + number_of_results=search.result_container.results_length(), base_url=get_base_url() ) return Response(response_rss, mimetype='text/xml') return render( 'results.html', - results=search.results, + results=search.result_container.get_ordered_results(), q=search.request_data['q'], selected_categories=search.categories, paging=search.paging, pageno=search.pageno, base_url=get_base_url(), - suggestions=search.suggestions, - answers=search.answers, - infoboxes=search.infoboxes, + suggestions=search.result_container.suggestions, + answers=search.result_container.answers, + infoboxes=search.result_container.infoboxes, theme=get_current_theme_name(), favicons=global_favicons[themes.index(get_current_theme_name())] ) @@ -491,7 +490,7 @@ def autocompleter(): return '', 400 # run autocompleter - completer = autocomplete_backends.get(request.cookies.get('autocomplete')) + completer = autocomplete_backends.get(request.cookies.get('autocomplete', settings['search']['autocomplete'])) # parse searx specific autocompleter results like !bang raw_results = searx_bang(query) @@ -532,7 +531,7 @@ def preferences(): blocked_engines = [] - resp = make_response(redirect(url_for('index'))) + resp = make_response(redirect(urljoin(settings['server']['base_url'], url_for('index')))) if request.method == 'GET': blocked_engines = get_blocked_engines(engines, request.cookies) @@ -542,7 +541,7 @@ def preferences(): locale = None autocomplete = '' method = 'POST' - safesearch = '1' + safesearch = settings['search']['safe_search'] for pd_name, pd in request.form.items(): if pd_name.startswith('category_'): category = pd_name[9:] @@ -624,7 +623,7 @@ def preferences(): resp.set_cookie('method', method, max_age=cookie_max_age) - resp.set_cookie('safesearch', safesearch, max_age=cookie_max_age) + resp.set_cookie('safesearch', str(safesearch), max_age=cookie_max_age) resp.set_cookie('image_proxy', image_proxy, max_age=cookie_max_age) @@ -640,12 +639,12 @@ def preferences(): stats[e.name] = {'time': None, 'warn_timeout': False, 'warn_time': False} - if e.timeout > settings['server']['request_timeout']: + if e.timeout > settings['outgoing']['request_timeout']: stats[e.name]['warn_timeout'] = True for engine_stat in get_engines_stats()[0][1]: stats[engine_stat.get('name')]['time'] = round(engine_stat.get('avg'), 3) - if engine_stat.get('avg') > settings['server']['request_timeout']: + if engine_stat.get('avg') > settings['outgoing']['request_timeout']: stats[engine_stat.get('name')]['warn_time'] = True # end of stats @@ -683,7 +682,7 @@ def image_proxy(): resp = requests.get(url, stream=True, - timeout=settings['server'].get('request_timeout', 2), + timeout=settings['outgoing']['request_timeout'], headers=headers, proxies=outgoing_proxies) @@ -767,7 +766,7 @@ def favicon(): @app.route('/clear_cookies') def clear_cookies(): - resp = make_response(redirect(url_for('index'))) + resp = make_response(redirect(urljoin(settings['server']['base_url'], url_for('index')))) for cookie_name in request.cookies: resp.delete_cookie(cookie_name) return resp @@ -775,9 +774,10 @@ def clear_cookies(): def run(): app.run( - debug=settings['server']['debug'], - use_debugger=settings['server']['debug'], - port=settings['server']['port'] + debug=settings['general']['debug'], + use_debugger=settings['general']['debug'], + port=settings['server']['port'], + host=settings['server']['bind_address'] )