summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schauer <josch@debian.org>2018-02-20 13:49:55 +0100
committerJohannes Schauer <josch@debian.org>2018-02-20 13:52:45 +0100
commitf6da658cf1d976fdd7847593ba96857e2c14fc8b (patch)
treea548673c4b66d77d8e9f9f12169ac3fc09c400fc
parent1619b7943f59fd6784ff70afdd604570f9bebc52 (diff)
New upstream version 0.14.0+dfsg1
-rw-r--r--.gitignore1
-rw-r--r--.travis.yml5
-rw-r--r--AUTHORS.rst6
-rw-r--r--CHANGELOG.rst13
-rw-r--r--README.rst4
-rw-r--r--debian/changelog7
-rw-r--r--debian/patches/debian-changes194
-rw-r--r--debian/patches/series1
-rwxr-xr-xmanage.sh95
-rw-r--r--searx/__init__.py6
-rw-r--r--searx/engines/__init__.py11
-rw-r--r--searx/engines/archlinux.py6
-rw-r--r--searx/engines/asksteem.py44
-rw-r--r--searx/engines/bing.py5
-rw-r--r--searx/engines/bing_news.py5
-rw-r--r--searx/engines/bing_videos.py22
-rw-r--r--searx/engines/currency_convert.py3
-rw-r--r--searx/engines/dailymotion.py5
-rw-r--r--searx/engines/duckduckgo.py12
-rw-r--r--searx/engines/duckduckgo_images.py8
-rw-r--r--searx/engines/faroo.py5
-rw-r--r--searx/engines/gigablast.py11
-rw-r--r--searx/engines/google.py9
-rw-r--r--searx/engines/google_news.py5
-rw-r--r--searx/engines/json_engine.py13
-rw-r--r--searx/engines/mediawiki.py5
-rw-r--r--searx/engines/microsoft_academic.py75
-rw-r--r--searx/engines/pdbe.py13
-rw-r--r--searx/engines/photon.py7
-rw-r--r--searx/engines/pubmed.py13
-rw-r--r--searx/engines/qwant.py23
-rw-r--r--searx/engines/startpage.py5
-rw-r--r--searx/engines/subtitleseeker.py2
-rw-r--r--searx/engines/swisscows.py5
-rw-r--r--searx/engines/twitter.py7
-rw-r--r--searx/engines/wikidata.py4
-rw-r--r--searx/engines/wikipedia.py2
-rw-r--r--searx/engines/yacy.py15
-rw-r--r--searx/engines/yahoo.py4
-rw-r--r--searx/engines/yahoo_news.py5
-rw-r--r--searx/engines/youtube_api.py4
-rw-r--r--searx/preferences.py10
-rw-r--r--searx/query.py36
-rw-r--r--searx/results.py6
-rw-r--r--searx/search.py11
-rw-r--r--searx/settings.yml22
-rw-r--r--searx/settings_robot.yml2
-rw-r--r--searx/static/plugins/js/search_on_category_select.js2
-rw-r--r--searx/static/themes/oscar/gruntfile.js23
-rw-r--r--searx/static/themes/oscar/less/logicodev-dark/oscar.less245
-rw-r--r--searx/static/themes/oscar/less/logicodev/results.less1
-rw-r--r--searx/static/themes/oscar/less/pointhi/results.less2
-rw-r--r--searx/static/themes/simple/fonts/ion.css134
-rw-r--r--searx/static/themes/simple/fonts/ion.eotbin3796 -> 0 bytes
-rw-r--r--searx/static/themes/simple/fonts/ion.html261
-rw-r--r--searx/static/themes/simple/fonts/ion.svg97
-rw-r--r--searx/static/themes/simple/fonts/ion.ttfbin3640 -> 0 bytes
-rw-r--r--searx/static/themes/simple/fonts/ion.woffbin4452 -> 0 bytes
-rw-r--r--searx/static/themes/simple/fonts/ion.woff2bin1880 -> 0 bytes
-rw-r--r--searx/static/themes/simple/gruntfile.js23
-rw-r--r--searx/static/themes/simple/js/searx_src/autocomplete.js49
-rw-r--r--searx/static/themes/simple/less/autocomplete.less2
-rw-r--r--searx/static/themes/simple/less/ion.less174
-rw-r--r--searx/static/themes/simple/magnet.svg2
-rw-r--r--searx/templates/courgette/preferences.html1
-rw-r--r--searx/templates/legacy/preferences.html1
-rw-r--r--searx/templates/oscar/base.html13
-rw-r--r--searx/templates/oscar/languages.html11
-rw-r--r--searx/templates/oscar/preferences.html7
-rw-r--r--searx/templates/pix-art/preferences.html1
-rw-r--r--searx/templates/simple/404.html2
-rw-r--r--searx/templates/simple/base.html7
-rw-r--r--searx/translations/ar/LC_MESSAGES/messages.po80
-rw-r--r--searx/translations/de/LC_MESSAGES/messages.po26
-rw-r--r--searx/translations/el_GR/LC_MESSAGES/messages.po16
-rw-r--r--searx/translations/es/LC_MESSAGES/messages.po38
-rw-r--r--searx/translations/fil/LC_MESSAGES/messages.po1014
-rw-r--r--searx/translations/it/LC_MESSAGES/messages.po33
-rw-r--r--searx/translations/nl/LC_MESSAGES/messages.po54
-rw-r--r--searx/translations/pt_BR/LC_MESSAGES/messages.po13
-rw-r--r--searx/translations/ru/LC_MESSAGES/messages.po12
-rw-r--r--searx/translations/sv/LC_MESSAGES/messages.po12
-rw-r--r--searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po1014
-rw-r--r--searx/utils.py12
-rw-r--r--searx/version.py4
-rw-r--r--searx/webapp.py9
-rw-r--r--setup.py16
-rw-r--r--tests/unit/engines/test_archlinux.py2
-rw-r--r--tests/unit/engines/test_bing.py6
-rw-r--r--tests/unit/engines/test_bing_news.py4
-rw-r--r--tests/unit/engines/test_bing_videos.py99
-rw-r--r--tests/unit/engines/test_dailymotion.py4
-rw-r--r--tests/unit/engines/test_duckduckgo_images.py2
-rw-r--r--tests/unit/engines/test_faroo.py8
-rw-r--r--tests/unit/engines/test_gigablast.py7
-rw-r--r--tests/unit/engines/test_google.py2
-rw-r--r--tests/unit/engines/test_google_news.py7
-rw-r--r--tests/unit/engines/test_mediawiki.py4
-rw-r--r--tests/unit/engines/test_pdbe.py4
-rw-r--r--tests/unit/engines/test_qwant.py3
-rw-r--r--tests/unit/engines/test_startpage.py4
-rw-r--r--tests/unit/engines/test_subtitleseeker.py36
-rw-r--r--tests/unit/engines/test_swisscows.py5
-rw-r--r--tests/unit/engines/test_twitter.py6
-rw-r--r--tests/unit/engines/test_wikidata.py6
-rw-r--r--tests/unit/engines/test_wikipedia.py4
-rw-r--r--tests/unit/engines/test_yacy.py5
-rw-r--r--tests/unit/engines/test_yahoo.py7
-rw-r--r--tests/unit/engines/test_yahoo_news.py7
-rw-r--r--tests/unit/test_preferences.py15
-rw-r--r--tests/unit/test_query.py64
111 files changed, 3020 insertions, 1474 deletions
diff --git a/.gitignore b/.gitignore
index cd6d7e9..3da4d03 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,6 +3,7 @@ coverage/
.installed.cfg
engines.cfg
env
+searx-ve
robot_log.html
robot_output.xml
robot_report.html
diff --git a/.travis.yml b/.travis.yml
index ce05092..08bcfaa 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,15 +9,14 @@ addons:
language: python
python:
- "2.7"
+ - "3.5"
- "3.6"
before_install:
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- - npm install less@2.7 less-plugin-clean-css grunt-cli
- - export PATH=`pwd`/node_modules/.bin:$PATH
+install:
- ./manage.sh install_geckodriver ~/drivers
- export PATH=~/drivers:$PATH
-install:
- ./manage.sh npm_packages
- ./manage.sh update_dev_packages
- pip install codecov
diff --git a/AUTHORS.rst b/AUTHORS.rst
index 77004e8..346f324 100644
--- a/AUTHORS.rst
+++ b/AUTHORS.rst
@@ -77,3 +77,9 @@ generally made searx better:
- @pyrrh0n1c
- @cclauss
- QGW @moon2l
+- Pierre-Alain Toret @daftaupe
+- Matthew Olmsted @icegiant
+- Michael Tran @trankmichael
+- Joseph Nuthalapati @josephkiranbabu
+- @maiki
+- Richard Didier @zeph33
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 009c7dd..55bd33e 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -1,3 +1,16 @@
+0.14.0 2018.02.19
+=================
+
+- New theme: oscar-logicodev dark
+- New engines
+
+ - AskSteem (general)
+- Autocompleter fix for py3
+- Engine fixes (pdbe, pubmed, gigablast, google, yacy, bing videos, microsoft academic)
+- "All" option is removed from languages
+- Minor UI changes
+- Translation updates
+
0.13.1 2017.11.23
=================
diff --git a/README.rst b/README.rst
index 86334c3..b6ebe3f 100644
--- a/README.rst
+++ b/README.rst
@@ -24,7 +24,7 @@ Installation
- run ``python searx/webapp.py`` to start the application
For all the details, follow this `step by step
-installation <https://github.com/asciimoo/searx/wiki/Installation>`__
+installation <https://github.com/asciimoo/searx/wiki/Installation>`__.
Bugs
~~~~
@@ -38,7 +38,7 @@ tracker <https://github.com/asciimoo/searx/issues>`__.
More about searx
~~~~~~~~~~~~~~~~
-- `ohloh <https://www.ohloh.net/p/searx/>`__
+- `openhub <https://www.openhub.net/p/searx/>`__
- `twitter <https://twitter.com/Searx_engine>`__
- IRC: #searx @ freenode
diff --git a/debian/changelog b/debian/changelog
index 4fe22db..77952b6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+searx (0.14.0+dfsg1-1) unstable; urgency=medium
+
+ * New upstream release
+ - settings.yaml can now contain non-ascii characters (closes: #886093)
+
+ -- Johannes Schauer <josch@debian.org> Tue, 20 Feb 2018 13:45:35 +0100
+
searx (0.13.1+dfsg1-3) unstable; urgency=medium
* Add ionicons font to build ion.woff from source using fontforge for the
diff --git a/debian/patches/debian-changes b/debian/patches/debian-changes
deleted file mode 100644
index 7522f40..0000000
--- a/debian/patches/debian-changes
+++ /dev/null
@@ -1,194 +0,0 @@
-The Debian packaging of searx is maintained in git, using the merging workflow
-described in dgit-maint-merge(7). There isn't a patch queue that can be
-represented as a quilt series.
-
-A detailed breakdown of the changes is available from their canonical
-representation - git commits in the packaging repository. For example, to see
-the changes made by the Debian maintainer in the first upload of upstream
-version 1.2.3, you could use:
-
- % git clone https://git.dgit.debian.org/searx
- % cd searx
- % git log --oneline 1.2.3..debian/1.2.3-1 -- . ':!debian'
-
-(If you have dgit, use `dgit clone searx`, rather than plain `git clone`.)
-
-A single combined diff, containing all the changes, follows.
---- searx-0.13.1+dfsg1.orig/manage.sh
-+++ searx-0.13.1+dfsg1/manage.sh
-@@ -93,7 +93,7 @@ tests() {
- }
-
- build_style() {
-- lessc --clean-css="--s1 --advanced --compatibility=ie9" "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
-+ lessc -x "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
- }
-
- styles() {
-@@ -104,11 +104,10 @@ styles() {
- build_style themes/courgette/less/style-rtl.less themes/courgette/css/style-rtl.css
- build_style less/bootstrap/bootstrap.less css/bootstrap.min.css
- build_style themes/pix-art/less/style.less themes/pix-art/css/style.css
-- # built using grunt
-- #build_style themes/oscar/less/pointhi/oscar.less themes/oscar/css/pointhi.min.css
-- #build_style themes/oscar/less/logicodev/oscar.less themes/oscar/css/logicodev.min.css
-- #build_style themes/simple/less/style.less themes/simple/css/searx.min.css
-- #build_style themes/simple/less/style-rtl.less themes/simple/css/searx-rtl.min.css
-+ build_style themes/oscar/less/pointhi/oscar.less themes/oscar/css/pointhi.min.css
-+ build_style themes/oscar/less/logicodev/oscar.less themes/oscar/css/logicodev.min.css
-+ build_style themes/simple/less/style.less themes/simple/css/searx.min.css
-+ build_style themes/simple/less/style-rtl.less themes/simple/css/searx-rtl.min.css
- }
-
- npm_packages() {
---- searx-0.13.1+dfsg1.orig/searx/settings.yml
-+++ searx-0.13.1+dfsg1/searx/settings.yml
-@@ -16,8 +16,8 @@ server:
- http_protocol_version : "1.0" # 1.0 and 1.1 are supported
-
- ui:
-- static_path : "" # Custom static path - leave it blank if you didn't change
-- templates_path : "" # Custom templates path - leave it blank if you didn't change
-+ static_path : "/usr/share/python3-searx/static" # Custom static path - leave it blank if you didn't change
-+ templates_path : "/usr/share/python3-searx/templates" # Custom templates path - leave it blank if you didn't change
- default_theme : oscar # ui theme
- default_locale : "" # Default interface locale - leave blank to detect from browser information or use codes from the 'locales' config section
-
---- searx-0.13.1+dfsg1.orig/searx/static/themes/oscar/gruntfile.js
-+++ searx-0.13.1+dfsg1/searx/static/themes/oscar/gruntfile.js
-@@ -79,16 +79,9 @@ module.exports = function(grunt) {
- }
- });
-
-- grunt.loadNpmTasks('grunt-contrib-uglify');
-- grunt.loadNpmTasks('grunt-contrib-jshint');
-- grunt.loadNpmTasks('grunt-contrib-watch');
-- grunt.loadNpmTasks('grunt-contrib-concat');
-- grunt.loadNpmTasks('grunt-contrib-less');
-+ grunt.loadNpmTasks('grunt-contrib-uglify', '/usr/lib/nodejs');
-+ grunt.loadNpmTasks('grunt-contrib-concat', '/usr/lib/nodejs');
-
-- grunt.registerTask('test', ['jshint']);
--
-- grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less']);
--
-- grunt.registerTask('styles', ['less']);
-+ grunt.registerTask('default', ['concat', 'uglify']);
-
- };
---- searx-0.13.1+dfsg1.orig/searx/static/themes/simple/gruntfile.js
-+++ searx-0.13.1+dfsg1/searx/static/themes/simple/gruntfile.js
-@@ -58,12 +58,6 @@ module.exports = function(grunt) {
- production: {
- options: {
- paths: ["less"],
-- plugins: [
-- new (require('less-plugin-clean-css'))({
-- advanced: true,
-- compatibility: 'ie8'
-- })
-- ],
- banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
- },
- files: {
-@@ -137,15 +131,8 @@ module.exports = function(grunt) {
- }
- });
-
-- grunt.loadNpmTasks('grunt-contrib-watch');
-- grunt.loadNpmTasks('grunt-contrib-uglify');
-- grunt.loadNpmTasks('grunt-contrib-jshint');
-- grunt.loadNpmTasks('grunt-contrib-concat');
-- grunt.loadNpmTasks('grunt-contrib-less');
-- grunt.loadNpmTasks('grunt-contrib-cssmin');
-- grunt.loadNpmTasks('grunt-webfont');
-+ grunt.loadNpmTasks('grunt-contrib-uglify', '/usr/lib/nodejs');
-+ grunt.loadNpmTasks('grunt-contrib-concat', '/usr/lib/nodejs');
-
-- grunt.registerTask('test', ['jshint']);
--
-- grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less:development', 'less:production']);
-+ grunt.registerTask('default', ['concat', 'uglify']);
- };
---- searx-0.13.1+dfsg1.orig/searx/static/themes/simple/js/searx_src/autocomplete.js
-+++ searx-0.13.1+dfsg1/searx/static/themes/simple/js/searx_src/autocomplete.js
-@@ -1,4 +1,51 @@
--(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
-+(function(f){
-+ if(typeof exports=== "object" && typeof module !== "undefined") {
-+ module.exports = f()
-+ } else if(typeof define === "function" && define.amd) {
-+ define([], f)
-+ }else{
-+ var g;
-+ if(typeof window !== "undefined") {
-+ g = window
-+ } else if(typeof global !== "undefined") {
-+ g = global
-+ } else if(typeof self !== "undefined") {
-+ g = self
-+ } else {
-+ g = this
-+ }
-+ g.AutoComplete = f()
-+ }
-+})(function(){
-+ var define, module, exports;
-+ return (function e(t, n, r){
-+ function s(o, u){
-+ if(!n[o]){
-+ if(!t[o]){
-+ var a = typeof require == "function" && require;
-+ if(!u && a)
-+ return a(o, !0);
-+ if(i)
-+ return i(o, !0);
-+ var f = new Error("Cannot find module '" + o + "'");
-+ throw f.code = "MODULE_NOT_FOUND", f
-+ }
-+ var l = n[o] = {
-+ exports:{}
-+ };
-+ t[o][0].call(l.exports,function(e) {
-+ var n = t[o][1][e];
-+ return s(n?n:e)
-+ }, l, l.exports, e, t, n, r)
-+ }
-+ return n[o].exports
-+ }
-+ var i = typeof require == "function" && require;
-+ for(var o = 0; o < r.length; o++)
-+ s(r[o]);
-+ return s
-+ })({
-+ 1:[function(require, module, exports){
- /*
- * @license MIT
- *
---- searx-0.13.1+dfsg1.orig/setup.py
-+++ searx-0.13.1+dfsg1/setup.py
-@@ -51,23 +51,9 @@ setup(
- },
- package_data={
- 'searx': [
-- 'settings.yml',
-- '../README.rst',
-- '../requirements.txt',
-- '../requirements-dev.txt',
- 'data/*',
- 'plugins/*/*',
-- 'static/*.*',
-- 'static/*/*.*',
-- 'static/*/*/*.*',
-- 'static/*/*/*/*.*',
-- 'static/*/*/*/*/*.*',
-- 'templates/*/*.*',
-- 'templates/*/*/*.*',
-- 'tests/*',
-- 'tests/*/*',
-- 'tests/*/*/*',
-- 'translations/*/*/*'
-+ 'translations/*/*/*.mo'
- ],
- },
-
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 7bb8252..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-debian-changes
diff --git a/manage.sh b/manage.sh
index b4f80e2..cf31bb5 100755
--- a/manage.sh
+++ b/manage.sh
@@ -1,11 +1,27 @@
#!/bin/sh
BASE_DIR="$(dirname -- "`readlink -f -- "$0"`")"
+export PATH="$BASE_DIR/node_modules/.bin":$PATH
+
+# the script can be sourced to update the PATH
+# see https://stackoverflow.com/questions/2683279/how-to-detect-if-a-script-is-being-sourced
+if [ $_ != $0 ]; then
+ unset BASE_DIR
+ # sourced : exit now
+ return
+fi
+
+# subshell
PYTHONPATH="$BASE_DIR"
SEARX_DIR="$BASE_DIR/searx"
ACTION="$1"
cd -- "$BASE_DIR"
+set -e
+
+#
+# Python
+#
update_packages() {
pip install --upgrade pip
@@ -27,7 +43,7 @@ install_geckodriver() {
if [ -z "$NOTFOUND" ]; then
return
fi
- GECKODRIVER_VERSION="v0.18.0"
+ GECKODRIVER_VERSION="v0.19.1"
PLATFORM="`python -c "import six; import platform; six.print_(platform.system().lower(), platform.architecture()[0])"`"
case "$PLATFORM" in
"linux 32bit" | "linux2 32bit") ARCH="linux32";;
@@ -58,6 +74,10 @@ install_geckodriver() {
chmod 777 -- "$GECKODRIVER_DIR/geckodriver"
}
+locales() {
+ pybabel compile -d "$SEARX_DIR/translations"
+}
+
pep8_check() {
echo '[!] Running pep8 check'
# ignored rules:
@@ -92,25 +112,16 @@ tests() {
set +e
}
-build_style() {
- lessc -x "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
-}
-styles() {
- echo '[!] Building styles'
- build_style themes/legacy/less/style.less themes/legacy/css/style.css
- build_style themes/legacy/less/style-rtl.less themes/legacy/css/style-rtl.css
- build_style themes/courgette/less/style.less themes/courgette/css/style.css
- build_style themes/courgette/less/style-rtl.less themes/courgette/css/style-rtl.css
- build_style less/bootstrap/bootstrap.less css/bootstrap.min.css
- build_style themes/pix-art/less/style.less themes/pix-art/css/style.css
- build_style themes/oscar/less/pointhi/oscar.less themes/oscar/css/pointhi.min.css
- build_style themes/oscar/less/logicodev/oscar.less themes/oscar/css/logicodev.min.css
- build_style themes/simple/less/style.less themes/simple/css/searx.min.css
- build_style themes/simple/less/style-rtl.less themes/simple/css/searx-rtl.min.css
-}
+#
+# Web
+#
npm_packages() {
+ echo '[!] install NPM packages'
+ cd -- "$BASE_DIR"
+ npm install less@2.7 less-plugin-clean-css grunt-cli
+
echo '[!] install NPM packages for oscar theme'
cd -- "$BASE_DIR/searx/static/themes/oscar"
npm install
@@ -120,6 +131,23 @@ npm_packages() {
npm install
}
+build_style() {
+ lessc --clean-css="--s1 --advanced --compatibility=ie9" "$BASE_DIR/searx/static/$1" "$BASE_DIR/searx/static/$2"
+}
+
+styles() {
+ echo '[!] Building legacy style'
+ build_style themes/legacy/less/style.less themes/legacy/css/style.css
+ build_style themes/legacy/less/style-rtl.less themes/legacy/css/style-rtl.css
+ echo '[!] Building courgette style'
+ build_style themes/courgette/less/style.less themes/courgette/css/style.css
+ build_style themes/courgette/less/style-rtl.less themes/courgette/css/style-rtl.css
+ echo '[!] Building pix-art style'
+ build_style themes/pix-art/less/style.less themes/pix-art/css/style.css
+ echo '[!] Building bootstrap style'
+ build_style less/bootstrap/bootstrap.less css/bootstrap.min.css
+}
+
grunt_build() {
echo '[!] Grunt build : oscar theme'
grunt --gruntfile "$SEARX_DIR/static/themes/oscar/gruntfile.js"
@@ -127,9 +155,9 @@ grunt_build() {
grunt --gruntfile "$SEARX_DIR/static/themes/simple/gruntfile.js"
}
-locales() {
- pybabel compile -d "$SEARX_DIR/translations"
-}
+#
+# Help
+#
help() {
[ -z "$1" ] || printf 'Error: %s\n' "$1"
@@ -137,19 +165,28 @@ help() {
Commands
========
- npm_packages - Download & install dependencies
- grunt_build - Build js files
help - This text
+
+ Build requirements
+ ------------------
+ update_packages - Check & update production dependency changes
+ update_dev_packages - Check & update development and production dependency changes
+ install_geckodriver - Download & install geckodriver if not already installed (required for robot_tests)
+ npm_packages - Download & install npm dependencies (source manage.sh to update the PATH)
+
+ Build
+ -----
locales - Compile locales
- pep8_check - Pep8 validation
- py_test_coverage - Unit test coverage
- robot_tests - Run selenium tests
styles - Build less files
- tests - Run all python tests (pep8, unit, robot)
+ grunt_build - Build files for themes
+
+ Tests
+ -----
unit_tests - Run unit tests
- update_dev_packages - Check & update development and production dependency changes
- update_packages - Check & update dependency changes
- install_geckodriver - Download & install geckodriver if not already installed (required for robot_tests)
+ pep8_check - Pep8 validation
+ robot_tests - Run selenium tests
+ tests - Run all python tests (pep8, unit, robot_tests)
+ py_test_coverage - Unit test coverage
"
}
diff --git a/searx/__init__.py b/searx/__init__.py
index a57588c..b1010f2 100644
--- a/searx/__init__.py
+++ b/searx/__init__.py
@@ -19,6 +19,7 @@ import certifi
import logging
from os import environ
from os.path import realpath, dirname, join, abspath, isfile
+from io import open
from ssl import OPENSSL_VERSION_INFO, OPENSSL_VERSION
try:
from yaml import load
@@ -50,7 +51,7 @@ if not settings_path:
raise Exception('settings.yml not found')
# load settings
-with open(settings_path) as settings_yaml:
+with open(settings_path, 'r', encoding='utf-8') as settings_yaml:
settings = load(settings_yaml)
'''
@@ -87,3 +88,6 @@ if OPENSSL_VERSION_INFO[0:3] < (1, 0, 2):
logger.warning('You are using an old openssl version({0}), please upgrade above 1.0.2!'.format(OPENSSL_VERSION))
logger.info('Initialisation done')
+
+if 'SEARX_SECRET' in environ:
+ settings['server']['secret_key'] = environ['SEARX_SECRET']
diff --git a/searx/engines/__init__.py b/searx/engines/__init__.py
index 7a9cc56..af3cf81 100644
--- a/searx/engines/__init__.py
+++ b/searx/engines/__init__.py
@@ -19,6 +19,7 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
import sys
import threading
from os.path import realpath, dirname
+from io import open
from flask_babel import gettext
from operator import itemgetter
from json import loads
@@ -36,7 +37,7 @@ engines = {}
categories = {'general': []}
-languages = loads(open(engine_dir + '/../data/engines_languages.json').read())
+languages = loads(open(engine_dir + '/../data/engines_languages.json', 'r', encoding='utf-8').read())
engine_shortcuts = {}
engine_default_args = {'paging': False,
@@ -229,12 +230,12 @@ def load_engines(engine_list):
def initialize_engines(engine_list):
load_engines(engine_list)
- for engine in engines.items():
+ for engine_name, engine in engines.items():
if hasattr(engine, 'init'):
- init_fn = getattr(engine, engine_attr)
+ init_fn = getattr(engine, 'init')
def engine_init():
init_fn()
- logger.debug('%s engine initialized', engine_data['name'])
- logger.debug('Starting background initialization of %s engine', engine_data['name'])
+ logger.debug('%s engine initialized', engine_name)
+ logger.debug('Starting background initialization of %s engine', engine_name)
threading.Thread(target=engine_init).start()
diff --git a/searx/engines/archlinux.py b/searx/engines/archlinux.py
index cad06f8..245bc50 100644
--- a/searx/engines/archlinux.py
+++ b/searx/engines/archlinux.py
@@ -26,7 +26,7 @@ xpath_results = '//ul[@class="mw-search-results"]/li'
xpath_link = './/div[@class="mw-search-result-heading"]/a'
-# cut 'en' from 'en_US', 'de' from 'de_CH', and so on
+# cut 'en' from 'en-US', 'de' from 'de-CH', and so on
def locale_to_lang_code(locale):
if locale.find('-') >= 0:
locale = locale.split('-')[0]
@@ -36,7 +36,7 @@ def locale_to_lang_code(locale):
# wikis for some languages were moved off from the main site, we need to make
# requests to correct URLs to be able to get results in those languages
lang_urls = {
- 'all': {
+ 'en': {
'base': 'https://wiki.archlinux.org',
'search': '/index.php?title=Special:Search&offset={offset}&{query}'
},
@@ -67,7 +67,7 @@ lang_urls = {
def get_lang_urls(language):
if language in lang_urls:
return lang_urls[language]
- return lang_urls['all']
+ return lang_urls['en']
# Language names to build search requests for
diff --git a/searx/engines/asksteem.py b/searx/engines/asksteem.py
new file mode 100644
index 0000000..6738780
--- /dev/null
+++ b/searx/engines/asksteem.py
@@ -0,0 +1,44 @@
+"""
+ Asksteem (general)
+
+ @website https://asksteem.com/
+ @provide-api yes
+
+ @using-api yes
+ @results JSON (https://github.com/Hoxly/asksteem-docs/wiki)
+ @stable yes
+ @parse url, title, content
+"""
+
+from json import loads
+from searx.url_utils import urlencode
+
+# engine dependent config
+categories = ['general']
+paging = True
+language_support = False
+disabled = True
+
+# search-url
+search_url = 'https://api.asksteem.com/search?{params}'
+result_url = 'https://steemit.com/@{author}/{title}'
+
+
+# do search-request
+def request(query, params):
+ url = search_url.format(params=urlencode({'q': query, 'pg': params['pageno']}))
+ params['url'] = url
+ return params
+
+
+# get response from search-request
+def response(resp):
+ json = loads(resp.text)
+
+ results = []
+
+ for result in json.get('results', []):
+ results.append({'url': result_url.format(author=result['author'], title=result['permlink']),
+ 'title': result['title'],
+ 'content': result['summary']})
+ return results
diff --git a/searx/engines/bing.py b/searx/engines/bing.py
index 052d567..2e58d02 100644
--- a/searx/engines/bing.py
+++ b/searx/engines/bing.py
@@ -32,10 +32,7 @@ search_string = 'search?{query}&first={offset}'
def request(query, params):
offset = (params['pageno'] - 1) * 10 + 1
- if params['language'] != 'all':
- lang = params['language'].split('-')[0].upper()
- else:
- lang = 'EN'
+ lang = params['language'].split('-')[0].upper()
query = u'language:{} {}'.format(lang, query.decode('utf-8')).encode('utf-8')
diff --git a/searx/engines/bing_news.py b/searx/engines/bing_news.py
index b999b2a..c609a19 100644
--- a/searx/engines/bing_news.py
+++ b/searx/engines/bing_news.py
@@ -71,10 +71,7 @@ def request(query, params):
offset = (params['pageno'] - 1) * 10 + 1
- if params['language'] == 'all':
- language = 'en-US'
- else:
- language = params['language']
+ language = params['language']
params['url'] = _get_url(query, language, offset, params['time_range'])
diff --git a/searx/engines/bing_videos.py b/searx/engines/bing_videos.py
index bd91bce..312a82b 100644
--- a/searx/engines/bing_videos.py
+++ b/searx/engines/bing_videos.py
@@ -69,22 +69,11 @@ def response(resp):
dom = html.fromstring(resp.text)
for result in dom.xpath('//div[@class="dg_u"]'):
-
- # try to extract the url
- url_container = result.xpath('.//div[@class="sa_wrapper"]/@data-eventpayload')
- if len(url_container) > 0:
- url = loads(url_container[0])['purl']
- else:
- url = result.xpath('./a/@href')[0]
-
- # discard results that do not return an external url
- # very recent results sometimes don't return the video's url
- if url.startswith('/videos/search?'):
- continue
-
- title = extract_text(result.xpath('./a//div[@class="tl"]'))
- content = extract_text(result.xpath('.//div[@class="pubInfo"]'))
- thumbnail = result.xpath('.//div[@class="vthumb"]/img/@src')[0]
+ url = result.xpath('./div[@class="mc_vtvc"]/a/@href')[0]
+ url = 'https://bing.com' + url
+ title = extract_text(result.xpath('./div/a/div/div[@class="mc_vtvc_title"]/@title'))
+ content = extract_text(result.xpath('./div/a/div/div/div/div/text()'))
+ thumbnail = result.xpath('./div/a/div/div/img/@src')[0]
results.append({'url': url,
'title': title,
@@ -92,7 +81,6 @@ def response(resp):
'thumbnail': thumbnail,
'template': 'videos.html'})
- # first page ignores requested number of results
if len(results) >= number_of_results:
break
diff --git a/searx/engines/currency_convert.py b/searx/engines/currency_convert.py
index 1bb4e60..9c1c2f7 100644
--- a/searx/engines/currency_convert.py
+++ b/searx/engines/currency_convert.py
@@ -4,6 +4,7 @@ import os
import sys
import unicodedata
+from io import open
from datetime import datetime
if sys.version_info[0] == 3:
@@ -94,7 +95,7 @@ def load():
global db
current_dir = os.path.dirname(os.path.realpath(__file__))
- json_data = open(current_dir + "/../data/currencies.json").read()
+ json_data = open(current_dir + "/../data/currencies.json", 'r', encoding='utf-8').read()
db = json.loads(json_data)
diff --git a/searx/engines/dailymotion.py b/searx/engines/dailymotion.py
index fad7e59..cfa7679 100644
--- a/searx/engines/dailymotion.py
+++ b/searx/engines/dailymotion.py
@@ -32,10 +32,7 @@ supported_languages_url = 'https://api.dailymotion.com/languages'
# do search-request
def request(query, params):
- if params['language'] == 'all':
- locale = 'en-US'
- else:
- locale = params['language']
+ locale = params['language']
params['url'] = search_url.format(
query=urlencode({'search': query, 'localization': locale}),
diff --git a/searx/engines/duckduckgo.py b/searx/engines/duckduckgo.py
index 921e29f..6f8797f 100644
--- a/searx/engines/duckduckgo.py
+++ b/searx/engines/duckduckgo.py
@@ -44,9 +44,7 @@ content_xpath = './/a[@class="result__snippet"]'
# match query's language to a region code that duckduckgo will accept
def get_region_code(lang, lang_list=None):
# custom fixes for languages
- if lang == 'all':
- region_code = None
- elif lang[:2] == 'ja':
+ if lang[:2] == 'ja':
region_code = 'jp-jp'
elif lang[:2] == 'sl':
region_code = 'sl-sl'
@@ -82,12 +80,8 @@ def request(query, params):
offset = (params['pageno'] - 1) * 30
region_code = get_region_code(params['language'])
- if region_code:
- params['url'] = url.format(
- query=urlencode({'q': query, 'kl': region_code}), offset=offset, dc_param=offset)
- else:
- params['url'] = url.format(
- query=urlencode({'q': query}), offset=offset, dc_param=offset)
+ params['url'] = url.format(
+ query=urlencode({'q': query, 'kl': region_code}), offset=offset, dc_param=offset)
if params['time_range'] in time_range_dict:
params['url'] += time_range_url.format(range=time_range_dict[params['time_range']])
diff --git a/searx/engines/duckduckgo_images.py b/searx/engines/duckduckgo_images.py
index dbd78b0..7b0e726 100644
--- a/searx/engines/duckduckgo_images.py
+++ b/searx/engines/duckduckgo_images.py
@@ -53,12 +53,8 @@ def request(query, params):
safesearch = params['safesearch'] - 1
region_code = get_region_code(params['language'], lang_list=supported_languages)
- if region_code:
- params['url'] = images_url.format(
- query=urlencode({'q': query, 'l': region_code}), offset=offset, safesearch=safesearch, vqd=vqd)
- else:
- params['url'] = images_url.format(
- query=urlencode({'q': query}), offset=offset, safesearch=safesearch, vqd=vqd)
+ params['url'] = images_url.format(
+ query=urlencode({'q': query, 'l': region_code}), offset=offset, safesearch=safesearch, vqd=vqd)
return params
diff --git a/searx/engines/faroo.py b/searx/engines/faroo.py
index 7ce3a6c..4e8b567 100644
--- a/searx/engines/faroo.py
+++ b/searx/engines/faroo.py
@@ -40,10 +40,7 @@ def request(query, params):
offset = (params['pageno'] - 1) * number_of_results + 1
categorie = search_category.get(params['category'], 'web')
- if params['language'] == 'all':
- language = 'en'
- else:
- language = params['language'].split('_')[0]
+ language = params['language'].split('-')[0]
# if language is not supported, put it in english
if language != 'en' and\
diff --git a/searx/engines/gigablast.py b/searx/engines/gigablast.py
index 2bdc97f..ed9380e 100644
--- a/searx/engines/gigablast.py
+++ b/searx/engines/gigablast.py
@@ -33,7 +33,7 @@ search_string = 'search?{query}'\
'&qh=0'\
'&qlang={lang}'\
'&ff={safesearch}'\
- '&rxieu={rxieu}'\
+ '&rxiec={rxieu}'\
'&rand={rxikd}' # current unix timestamp
# specific xpath variables
@@ -49,12 +49,9 @@ supported_languages_url = 'https://gigablast.com/search?&rxikd=1'
def request(query, params):
offset = (params['pageno'] - 1) * number_of_results
- if params['language'] == 'all':
- language = 'xx'
- else:
- language = params['language'].replace('-', '_').lower()
- if language.split('-')[0] != 'zh':
- language = language.split('-')[0]
+ language = params['language'].replace('-', '_').lower()
+ if language.split('-')[0] != 'zh':
+ language = language.split('-')[0]
if params['safesearch'] >= 1:
safesearch = 1
diff --git a/searx/engines/google.py b/searx/engines/google.py
index de2717d..0a86783 100644
--- a/searx/engines/google.py
+++ b/searx/engines/google.py
@@ -9,6 +9,7 @@
# @parse url, title, content, suggestion
import re
+from flask_babel import gettext
from lxml import html, etree
from searx.engines.xpath import extract_text, extract_url
from searx import logger
@@ -164,7 +165,8 @@ def extract_text_from_dom(result, xpath):
def request(query, params):
offset = (params['pageno'] - 1) * 10
- if params['language'] == 'all':
+ # temporary fix until a way of supporting en-US is found
+ if params['language'] == 'en-US':
params['language'] = 'en-GB'
if params['language'][:2] == 'jv':
@@ -185,6 +187,8 @@ def request(query, params):
else:
google_hostname = default_hostname
+ # original format: ID=3e2b6616cee08557:TM=5556667580:C=r:IP=4.1.12.5-:S=23ASdf0soFgF2d34dfgf-_22JJOmHdfgg
+ params['cookies']['GOOGLE_ABUSE_EXEMPTION'] = 'x'
params['url'] = search_url.format(offset=offset,
query=urlencode({'q': query}),
hostname=google_hostname,
@@ -209,6 +213,9 @@ def response(resp):
if resp_url.netloc == 'sorry.google.com' or resp_url.path == '/sorry/IndexRedirect':
raise RuntimeWarning('sorry.google.com')
+ if resp_url.path.startswith('/sorry'):
+ raise RuntimeWarning(gettext('CAPTCHA required'))
+
# which hostname ?
google_hostname = resp.search_params.get('google_hostname')
google_url = "https://" + google_hostname
diff --git a/searx/engines/google_news.py b/searx/engines/google_news.py
index 8881d0d..8b8e717 100644
--- a/searx/engines/google_news.py
+++ b/searx/engines/google_news.py
@@ -50,9 +50,8 @@ def request(query, params):
params['url'] = search_url.format(query=urlencode({'q': query}),
search_options=urlencode(search_options))
- if params['language'] != 'all':
- language_array = params['language'].lower().split('-')
- params['url'] += '&lr=lang_' + language_array[0]
+ language_array = params['language'].lower().split('-')
+ params['url'] += '&lr=lang_' + language_array[0]
return params
diff --git a/searx/engines/json_engine.py b/searx/engines/json_engine.py
index eeae5c2..785b0c4 100644
--- a/searx/engines/json_engine.py
+++ b/searx/engines/json_engine.py
@@ -2,6 +2,7 @@ from collections import Iterable
from json import loads
from sys import version_info
from searx.url_utils import urlencode
+from searx.utils import to_string
if version_info[0] == 3:
unicode = str
@@ -111,14 +112,22 @@ def response(resp):
content = query(result, content_query)[0]
except:
content = ""
- results.append({'url': url, 'title': title, 'content': content})
+ results.append({
+ 'url': to_string(url),
+ 'title': to_string(title),
+ 'content': to_string(content),
+ })
else:
for url, title, content in zip(
query(json, url_query),
query(json, title_query),
query(json, content_query)
):
- results.append({'url': url, 'title': title, 'content': content})
+ results.append({
+ 'url': to_string(url),
+ 'title': to_string(title),
+ 'content': to_string(content),
+ })
if not suggestion_query:
return results
diff --git a/searx/engines/mediawiki.py b/searx/engines/mediawiki.py
index 0607ac9..c7b05ff 100644
--- a/searx/engines/mediawiki.py
+++ b/searx/engines/mediawiki.py
@@ -45,10 +45,7 @@ def request(query, params):
format_strings = list(Formatter().parse(base_url))
- if params['language'] == 'all':
- language = 'en'
- else:
- language = params['language'].split('-')[0]
+ language = params['language'].split('-')[0]
# format_string [('https://', 'language', '', None), ('.wikipedia.org/', None, None, None)]
if any(x[1] == 'language' for x in format_strings):
diff --git a/searx/engines/microsoft_academic.py b/searx/engines/microsoft_academic.py
new file mode 100644
index 0000000..9387b08
--- /dev/null
+++ b/searx/engines/microsoft_academic.py
@@ -0,0 +1,75 @@
+"""
+Microsoft Academic (Science)
+
+@website https://academic.microsoft.com
+@provide-api yes
+@using-api no
+@results JSON
+@stable no
+@parse url, title, content
+"""
+
+from datetime import datetime
+from json import loads
+from uuid import uuid4
+
+from searx.url_utils import urlencode
+from searx.utils import html_to_text
+
+categories = ['images']
+paging = True
+result_url = 'https://academic.microsoft.com/api/search/GetEntityResults?{query}'
+
+
+def request(query, params):
+ correlation_id = uuid4()
+ msacademic = uuid4()
+ time_now = datetime.now()
+
+ params['url'] = result_url.format(query=urlencode({'correlationId': correlation_id}))
+ params['cookies']['msacademic'] = str(msacademic)
+ params['cookies']['ai_user'] = 'vhd0H|{now}'.format(now=str(time_now))
+ params['method'] = 'POST'
+ params['data'] = {
+ 'Query': '@{query}@'.format(query=query),
+ 'Limit': 10,
+ 'Offset': params['pageno'] - 1,
+ 'Filters': '',
+ 'OrderBy': '',
+ 'SortAscending': False,
+ }
+
+ return params
+
+
+def response(resp):
+ results = []
+ response_data = loads(resp.text)
+
+ for result in response_data['results']:
+ url = _get_url(result)
+ title = result['e']['dn']
+ content = _get_content(result)
+ results.append({
+ 'url': url,
+ 'title': html_to_text(title),
+ 'content': html_to_text(content),
+ })
+
+ return results
+
+
+def _get_url(result):
+ if 's' in result['e']:
+ return result['e']['s'][0]['u']
+ return 'https://academic.microsoft.com/#/detail/{pid}'.format(pid=result['id'])
+
+
+def _get_content(result):
+ if 'd' in result['e']:
+ content = result['e']['d']
+ if len(content) > 300:
+ return content[:300] + '...'
+ return content
+
+ return ''
diff --git a/searx/engines/pdbe.py b/searx/engines/pdbe.py
index f784e10..2db9286 100644
--- a/searx/engines/pdbe.py
+++ b/searx/engines/pdbe.py
@@ -43,7 +43,7 @@ def construct_body(result):
title = result['title']
# construct content body
- content = """{title}<br />{authors} {journal} <strong>{volume}</strong>&nbsp;{page} ({year})"""
+ content = """{title} - {authors} {journal} ({volume}) {page} ({year})"""
# replace placeholders with actual content
try:
@@ -84,15 +84,18 @@ def response(resp):
continue
if result['status'] == 'OBS':
# expand title to add some sort of warning message
- title = gettext('{title}&nbsp;(OBSOLETE)').format(title=result['title'])
- superseded_url = pdbe_entry_url.format(pdb_id=result['superseded_by'])
+ title = gettext('{title} (OBSOLETE)').format(title=result['title'])
+ try:
+ superseded_url = pdbe_entry_url.format(pdb_id=result['superseded_by'])
+ except:
+ continue
# since we can't construct a proper body from the response, we'll make up our own
msg_superseded = gettext("This entry has been superseded by")
- content = '<em>{msg_superseded} \<a href="{url}">{pdb_id}</a></em>'.format(
+ content = '{msg_superseded}: {url} ({pdb_id})'.format(
msg_superseded=msg_superseded,
url=superseded_url,
- pdb_id=result['superseded_by'], )
+ pdb_id=result['superseded_by'])
# obsoleted entries don't have preview images
img_src = None
diff --git a/searx/engines/photon.py b/searx/engines/photon.py
index 15236f6..2408419 100644
--- a/searx/engines/photon.py
+++ b/searx/engines/photon.py
@@ -35,10 +35,9 @@ def request(query, params):
search_string.format(query=urlencode({'q': query}),
limit=number_of_results)
- if params['language'] != 'all':
- language = params['language'].split('_')[0]
- if language in supported_languages:
- params['url'] = params['url'] + "&lang=" + language
+ language = params['language'].split('-')[0]
+ if language in supported_languages:
+ params['url'] = params['url'] + "&lang=" + language
# using searx User-Agent
params['headers']['User-Agent'] = searx_useragent()
diff --git a/searx/engines/pubmed.py b/searx/engines/pubmed.py
index 6451f14..055f092 100644
--- a/searx/engines/pubmed.py
+++ b/searx/engines/pubmed.py
@@ -84,15 +84,18 @@ def response(resp):
content = content[0:300] + "..."
# TODO: center snippet on query term
- publishedDate = datetime.strptime(entry.xpath('.//DateCreated/Year')[0].text
- + '-' + entry.xpath('.//DateCreated/Month')[0].text
- + '-' + entry.xpath('.//DateCreated/Day')[0].text, '%Y-%m-%d')
-
res_dict = {'url': url,
'title': title,
- 'publishedDate': publishedDate,
'content': content}
+ try:
+ publishedDate = datetime.strptime(entry.xpath('.//DateCreated/Year')[0].text
+ + '-' + entry.xpath('.//DateCreated/Month')[0].text
+ + '-' + entry.xpath('.//DateCreated/Day')[0].text, '%Y-%m-%d')
+ res_dict['publishedDate'] = publishedDate
+ except:
+ pass
+
results.append(res_dict)
return results
diff --git a/searx/engines/qwant.py b/searx/engines/qwant.py
index 3d266e2..408c2b3 100644
--- a/searx/engines/qwant.py
+++ b/searx/engines/qwant.py
@@ -44,18 +44,17 @@ def request(query, params):
query=urlencode({'q': query}),
offset=offset)
- # add language tag if specified
- if params['language'] != 'all':
- if params['language'] == 'no' or params['language'].startswith('no-'):
- params['language'] = params['language'].replace('no', 'nb', 1)
- if params['language'].find('-') < 0:
- # tries to get a country code from language
- for lang in supported_languages:
- lc = lang.split('-')
- if params['language'] == lc[0]:
- params['language'] = lang
- break
- params['url'] += '&locale=' + params['language'].replace('-', '_').lower()
+ # add language tag
+ if params['language'] == 'no' or params['language'].startswith('no-'):
+ params['language'] = params['language'].replace('no', 'nb', 1)
+ if params['language'].find('-') < 0:
+ # tries to get a country code from language
+ for lang in supported_languages:
+ lc = lang.split('-')
+ if params['language'] == lc[0]:
+ params['language'] = lang
+ break
+ params['url'] += '&locale=' + params['language'].replace('-', '_').lower()
return params
diff --git a/searx/engines/startpage.py b/searx/engines/startpage.py
index 314b7b9..3e06759 100644
--- a/searx/engines/startpage.py
+++ b/searx/engines/startpage.py
@@ -45,9 +45,8 @@ def request(query, params):
params['data'] = {'query': query,
'startat': offset}
- # set language if specified
- if params['language'] != 'all':
- params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])
+ # set language
+ params['data']['with_language'] = ('lang_' + params['language'].split('-')[0])
return params
diff --git a/searx/engines/subtitleseeker.py b/searx/engines/subtitleseeker.py
index 2cbc991..118504f 100644
--- a/searx/engines/subtitleseeker.py
+++ b/searx/engines/subtitleseeker.py
@@ -48,7 +48,7 @@ def response(resp):
search_lang = 'Farsi'
elif resp.search_params['language'] == 'pt-BR':
search_lang = 'Brazilian'
- elif resp.search_params['language'] != 'all':
+ else:
search_lang = [lc[3]
for lc in language_codes
if lc[0].split('-')[0] == resp.search_params['language'].split('-')[0]]
diff --git a/searx/engines/swisscows.py b/searx/engines/swisscows.py
index 00346a7..45e9d87 100644
--- a/searx/engines/swisscows.py
+++ b/searx/engines/swisscows.py
@@ -35,10 +35,7 @@ regex_img_url_remove_start = re.compile(b'^https?://i\.swisscows\.ch/\?link=')
# do search-request
def request(query, params):
- if params['language'] == 'all':
- ui_language = 'browser'
- region = 'browser'
- elif params['language'].split('-')[0] == 'no':
+ if params['language'].split('-')[0] == 'no':
region = 'nb-NO'
else:
region = params['language']
diff --git a/searx/engines/twitter.py b/searx/engines/twitter.py
index d2a8d20..8641167 100644
--- a/searx/engines/twitter.py
+++ b/searx/engines/twitter.py
@@ -37,12 +37,7 @@ timestamp_xpath = './/span[contains(@class,"_timestamp")]'
# do search-request
def request(query, params):
params['url'] = search_url + urlencode({'q': query})
-
- # set language if specified
- if params['language'] != 'all':
- params['cookies']['lang'] = params['language'].split('-')[0]
- else:
- params['cookies']['lang'] = 'en'
+ params['cookies']['lang'] = params['language'].split('-')[0]
return params
diff --git a/searx/engines/wikidata.py b/searx/engines/wikidata.py
index be21746..1f31a1f 100644
--- a/searx/engines/wikidata.py
+++ b/searx/engines/wikidata.py
@@ -57,8 +57,6 @@ calendar_name_xpath = './/sup[contains(@class,"wb-calendar-name")]'
def request(query, params):
language = params['language'].split('-')[0]
- if language == 'all':
- language = 'en'
params['url'] = url_search.format(
query=urlencode({'label': query, 'language': language}))
@@ -71,8 +69,6 @@ def response(resp):
wikidata_ids = html.xpath(wikidata_ids_xpath)
language = resp.search_params['language'].split('-')[0]
- if language == 'all':
- language = 'en'
# TODO: make requests asynchronous to avoid timeout when result_count > 1
for wikidata_id in wikidata_ids[:result_count]:
diff --git a/searx/engines/wikipedia.py b/searx/engines/wikipedia.py
index db2fdc0..fe82f51 100644
--- a/searx/engines/wikipedia.py
+++ b/searx/engines/wikipedia.py
@@ -31,7 +31,7 @@ supported_languages_url = 'https://meta.wikimedia.org/wiki/List_of_Wikipedias'
# set language in base_url
def url_lang(lang):
lang = lang.split('-')[0]
- if lang == 'all' or lang not in supported_languages:
+ if lang not in supported_languages:
language = 'en'
else:
language = lang
diff --git a/searx/engines/yacy.py b/searx/engines/yacy.py
index a62a129..7c307ce 100644
--- a/searx/engines/yacy.py
+++ b/searx/engines/yacy.py
@@ -51,9 +51,7 @@ def request(query, params):
limit=number_of_results,
search_type=search_type)
- # add language tag if specified
- if params['language'] != 'all':
- params['url'] += '&lr=lang_' + params['language'].split('-')[0]
+ params['url'] += '&lr=lang_' + params['language'].split('-')[0]
return params
@@ -76,8 +74,17 @@ def response(resp):
for result in search_results[0].get('items', []):
# parse image results
if result.get('image'):
+
+ result_url = ''
+ if 'url' in result:
+ result_url = result['url']
+ elif 'link' in result:
+ result_url = result['link']
+ else:
+ continue
+
# append result
- results.append({'url': result['url'],
+ results.append({'url': result_url,
'title': result['title'],
'content': '',
'img_src': result['image'],
diff --git a/searx/engines/yahoo.py b/searx/engines/yahoo.py
index 5387aaf..626a398 100644
--- a/searx/engines/yahoo.py
+++ b/searx/engines/yahoo.py
@@ -71,9 +71,7 @@ def _get_url(query, offset, language, time_range):
def _get_language(params):
- if params['language'] == 'all':
- return 'en'
- elif params['language'][:2] == 'zh':
+ if params['language'][:2] == 'zh':
if params['language'] == 'zh' or params['language'] == 'zh-CH':
return 'szh'
else:
diff --git a/searx/engines/yahoo_news.py b/searx/engines/yahoo_news.py
index ae54a4a..69e9aef 100644
--- a/searx/engines/yahoo_news.py
+++ b/searx/engines/yahoo_news.py
@@ -38,10 +38,7 @@ suggestion_xpath = '//div[contains(@class,"VerALSOTRY")]//a'
def request(query, params):
offset = (params['pageno'] - 1) * 10 + 1
- if params['language'] == 'all':
- language = 'en'
- else:
- language = params['language'].split('_')[0]
+ language = params['language'].split('-')[0]
params['url'] = search_url.format(offset=offset,
query=urlencode({'p': query}),
diff --git a/searx/engines/youtube_api.py b/searx/engines/youtube_api.py
index 6de18aa..f8bc353 100644
--- a/searx/engines/youtube_api.py
+++ b/searx/engines/youtube_api.py
@@ -34,9 +34,7 @@ def request(query, params):
params['url'] = search_url.format(query=urlencode({'q': query}),
api_key=api_key)
- # add language tag if specified
- if params['language'] != 'all':
- params['url'] += '&relevanceLanguage=' + params['language'].split('-')[0]
+ params['url'] += '&relevanceLanguage=' + params['language'].split('-')[0]
return params
diff --git a/searx/preferences.py b/searx/preferences.py
index dde4f09..70ccbb7 100644
--- a/searx/preferences.py
+++ b/searx/preferences.py
@@ -12,7 +12,6 @@ if version[0] == '3':
COOKIE_MAX_AGE = 60 * 60 * 24 * 365 * 5 # 5 years
LANGUAGE_CODES = [l[0] for l in languages]
-LANGUAGE_CODES.append('all')
DISABLED = 0
ENABLED = 1
DOI_RESOLVERS = list(settings['doi_resolvers'])
@@ -305,6 +304,13 @@ class Preferences(object):
elif user_setting_name == 'disabled_plugins':
self.plugins.parse_cookie((input_data.get('disabled_plugins', ''),
input_data.get('enabled_plugins', '')))
+ elif not any(user_setting_name.startswith(x) for x in [
+ 'enabled_',
+ 'disabled_',
+ 'engine_',
+ 'category_',
+ 'plugin_']):
+ self.unknown_params[user_setting_name] = user_setting
def parse_form(self, input_data):
disabled_engines = []
@@ -329,6 +335,8 @@ class Preferences(object):
def get_value(self, user_setting_name):
if user_setting_name in self.key_value_settings:
return self.key_value_settings[user_setting_name].get_value()
+ if user_setting_name in self.unknown_params:
+ return self.unknown_params[user_setting_name]
def save(self, resp):
for user_setting_name, user_setting in self.key_value_settings.items():
diff --git a/searx/query.py b/searx/query.py
index 7acdd54..6e5f2e8 100644
--- a/searx/query.py
+++ b/searx/query.py
@@ -51,7 +51,7 @@ class RawTextQuery(object):
self.query_parts = []
# split query, including whitespaces
- raw_query_parts = re.split(r'(\s+)', self.query)
+ raw_query_parts = re.split(r'(\s+)' if isinstance(self.query, str) else b'(\s+)', self.query)
parse_next = True
@@ -73,11 +73,6 @@ class RawTextQuery(object):
if query_part[0] == ':':
lang = query_part[1:].lower().replace('_', '-')
- # user may set a valid, yet not selectable language
- if VALID_LANGUAGE_CODE.match(lang):
- self.languages.append(lang)
- parse_next = True
-
# check if any language-code is equal with
# declared language-codes
for lc in language_codes:
@@ -85,16 +80,25 @@ class RawTextQuery(object):
# if correct language-code is found
# set it as new search-language
- if lang == lang_id\
- or lang_id.startswith(lang)\
- or lang == lang_name\
- or lang == english_name\
- or lang.replace('-', ' ') == country:
- parse_next = True
- self.languages.append(lang_id)
- # to ensure best match (first match is not necessarily the best one)
- if lang == lang_id:
- break
+ if (lang == lang_id
+ or lang == lang_name
+ or lang == english_name
+ or lang.replace('-', ' ') == country)\
+ and lang not in self.languages:
+ parse_next = True
+ lang_parts = lang_id.split('-')
+ if len(lang_parts) == 2:
+ self.languages.append(lang_parts[0] + '-' + lang_parts[1].upper())
+ else:
+ self.languages.append(lang_id)
+ # to ensure best match (first match is not necessarily the best one)
+ if lang == lang_id:
+ break
+
+ # user may set a valid, yet not selectable language
+ if not self.languages and VALID_LANGUAGE_CODE.match(lang):
+ self.languages.append(lang)
+ parse_next = True
# this force a engine or category
if query_part[0] == '!' or query_part[0] == '?':
diff --git a/searx/results.py b/searx/results.py
index 1939b94..cb204a6 100644
--- a/searx/results.py
+++ b/searx/results.py
@@ -170,10 +170,16 @@ class ResultContainer(object):
self.paging = True
for i, result in enumerate(results):
+ if 'url' in result and not isinstance(result['url'], basestring):
+ continue
try:
result['url'] = result['url'].decode('utf-8')
except:
pass
+ if 'title' in result and not isinstance(result['title'], basestring):
+ continue
+ if 'content' in result and not isinstance(result['content'], basestring):
+ continue
position = i + 1
self._merge_result(result, position)
diff --git a/searx/search.py b/searx/search.py
index 71d2072..b523c27 100644
--- a/searx/search.py
+++ b/searx/search.py
@@ -24,7 +24,7 @@ from flask_babel import gettext
import requests.exceptions
import searx.poolrequests as requests_lib
from searx.engines import (
- categories, engines
+ categories, engines, settings
)
from searx.answerers import ask
from searx.utils import gen_useragent
@@ -135,7 +135,10 @@ def search_one_request_safe(engine_name, query, request_params, result_container
.format(engine_name, search_duration, timeout_limit, e))
requests_exception = True
else:
- result_container.add_unresponsive_engine((engine_name, gettext('unexpected crash')))
+ result_container.add_unresponsive_engine((
+ engine_name,
+ u'{0}: {1}'.format(gettext('unexpected crash'), e),
+ ))
# others errors
logger.exception('engine {0} : exception : {1}'.format(engine_name, e))
@@ -217,6 +220,10 @@ def get_search_query_from_webapp(preferences, form):
else:
query_lang = preferences.get_value('language')
+ # provides backwards compatibility for requests using old language default
+ if query_lang == 'all':
+ query_lang = settings['search']['language']
+
# check language
if not VALID_LANGUAGE_CODE.match(query_lang):
raise SearxParameterException('language', query_lang)
diff --git a/searx/settings.yml b/searx/settings.yml
index dacd7cd..32b1b3d 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -5,7 +5,7 @@ general:
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
- language : "all"
+ language : "en-US"
server:
port : 8888
@@ -16,8 +16,8 @@ server:
http_protocol_version : "1.0" # 1.0 and 1.1 are supported
ui:
- static_path : "/usr/share/python3-searx/static" # Custom static path - leave it blank if you didn't change
- templates_path : "/usr/share/python3-searx/templates" # Custom templates path - leave it blank if you didn't change
+ static_path : "" # Custom static path - leave it blank if you didn't change
+ templates_path : "" # Custom templates path - leave it blank if you didn't change
default_theme : oscar # ui theme
default_locale : "" # Default interface locale - leave blank to detect from browser information or use codes from the 'locales' config section
@@ -66,6 +66,10 @@ engines:
categories : science
timeout : 4.0
+ - name : asksteem
+ engine : asksteem
+ shortcut : as
+
- name : base
engine : base
shortcut : bs
@@ -398,15 +402,7 @@ engines:
shortcut : lo
- name : microsoft academic
- engine : json_engine
- paging : True
- search_url : https://academic.microsoft.com/api/search/GetEntityResults?query=%40{query}%40&filters=&offset={pageno}&limit=8&correlationId=undefined
- results_query : results
- url_query : u
- title_query : dn
- content_query : d
- page_size : 8
- first_page_num : 0
+ engine : microsoft_academic
categories : science
shortcut : ma
@@ -719,6 +715,7 @@ locales:
eo : Esperanto (Esperanto)
es : Español (Spanish)
fi : Suomi (Finnish)
+ fil : Wikang Filipino (Filipino)
fr : Français (French)
he : עברית (Hebrew)
hr : Hrvatski (Croatian)
@@ -737,6 +734,7 @@ locales:
tr : Türkçe (Turkish)
uk : українська мова (Ukrainian)
zh : 中文 (Chinese)
+ zh_TW : 國語 (Taiwanese Mandarin)
doi_resolvers :
oadoi.org : 'https://oadoi.org/'
diff --git a/searx/settings_robot.yml b/searx/settings_robot.yml
index 070a0ed..e5f163a 100644
--- a/searx/settings_robot.yml
+++ b/searx/settings_robot.yml
@@ -5,7 +5,7 @@ general:
search:
safe_search : 0
autocomplete : ""
- language: "all"
+ language: "en-US"
server:
port : 11111
diff --git a/searx/static/plugins/js/search_on_category_select.js b/searx/static/plugins/js/search_on_category_select.js
index a76fd12..1c42d9e 100644
--- a/searx/static/plugins/js/search_on_category_select.js
+++ b/searx/static/plugins/js/search_on_category_select.js
@@ -10,7 +10,7 @@ $(document).ready(function() {
}
return false;
});
- $('#time-range > option').click(function(e) {
+ $('#time-range').change(function(e) {
if($('#q').val()) {
$('#search_form').submit();
}
diff --git a/searx/static/themes/oscar/gruntfile.js b/searx/static/themes/oscar/gruntfile.js
index d5abbb5..5913994 100644
--- a/searx/static/themes/oscar/gruntfile.js
+++ b/searx/static/themes/oscar/gruntfile.js
@@ -37,20 +37,22 @@ module.exports = function(grunt) {
less: {
development: {
options: {
- paths: ["less/pointhi", "less/logicodev"]
+ paths: ["less/pointhi", "less/logicodev", "less/logicodev-dark"]
//banner: '/*! less/oscar/oscar.css | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
},
files: {"css/pointhi.css": "less/pointhi/oscar.less",
- "css/logicodev.css": "less/logicodev/oscar.less"}
+ "css/logicodev.css": "less/logicodev-dark/oscar.less",
+ "css/logicodev-dark.css": "less/logicodev/oscar.less"}
},
production: {
options: {
- paths: ["less/pointhi", "less/logicodev"],
+ paths: ["less/pointhi", "less/logicodev", "less/logicodev-dark"],
//banner: '/*! less/oscar/oscar.css | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n',
cleancss: true
},
files: {"css/pointhi.min.css": "less/pointhi/oscar.less",
- "css/logicodev.min.css": "less/logicodev/oscar.less"}
+ "css/logicodev.min.css": "less/logicodev/oscar.less",
+ "css/logicodev-dark.min.css": "less/logicodev-dark/oscar.less"}
},
/*
// built with ./manage.sh styles
@@ -79,9 +81,16 @@ module.exports = function(grunt) {
}
});
- grunt.loadNpmTasks('grunt-contrib-uglify', '/usr/lib/nodejs');
- grunt.loadNpmTasks('grunt-contrib-concat', '/usr/lib/nodejs');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.loadNpmTasks('grunt-contrib-concat');
+ grunt.loadNpmTasks('grunt-contrib-less');
- grunt.registerTask('default', ['concat', 'uglify']);
+ grunt.registerTask('test', ['jshint']);
+
+ grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less']);
+
+ grunt.registerTask('styles', ['less']);
};
diff --git a/searx/static/themes/oscar/less/logicodev-dark/oscar.less b/searx/static/themes/oscar/less/logicodev-dark/oscar.less
new file mode 100644
index 0000000..804dd76
--- /dev/null
+++ b/searx/static/themes/oscar/less/logicodev-dark/oscar.less
@@ -0,0 +1,245 @@
+@import "../logicodev/variables.less";
+@import "../logicodev/footer.less";
+@import "../logicodev/checkbox.less";
+@import "../logicodev/onoff.less";
+@import "../logicodev/results.less";
+@import "../logicodev/infobox.less";
+@import "../logicodev/search.less";
+@import "../logicodev/advanced.less";
+@import "../logicodev/cursor.less";
+@import "../logicodev/code.less";
+@import "../logicodev/preferences.less";
+
+/*Global*/
+body {
+ background:#1d1f21 none !important;
+ color:#D5D8D7 !important;
+}
+
+a {
+ color:#41a2ce !important;
+ text-decoration: none !important;
+}
+
+a:hover {
+ color:#5F89AC !important;
+}
+
+input, button, textarea, select {
+ border: 1px solid #282a2e !important;
+ background-color: #444 !important;
+ color: #BBB !important;
+}
+
+input:focus, button:focus, textarea:focus, select:focus {
+ border: 1px solid #C5C8C6 !important;
+ box-shadow: initial !important;
+}
+
+div#advanced-search-container div#categories label{
+ background:none;
+ border: 1px solid #282a2e;
+}
+
+ul.nav li a {
+ border: 0 !important;
+ border-bottom: 1px solid #4d3f43 !important;
+}
+
+#categories *, .modal-wrapper * {
+ background:#1d1f21 none !important;
+ color:#D5D8D7 !important;
+}
+
+#categories *, {
+ border: 1px solid #3d3f43 !important;
+}
+
+#categories *:checked + label {
+ border-bottom: 4px solid #3d9f94 !important;
+}
+
+.result-content {
+ color:#B5B8B7 !important;
+}
+
+.external-link {
+ color:#35B887 !important;
+}
+
+.table-striped tr td, .table-striped tr th {
+ border-color: #4d3f43 !important;
+}
+
+.highlight {
+ background: #333333 !important;
+}
+
+/*nav*/
+.navbar{
+ background:#1d1f21 none;
+ border: none;
+}
+
+.navbar .active, .menu {
+ background: none !important;
+}
+
+.label-default {
+ background: none;
+ color: #BBB;
+}
+
+.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus, .nav-tabs.nav-justified > .active > a{
+ background-color: #282a2e !important;
+
+}
+
+/*Search Page*/
+.result-default:hover, .result-code:hover, .result-torrent:hover, .result-videos:hover, .result-map:hover {
+ background-color: #222426;
+}
+
+/*buttons*/
+.btn {
+ color: #BBB;
+ background-color: #444 ;
+ border: 1px solid #282a2e;
+}
+
+.btn:hover {
+ color:#444 !important;
+ background-color: #BBB !important;
+}
+
+.btn-primary.active {
+ color: #C5C8C6;
+ background-color: #5F89AC;
+ border-color: #5F89AC;
+}
+
+/*Right Pannels*/
+.panel {
+ border: 1px solid #111;
+ background: none;
+}
+
+.panel-heading {
+ color: #C5C8C6 !important;
+ background: #282a2e !important;
+ border-bottom: none;
+}
+
+.panel-body {
+ color: #C5C8C6 !important;
+ background: #1d1f21 !important;
+ border-color: #111 !important;
+}
+
+p.btn.btn-default{
+ background: none;
+}
+
+.table-striped>tbody>tr:nth-child(odd)>td, .table-striped>tbody>tr:nth-child(odd)>th, .table-striped>thead>tr:nth-child(odd)>th {
+ background:#2d2f32 none !important;
+ color:#D5D8D7 !important;
+}
+
+.label-success {
+ background:#1d6f42 none !important;
+}
+
+.label-danger {
+ background:#ad1f12 none !important;
+}
+
+.searx-navbar {
+ background: #333334;
+ height: 2.3rem;
+ font-size: 1.3rem;
+ line-height: 1.3rem;
+ padding: 0.5rem;
+ font-weight: bold;
+ margin-bottom: 0.8rem;
+
+ a, a:hover {
+ margin-right: 2.0rem;
+ color: white;
+ text-decoration: none;
+ }
+
+ .instance a {
+ color: @light-green;
+ margin-left: 2.0rem;
+ }
+}
+
+#main-logo {
+ margin-top: 20vh;
+ margin-bottom: 25px;
+
+ & > img {
+ max-width: 350px;
+ width: 80%;
+ }
+}
+
+.onoffswitch-inner:before, .onoffswitch-inner:after {
+ background:#1d1f21 none !important;
+}
+
+.onoffswitch-switch, .onoffswitch-label {
+ border: 2px solid #3d3f43 !important;
+}
+
+.nav>li>a:hover, .nav>li>a:focus {
+ background-color: #3d3f43 !important;
+}
+
+/*Images search*/
+.img-thumbnail, .thumbnail {
+ padding: 0px;
+ line-height: 1.42857143;
+ background: none;
+ border: none;
+}
+
+.modal-content {
+ background:#1d1f21 none !important;
+}
+
+/*Preferences*/
+
+.table > thead > tr > td.danger, .table > tbody > tr > td.danger, .table > tfoot > tr > td.danger, .table > thead > tr > th.danger, .table > tbody > tr > th.danger, .table > tfoot > tr > th.danger, .table > thead > tr.danger > td, .table > tbody > tr.danger > td, .table > tfoot > tr.danger > td, .table > thead > tr.danger > th, .table > tbody > tr.danger > th, .table > tfoot > tr.danger > th {
+ background: RGBA(240, 0, 0, 0.56) !important;
+ color: #C5C8C6 !important;
+}
+
+.table-hover > tbody > tr > td.danger:hover, .table-hover > tbody > tr > th.danger:hover, .table-hover > tbody > tr.danger:hover > td, .table-hover > tbody > tr:hover > .danger, .table-hover > tbody > tr.danger:hover > th {
+ background: RGBA(237, 59, 59, 0.61) !important;
+ color: #C5C8C6 !important;
+}
+
+.table-hover > tbody > tr:hover > td, .table-hover > tbody > tr:hover > th {
+ background: rgb(102, 105, 110) !important;
+}
+
+.btn-success {
+ color: #C5C8C6;
+ background: #449d44;
+}
+
+.btn-danger {
+ color: #C5C8C6;
+ background: #d9534f;
+
+}
+
+.well {
+ background: #444;
+ border-color: #282a2e;
+}
+
+.highlight {
+ background-color: transparent !important;
+}
diff --git a/searx/static/themes/oscar/less/logicodev/results.less b/searx/static/themes/oscar/less/logicodev/results.less
index b16b3c2..a64dc7d 100644
--- a/searx/static/themes/oscar/less/logicodev/results.less
+++ b/searx/static/themes/oscar/less/logicodev/results.less
@@ -44,6 +44,7 @@
.external-link {
color: @dark-green;
font-size: 12px;
+ margin-bottom: 15px;
a {
margin-right: 3px;
diff --git a/searx/static/themes/oscar/less/pointhi/results.less b/searx/static/themes/oscar/less/pointhi/results.less
index e7a536a..13266c0 100644
--- a/searx/static/themes/oscar/less/pointhi/results.less
+++ b/searx/static/themes/oscar/less/pointhi/results.less
@@ -33,12 +33,12 @@
// image formating of results
.result-images {
float: left !important;
+ height: 138px;
}
.img-thumbnail {
margin: 5px;
max-height: 128px;
- min-height: 128px;
}
// video formating of results
diff --git a/searx/static/themes/simple/fonts/ion.css b/searx/static/themes/simple/fonts/ion.css
deleted file mode 100644
index b1b599a..0000000
--- a/searx/static/themes/simple/fonts/ion.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/* Generated by grunt-webfont */
-
-
-@font-face {
- font-family:"ion";
- src:url("../fonts/ion.eot?94af7082ea096aefe3a7b6642834716e");
- src:url("../fonts/ion.eot?#iefix") format("embedded-opentype"),
- url("../fonts/ion.woff2?94af7082ea096aefe3a7b6642834716e") format("woff2"),
- url("../fonts/ion.woff?94af7082ea096aefe3a7b6642834716e") format("woff"),
- url("../fonts/ion.ttf?94af7082ea096aefe3a7b6642834716e") format("truetype"),
- url("../fonts/ion.svg?94af7082ea096aefe3a7b6642834716e#ion") format("svg");
- font-weight:normal;
- font-style:normal;
-}
-
-.ion-icon {
-
- font-family:"ion";
-
- display:inline-block;
- vertical-align:middle;
- line-height:1;
- font-weight:normal;
- font-style:normal;
- speak:none;
- text-decoration:inherit;
- text-transform:none;
- text-rendering:auto;
- -webkit-font-smoothing:antialiased;
- -moz-osx-font-smoothing:grayscale;
-}
-
-
-/* Icons */
-
-
-.ion-navicon-round:before {
- content:"\f101";
-}
-
-
-.ion-search:before {
- content:"\f102";
-}
-
-
-.ion-play:before {
- content:"\f103";
-}
-
-
-.ion-link:before {
- content:"\f104";
-}
-
-
-.ion-chevron-up:before {
- content:"\f105";
-}
-
-
-.ion-chevron-left:before {
- content:"\f106";
-}
-
-
-.ion-chevron-right:before {
- content:"\f107";
-}
-
-
-.ion-arrow-down-a:before {
- content:"\f108";
-}
-
-
-.ion-arrow-up-a:before {
- content:"\f109";
-}
-
-
-.ion-arrow-swap:before {
- content:"\f10a";
-}
-
-
-.ion-arrow-dropdown:before {
- content:"\f10b";
-}
-
-
-.ion-globe:before {
- content:"\f10c";
-}
-
-
-.ion-time:before {
- content:"\f10d";
-}
-
-
-.ion-location:before {
- content:"\f10e";
-}
-
-
-.ion-warning:before {
- content:"\f10f";
-}
-
-
-.ion-error:before {
- content:"\f110";
-}
-
-
-.ion-film-outline:before {
- content:"\f111";
-}
-
-
-.ion-music-note:before {
- content:"\f112";
-}
-
-
-.ion-more-vertical:before {
- content:"\f113";
-}
-
-
-.ion-magnet:before {
- content:"\f114";
-}
diff --git a/searx/static/themes/simple/fonts/ion.eot b/searx/static/themes/simple/fonts/ion.eot
deleted file mode 100644
index f4fc07e..0000000
--- a/searx/static/themes/simple/fonts/ion.eot
+++ /dev/null
Binary files differ
diff --git a/searx/static/themes/simple/fonts/ion.html b/searx/static/themes/simple/fonts/ion.html
deleted file mode 100644
index defea26..0000000
--- a/searx/static/themes/simple/fonts/ion.html
+++ /dev/null
@@ -1,261 +0,0 @@
-<!doctype html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>ion</title>
- <style>
- body {
- margin:0;
- padding:10px 20px;
- background:#fff;
- color:#222;
- }
- h1, div, footer {
- font-family:"Helvetica Neue", Arial, sans-serif;
- }
- h1 {
- margin:0 0 20px;
- font-size:32px;
- font-weight:normal;
- }
- h1 small {
- font-size: 0.8em;
- padding-left: 2em;
- }
- .icons {
- margin-bottom:40px;
- -webkit-column-count:5;
- -moz-column-count:5;
- column-count:5;
- -webkit-column-gap:20px;
- -moz-column-gap:20px;
- column-gap:20px;
- }
- .icons__item,
- .icons__item i {
- line-height:2em;
- cursor:pointer;
- overflow:hidden;
- }
- .icons__item:hover {
- color:#3c90be;
- }
- .icons__item i {
- display:inline-block;
- width:32px;
- text-align:center;
- }
- .icons__item:hover i {
- -webkit-transform:scale(1.5);
- transform:scale(1.5);
- }
- footer {
- margin-top:40px;
- font-size:14px;
- color:#999;
- }
-
- /* Generated by grunt-webfont */
-
-
-@font-face {
- font-family:"ion";
- src:url("ion.eot?94af7082ea096aefe3a7b6642834716e");
- src:url("ion.eot?#iefix") format("embedded-opentype"),
- url("ion.woff2?94af7082ea096aefe3a7b6642834716e") format("woff2"),
- url("ion.woff?94af7082ea096aefe3a7b6642834716e") format("woff"),
- url("ion.ttf?94af7082ea096aefe3a7b6642834716e") format("truetype"),
- url("ion.svg?94af7082ea096aefe3a7b6642834716e#ion") format("svg");
- font-weight:normal;
- font-style:normal;
-}
-
-.ion-icon {
-
- font-family:"ion";
-
- display:inline-block;
- vertical-align:middle;
- line-height:1;
- font-weight:normal;
- font-style:normal;
- speak:none;
- text-decoration:inherit;
- text-transform:none;
- text-rendering:auto;
- -webkit-font-smoothing:antialiased;
- -moz-osx-font-smoothing:grayscale;
-}
-
-
-/* Icons */
-
-
-.ion-navicon-round:before {
- content:"\f101";
-}
-
-
-.ion-search:before {
- content:"\f102";
-}
-
-
-.ion-play:before {
- content:"\f103";
-}
-
-
-.ion-link:before {
- content:"\f104";
-}
-
-
-.ion-chevron-up:before {
- content:"\f105";
-}
-
-
-.ion-chevron-left:before {
- content:"\f106";
-}
-
-
-.ion-chevron-right:before {
- content:"\f107";
-}
-
-
-.ion-arrow-down-a:before {
- content:"\f108";
-}
-
-
-.ion-arrow-up-a:before {
- content:"\f109";
-}
-
-
-.ion-arrow-swap:before {
- content:"\f10a";
-}
-
-
-.ion-arrow-dropdown:before {
- content:"\f10b";
-}
-
-
-.ion-globe:before {
- content:"\f10c";
-}
-
-
-.ion-time:before {
- content:"\f10d";
-}
-
-
-.ion-location:before {
- content:"\f10e";
-}
-
-
-.ion-warning:before {
- content:"\f10f";
-}
-
-
-.ion-error:before {
- content:"\f110";
-}
-
-
-.ion-film-outline:before {
- content:"\f111";
-}
-
-
-.ion-music-note:before {
- content:"\f112";
-}
-
-
-.ion-more-vertical:before {
- content:"\f113";
-}
-
-
-.ion-magnet:before {
- content:"\f114";
-}
-
- </style>
- </head>
- <body>
- <h1>ion</h1>
-
- <div class="icons" id="icons">
-
- <div class="icons__item" data-name="navicon-round"><i class="ion-icon ion-navicon-round"></i> ion-navicon-round</div>
-
- <div class="icons__item" data-name="search"><i class="ion-icon ion-search"></i> ion-search</div>
-
- <div class="icons__item" data-name="play"><i class="ion-icon ion-play"></i> ion-play</div>
-
- <div class="icons__item" data-name="link"><i class="ion-icon ion-link"></i> ion-link</div>
-
- <div class="icons__item" data-name="chevron-up"><i class="ion-icon ion-chevron-up"></i> ion-chevron-up</div>
-
- <div class="icons__item" data-name="chevron-left"><i class="ion-icon ion-chevron-left"></i> ion-chevron-left</div>
-
- <div class="icons__item" data-name="chevron-right"><i class="ion-icon ion-chevron-right"></i> ion-chevron-right</div>
-
- <div class="icons__item" data-name="arrow-down-a"><i class="ion-icon ion-arrow-down-a"></i> ion-arrow-down-a</div>
-
- <div class="icons__item" data-name="arrow-up-a"><i class="ion-icon ion-arrow-up-a"></i> ion-arrow-up-a</div>
-
- <div class="icons__item" data-name="arrow-swap"><i class="ion-icon ion-arrow-swap"></i> ion-arrow-swap</div>
-
- <div class="icons__item" data-name="arrow-dropdown"><i class="ion-icon ion-arrow-dropdown"></i> ion-arrow-dropdown</div>
-
- <div class="icons__item" data-name="globe"><i class="ion-icon ion-globe"></i> ion-globe</div>
-
- <div class="icons__item" data-name="time"><i class="ion-icon ion-time"></i> ion-time</div>
-
- <div class="icons__item" data-name="location"><i class="ion-icon ion-location"></i> ion-location</div>
-
- <div class="icons__item" data-name="warning"><i class="ion-icon ion-warning"></i> ion-warning</div>
-
- <div class="icons__item" data-name="error"><i class="ion-icon ion-error"></i> ion-error</div>
-
- <div class="icons__item" data-name="film-outline"><i class="ion-icon ion-film-outline"></i> ion-film-outline</div>
-
- <div class="icons__item" data-name="music-note"><i class="ion-icon ion-music-note"></i> ion-music-note</div>
-
- <div class="icons__item" data-name="more-vertical"><i class="ion-icon ion-more-vertical"></i> ion-more-vertical</div>
-
- <div class="icons__item" data-name="magnet"><i class="ion-icon ion-magnet"></i> ion-magnet</div>
-
- </div>
-
-
-
- <h1>Usage</h1>
- <pre><code>&lt;i class=&quot;ion-icon ion-<span id="name">name</span>&quot;&gt;&lt;/i&gt;</code></pre>
-
-
- <footer>Generated by <a href="https://github.com/sapegin/grunt-webfont">grunt-webfont</a>.</footer>
-
- <script>
- (function() {
- document.getElementById('icons').onclick = function(e) {
- e = e || window.event;
- var name = e.target.getAttribute('data-name') || e.target.parentNode.getAttribute('data-name');
- document.getElementById('name').innerHTML = name;
-
- }
- })();
- </script>
- </body>
-</html>
diff --git a/searx/static/themes/simple/fonts/ion.svg b/searx/static/themes/simple/fonts/ion.svg
deleted file mode 100644
index db43668..0000000
--- a/searx/static/themes/simple/fonts/ion.svg
+++ /dev/null
@@ -1,97 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<!--
-2017-5-26: Created.
--->
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>
-Created by FontForge 20120731 at Fri May 26 22:22:55 2017
- By alexandre,,,
-
-</metadata>
-<defs>
-<font id="ion" horiz-adv-x="512" >
- <font-face
- font-family="ion"
- font-weight="500"
- font-stretch="normal"
- units-per-em="512"
- panose-1="2 0 6 9 0 0 0 0 0 0"
- ascent="448"
- descent="-64"
- bbox="31.9799 -31.9632 479.993 415.9"
- underline-thickness="25.6"
- underline-position="-51.2"
- unicode-range="U+F101-F114"
- />
- <missing-glyph />
- <glyph glyph-name="arrow-down-a" unicode="&#xf108;"
-d="M256.5 -0.5l-192 192h112v192h160v-192h112z" />
- <glyph glyph-name="arrow-dropdown" unicode="&#xf10b;"
-d="M128 256h256l-128 -128z" />
- <glyph glyph-name="arrow-swap" unicode="&#xf10a;"
-d="M64 120c0 4.40039 3.59961 7.99999 8 7.99999h248v64l128 -96l-128 -96v64h-248c-4.40039 0 -8 3.59961 -8 8v48zM448 264c0 -4.40039 -3.59961 -8 -8 -8h-248v-64l-128 96l128 96v-64h248c4.40039 0 8 -3.59961 8 -8v-48z" />
- <glyph glyph-name="arrow-up-a" unicode="&#xf109;"
-d="M256.5 383.5l192 -192h-112v-192h-160v192h-112z" />
- <glyph glyph-name="chevron-left" unicode="&#xf106;"
-d="M213.7 192l167.2 -174.2c4.19922 -4.2998 4.09961 -11.3994 -0.200195 -15.7998l-29.9004 -30.5996c-4.2998 -4.40039 -11.2998 -4.5 -15.5 -0.200191l-204.2 212.7c-2.09961 2.19922 -3.09961 5.09961 -3 8.09961c-0.199219 2.90039 0.800781 5.90039 3 8.09961
-l204.2 212.601c4.2002 4.2998 11.2002 4.2002 15.5 -0.200195l29.9004 -30.5996c4.2998 -4.40039 4.39941 -11.5 0.200195 -15.8008l-167.2 -174.1v0v0z" />
- <glyph glyph-name="chevron-right" unicode="&#xf107;"
-d="M298.3 192v0v0l-167.2 174.1c-4.19922 4.30078 -4.09961 11.4004 0.200195 15.8008l29.9004 30.5996c4.2998 4.40039 11.2998 4.5 15.5 0.200195l204.2 -212.7c2.19922 -2.2002 3.19922 -5.2002 3 -8.09961c0.0996094 -3 -0.900391 -5.90039 -3 -8.10059l-204.2 -212.6
-c-4.2002 -4.29981 -11.2002 -4.2002 -15.5 0.200191l-29.9004 30.5996c-4.2998 4.40039 -4.39941 11.5 -0.200195 15.7998z" />
- <glyph glyph-name="chevron-up" unicode="&#xf105;"
-d="M256 234.3l-174.2 -167.2c-4.2998 -4.19922 -11.3994 -4.09961 -15.7998 0.200195l-30.5996 29.9004c-4.40039 4.2998 -4.5 11.2998 -0.200195 15.5l212.7 204.2c2.19922 2.09961 5.09961 3.09961 8.09961 3c2.90039 0.199219 5.90039 -0.800781 8.09961 -3l212.7 -204.2
-c4.2998 -4.2002 4.20016 -11.2002 -0.200226 -15.5l-30.5996 -29.9004c-4.40039 -4.2998 -11.5 -4.39941 -15.7998 -0.200195l-174.2 167.2v0v0z" />
- <glyph glyph-name="error" unicode="&#xf110;"
-d="M256 400c114.4 0 208 -93.6006 208 -208c0 -114.399 -93.5996 -208 -208 -208s-208 93.6006 -208 208c0 114.399 93.5996 208 208 208zM280 88v40h-48v-40h48zM280 176v128h-48v-128h48z" />
- <glyph glyph-name="film-outline" unicode="&#xf111;"
-d="M56 360h400v-336h-400v336zM128 40v48h-56v-48h56zM128 104v48h-56v-48h56zM128 168v48h-56v-48h56zM128 232v48h-56v-48h56zM128 296v48h-56v-48h56zM368 40v144h-224v-144h224zM368 200v144h-224v-144h224zM440 40v48h-56v-48h56zM440 104v48h-56v-48h56zM440 168v48
-h-56v-48h56zM440 232v48h-56v-48h56zM440 296v48h-56v-48h56z" />
- <glyph glyph-name="globe" unicode="&#xf10c;"
-d="M256 400c114.875 0 208 -93.125 208 -208c0 -114.875 -93.125 -208 -208 -208c-114.876 0 -208 93.125 -208 208c0 114.875 93.124 208 208 208zM234.451 15.001c6.04297 15.0449 19.9453 28.6484 7.27342 39.1172c-8.17285 6.75 -15.6123 13.6279 -23.1104 21.125
-c-2.47461 2.47363 -9.9082 19.7109 -8.35156 22.3916c5.10254 8.78613 5.76367 14.8613 8.12988 24.7236c2.94336 12.2627 -3.33398 15.4434 -13.3828 21.8389c-15.2256 9.68848 -28.9629 22.4844 -43.3223 33.4941c-7.11621 5.45508 -17.4355 10.0986 -20.0186 18.9521
-c-2.64062 9.05078 -3.97363 20.2598 -9.40039 28.0781c-13.9277 20.0752 -11.5791 34.9678 -9.93945 58.7627c0.449219 6.52637 -1.30371 15.6572 -2.01367 24.1748c-27.5654 -32.2354 -42.6016 -72.7891 -42.6016 -115.659c0 -47.6221 18.5439 -92.3926 52.2178 -126.067
-c28.541 -28.54 65.0557 -46.2061 104.52 -50.9316zM382.067 65.9326c23.0352 23.0381 38.9873 51.2695 46.7686 82.0527c-8.34668 -1.19141 -18.3838 2.22754 -18.3838 2.22754s-21.7363 23.707 -23.5244 44.5723c-1.85645 21.667 0.498047 38.3945 -2.89551 56.8105
-c-2.87988 15.624 -19.2803 31.5 -26.6729 46.3018c-6.92188 13.8555 -13.7334 27.7031 -20.2646 41.7451c2.25098 -0.848633 4.90039 -1.40234 6.96484 -2.62305c4.99902 0.636719 9.43066 1.22949 13.4629 1.59082c-22.5381 15.6758 -48.2725 25.8418 -75.5225 29.7998
-v-8.33887l3.55273 -9.27734l-13.7793 -12.9951l-8.6748 2.79492l-9.92383 10.2334l-9.94434 11.8008l-14.084 5.66016c-15.7227 -2.36133 -30.9336 -6.78711 -45.3096 -13.1523c0.360352 -2.30762 0.662109 -4.64453 0.662109 -7.13281
-c7.17383 2.98926 15.2764 5.04883 22.4502 8.03906c2.96289 1.23438 12.7529 -7.1748 15.6221 -8.96777c-4.0957 -4.70996 -20.5576 -15.4434 -21.3574 -21.3574c-0.317383 -2.33984 6.50586 -6.06348 6.45117 -9.69141
-c-0.0878906 -5.74609 -0.173828 -11.4912 -0.259766 -17.2373c3.24414 2.76172 20.0332 20.3672 21.9404 20.8594c12.7256 3.2832 34.3916 -17.7646 36.249 -25.1934c1.8584 -7.42871 -21.6514 -23.6826 -32.6113 -34.0469
-c-8.39941 -7.94434 -24.8086 -12.5137 -19.8037 -24.2285c1.62695 -3.80957 10.0498 -20.0156 5.21191 -24.0586c-5.92188 -4.94824 -14.7686 8.97656 -17.3418 12.0938c-8.1543 9.87695 -25.626 6.02539 -37.9082 6.47852c0 -17.4209 -0.757812 -31.1885 14.9219 -42.9971
-c15.1953 -11.4434 29.5977 -24.7061 47.0781 -32.3389c12.7637 -5.57129 35.7158 6.53613 47.0205 -1.41699c15.8672 -11.165 29.3066 -21.624 47.1611 -29.375c7.93359 -3.44531 32.418 -19.8828 25.3525 -30.7812c-4.96582 -7.66211 -9.87305 -14.8848 -13.5771 -23.2168
-c-3.70703 -8.34375 -12.5957 -18.876 -19.6924 -24.3525c-8.15918 -6.29199 -16.9551 -17.1455 -21.8955 -29.3623c34.8574 6.5957 66.9229 23.4482 92.5566 49.0811z" />
- <glyph glyph-name="link" unicode="&#xf104;"
-d="M256.5 240h-0.5v0h0.5zM368.5 288c44.2002 0 79.5 -35.2998 79.5 -79.5v-32c0 -44.2002 -35.2998 -80.5 -79.5 -80.5h-112c-32.7002 0 -61 19.7998 -73.5996 48c-4.40039 10 -6.90039 21 -6.90039 32.5v31.5h48v-31.5c0 -17.5996 14.9004 -32.5 32.5 -32.5h112
-c17.5996 0 31.5 14.9004 31.5 32.5v32c0 17.5996 -13.9004 31.5 -31.5 31.5h-0.5h-16.4004c-5.59961 31 -31.5996 48 -31.5996 48h48.5zM329.6 240c4.10059 -9.59961 6.40039 -20.2998 6.40039 -31.5v-32v-0.5h-48v0.5v32c0 17.5996 -13.9004 31.5 -31.5 31.5h-0.5h-111.5
-c-17.5996 0 -32.5 -13.9004 -32.5 -31.5v-32c0 -17.5996 14.9004 -32.5 32.5 -32.5h15.4004c6.2998 -31 32.0996 -48 32.0996 -48h-47.5c-44.2002 0 -80.5 36.2998 -80.5 80.5v32c0 44.2002 36.2998 79.5 80.5 79.5h112c33 0 61 -19.7002 73.0996 -48z" />
- <glyph glyph-name="location" unicode="&#xf10e;"
-d="M256 384c65.9004 0 119.3 -53.7002 119.3 -120c0 -114.6 -119.3 -264 -119.3 -264s-119.3 149.4 -119.3 264c0 66.2998 53.3994 120 119.3 120zM256 205.8c31.2002 0 56.4004 25.4004 56.4004 56.7002c0 31.4004 -25.2002 56.7998 -56.4004 56.7998
-c-31.0996 0 -56.4004 -25.5 -56.4004 -56.7998s25.2002 -56.7002 56.4004 -56.7002z" />
- <glyph glyph-name="magnet" unicode="&#xf114;"
-d="M270.208 177.19h0.0126953v87.8721c0.345703 4.8125 -3.85254 22.8994 -14.0674 35.1738c-10.4697 12.5312 -23.6543 22.3496 -51.3662 22.7588c-27.7246 -0.396484 -40.8955 -10.2275 -51.3789 -22.7588c-10.1895 -12.2744 -14.4131 -30.3486 -14.0674 -35.1738
-v-87.8848h-64v87.8848c0.371094 21.8369 7.83398 48.7422 27.8271 74.7773c19.6865 25.7666 55.2188 47.6035 101.645 47.207c46.3877 0.421875 81.9199 -21.415 101.619 -47.1943c19.9941 -26.0352 27.4434 -52.9277 27.8018 -74.7646v-87.8975h-64.0254zM334.233 99.3789
-h0.0253906l-64.0508 -0.0126953v65.0244h64.0254v-65.0117zM75.3408 99.3662v65.0244h64v-65.0244h-64z" />
- <glyph glyph-name="more-vertical" unicode="&#xf113;"
-d="M296 312c0 -22.002 -17.998 -40 -40 -40s-40 17.998 -40 40s17.998 40 40 40s40 -17.998 40 -40zM296 72c0 -22.002 -17.998 -40 -40 -40s-40 17.998 -40 40s17.998 40 40 40s40 -17.998 40 -40zM296 192c0 -22.002 -17.998 -40 -40 -40s-40 17.998 -40 40
-s17.998 40 40 40s40 -17.998 40 -40z" />
- <glyph glyph-name="music-note" unicode="&#xf112;"
-d="M426 415.9c12.0996 0 22 -9.5 22.0996 -21.2002v-302.8c0 -24.7002 -3 -42.9004 -12 -54.9004h-0.199219c-9.10059 -15 -25 -21 -43.2002 -21h-37.2002c-28.2998 0 -51.2002 19.9004 -51.2002 48s22.9004 48 51.2002 48h60.5v192l-208 -38v-232
-c0 -8.2998 -3.40039 -27 -13 -41.0996c-1 -1.80078 -2.09961 -3.40039 -3.40039 -5c-0.5 -0.600586 -0.899414 -1.5 -1.5 -2.10059c-0.0996094 -0.0996094 -0.299805 -0.0996103 -0.399414 -0.200196c-9.40039 -10.5996 -23 -17.5 -38.2998 -17.5h-36.2002
-c-28.2002 0 -51.2998 20 -51.2998 48s23.0996 48 51.0996 48v-0.0996094h61v286.5c1 14.5 13.5 27.9004 27.2998 31.5996l217.601 33.2002s2.89941 0.600586 5.09961 0.600586z" />
- <glyph glyph-name="navicon-round" unicode="&#xf101;"
-d="M417.4 224c16.8994 0 30.5996 -14.2998 30.5996 -32s-13.7002 -32 -30.5996 -32h-322.801c-16.8994 0 -30.5996 14.2998 -30.5996 32s13.7002 32 30.5996 32h322.801zM417.4 352c16.8994 0 30.5996 -14.2998 30.5996 -32s-13.7002 -32 -30.5996 -32h-322.801
-c-16.8994 0 -30.5996 14.2998 -30.5996 32s13.7002 32 30.5996 32h322.801zM417.4 96c16.8994 0 30.5996 -14.2998 30.5996 -32s-13.7002 -32 -30.5996 -32h-322.801c-16.8994 0 -30.5996 14.2998 -30.5996 32s13.7002 32 30.5996 32h322.801z" />
- <glyph glyph-name="play" unicode="&#xf103;"
-d="M405.2 215.1c6.59961 -5.59961 10.7998 -13.7998 10.7998 -23.0996s-4.2002 -17.5996 -10.7998 -23.0996l-278.101 -165.5c-3.69922 -2 -7.09962 -3.40039 -11.1992 -3.40039c-10.9004 0 -19.8008 9 -19.8008 20h-0.0996094v344h0.0996094c0 11 8.90039 20 19.8008 20
-c4 0 7.49999 -1.2002 10.8994 -3.2002z" />
- <glyph glyph-name="search" unicode="&#xf102;"
-d="M445 61.2998c4 -4 4 -10.3994 0 -14.5l-43.2998 -43.7998c-1.90039 -2 -4.60059 -3.09961 -7.2998 -3.09961c-2.7002 0 -5.40039 1.19922 -7.30078 3.09961l-84.3994 85.5996c-24.6006 -14.6992 -52.2002 -22.3994 -80.1006 -22.3994
-c-87.3994 0 -158.6 71.2998 -158.6 158.899c0 87.6006 71.2002 158.9 158.6 158.9c87.4004 0 158.601 -71.2998 158.601 -158.9c0 -27 -7.2002 -53.7998 -21 -77.8994zM222.6 322.1c-53.3994 0 -96.7998 -43.5 -96.7998 -97s43.4004 -97 96.7998 -97
-c53.4004 0 96.8008 43.5 96.8008 97s-43.4004 97 -96.8008 97z" />
- <glyph glyph-name="time" unicode="&#xf10d;"
-d="M256 405c117.149 0 213 -95.8506 213 -213c0 -117.149 -94.7891 -213 -213 -213s-213 95.8506 -213 213c0 117.149 94.7891 213 213 213zM256 21.5996c93.7178 0 170.4 76.6826 170.4 170.4s-76.6826 170.4 -170.4 170.4s-170.4 -76.6836 -170.4 -170.4
-s76.6826 -170.4 170.4 -170.4zM266.65 298.5v-111.824l95.8496 -56.4434l-15.9746 -26.625l-111.825 67.0928v127.8h31.9502z" />
- <glyph glyph-name="warning" unicode="&#xf10f;"
-d="M476.7 25.7998c2.7998 -4.89941 4.7998 -13 1.7998 -17.8994c-2.90039 -4.90039 -8.20016 -7.90039 -14 -7.90039h-417.1c-5.80078 0 -11.1006 3 -14 7.90039c-2.90039 4.89941 -0.900391 12.8994 1.89941 17.8994l206.601 349.5c2.7998 5 8.1992 8.7002 14.0996 8.7002
-c5.7998 0 11.2002 -3.7002 14.0996 -8.7002zM288 48v48h-64v-48h64zM288 128v144h-64v-144h64z" />
- </font>
-</defs></svg>
diff --git a/searx/static/themes/simple/fonts/ion.ttf b/searx/static/themes/simple/fonts/ion.ttf
deleted file mode 100644
index 4631e91..0000000
--- a/searx/static/themes/simple/fonts/ion.ttf
+++ /dev/null
Binary files differ
diff --git a/searx/static/themes/simple/fonts/ion.woff b/searx/static/themes/simple/fonts/ion.woff
deleted file mode 100644
index 767c126..0000000
--- a/searx/static/themes/simple/fonts/ion.woff
+++ /dev/null
Binary files differ
diff --git a/searx/static/themes/simple/fonts/ion.woff2 b/searx/static/themes/simple/fonts/ion.woff2
deleted file mode 100644
index 377710b..0000000
--- a/searx/static/themes/simple/fonts/ion.woff2
+++ /dev/null
Binary files differ
diff --git a/searx/static/themes/simple/gruntfile.js b/searx/static/themes/simple/gruntfile.js
index f3507a4..13fd326 100644
--- a/searx/static/themes/simple/gruntfile.js
+++ b/searx/static/themes/simple/gruntfile.js
@@ -22,7 +22,9 @@ module.exports = function(grunt) {
uglify: {
options: {
banner: '/*! simple/searx.min.js | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n',
- preserveComments: 'some',
+ output: {
+ comments: 'some'
+ },
sourceMap: true
},
dist: {
@@ -58,6 +60,12 @@ module.exports = function(grunt) {
production: {
options: {
paths: ["less"],
+ plugins: [
+ new (require('less-plugin-clean-css'))({
+ advanced: true,
+ compatibility: 'ie8'
+ })
+ ],
banner: '/*! searx | <%= grunt.template.today("dd-mm-yyyy") %> | https://github.com/asciimoo/searx */\n'
},
files: {
@@ -131,8 +139,15 @@ module.exports = function(grunt) {
}
});
- grunt.loadNpmTasks('grunt-contrib-uglify', '/usr/lib/nodejs');
- grunt.loadNpmTasks('grunt-contrib-concat', '/usr/lib/nodejs');
+ grunt.loadNpmTasks('grunt-contrib-watch');
+ grunt.loadNpmTasks('grunt-contrib-uglify');
+ grunt.loadNpmTasks('grunt-contrib-jshint');
+ grunt.loadNpmTasks('grunt-contrib-concat');
+ grunt.loadNpmTasks('grunt-contrib-less');
+ grunt.loadNpmTasks('grunt-contrib-cssmin');
+ grunt.loadNpmTasks('grunt-webfont');
- grunt.registerTask('default', ['concat', 'uglify']);
+ grunt.registerTask('test', ['jshint']);
+
+ grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'less:development', 'less:production']);
};
diff --git a/searx/static/themes/simple/js/searx_src/autocomplete.js b/searx/static/themes/simple/js/searx_src/autocomplete.js
index 4bbe017..b95fbcf 100644
--- a/searx/static/themes/simple/js/searx_src/autocomplete.js
+++ b/searx/static/themes/simple/js/searx_src/autocomplete.js
@@ -1,51 +1,4 @@
-(function(f){
- if(typeof exports=== "object" && typeof module !== "undefined") {
- module.exports = f()
- } else if(typeof define === "function" && define.amd) {
- define([], f)
- }else{
- var g;
- if(typeof window !== "undefined") {
- g = window
- } else if(typeof global !== "undefined") {
- g = global
- } else if(typeof self !== "undefined") {
- g = self
- } else {
- g = this
- }
- g.AutoComplete = f()
- }
-})(function(){
- var define, module, exports;
- return (function e(t, n, r){
- function s(o, u){
- if(!n[o]){
- if(!t[o]){
- var a = typeof require == "function" && require;
- if(!u && a)
- return a(o, !0);
- if(i)
- return i(o, !0);
- var f = new Error("Cannot find module '" + o + "'");
- throw f.code = "MODULE_NOT_FOUND", f
- }
- var l = n[o] = {
- exports:{}
- };
- t[o][0].call(l.exports,function(e) {
- var n = t[o][1][e];
- return s(n?n:e)
- }, l, l.exports, e, t, n, r)
- }
- return n[o].exports
- }
- var i = typeof require == "function" && require;
- for(var o = 0; o < r.length; o++)
- s(r[o]);
- return s
- })({
- 1:[function(require, module, exports){
+(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
/*
* @license MIT
*
diff --git a/searx/static/themes/simple/less/autocomplete.less b/searx/static/themes/simple/less/autocomplete.less
index 0a90d0d..93f7df1 100644
--- a/searx/static/themes/simple/less/autocomplete.less
+++ b/searx/static/themes/simple/less/autocomplete.less
@@ -1,3 +1,5 @@
+/*! Autocomplete.js v2.6.3 | license MIT | (c) 2017, Baptiste Donaux | http://autocomplete-js.com */
+
@background_color: white;
.autocomplete {
diff --git a/searx/static/themes/simple/less/ion.less b/searx/static/themes/simple/less/ion.less
deleted file mode 100644
index 9ec6b99..0000000
--- a/searx/static/themes/simple/less/ion.less
+++ /dev/null
@@ -1,174 +0,0 @@
-// Generated by grunt-webfont
-
-
-@font-face {
- font-family:"ion";
- src:url("../fonts/ion.eot?94af7082ea096aefe3a7b6642834716e");
- src:url("../fonts/ion.eot?#iefix") format("embedded-opentype"),
- url("../fonts/ion.woff2?94af7082ea096aefe3a7b6642834716e") format("woff2"),
- url("../fonts/ion.woff?94af7082ea096aefe3a7b6642834716e") format("woff"),
- url("../fonts/ion.ttf?94af7082ea096aefe3a7b6642834716e") format("truetype"),
- url("../fonts/ion.svg?94af7082ea096aefe3a7b6642834716e#ion") format("svg");
- font-weight:normal;
- font-style:normal;
-}
-
-.ion-icon {
- &:before {
- font-family:"ion";
- }
- display:inline-block;
- vertical-align:middle;
- line-height:1;
- font-weight:normal;
- font-style:normal;
- speak:none;
- text-decoration:inherit;
- text-transform:none;
- text-rendering:auto;
- -webkit-font-smoothing:antialiased;
- -moz-osx-font-smoothing:grayscale;
-}
-
-
-// Icons
-
-.ion-navicon-round {
- &:before {
- content:"\f101";
- }
-}
-
-
-.ion-search {
- &:before {
- content:"\f102";
- }
-}
-
-
-.ion-play {
- &:before {
- content:"\f103";
- }
-}
-
-
-.ion-link {
- &:before {
- content:"\f104";
- }
-}
-
-
-.ion-chevron-up {
- &:before {
- content:"\f105";
- }
-}
-
-
-.ion-chevron-left {
- &:before {
- content:"\f106";
- }
-}
-
-
-.ion-chevron-right {
- &:before {
- content:"\f107";
- }
-}
-
-
-.ion-arrow-down-a {
- &:before {
- content:"\f108";
- }
-}
-
-
-.ion-arrow-up-a {
- &:before {
- content:"\f109";
- }
-}
-
-
-.ion-arrow-swap {
- &:before {
- content:"\f10a";
- }
-}
-
-
-.ion-arrow-dropdown {
- &:before {
- content:"\f10b";
- }
-}
-
-
-.ion-globe {
- &:before {
- content:"\f10c";
- }
-}
-
-
-.ion-time {
- &:before {
- content:"\f10d";
- }
-}
-
-
-.ion-location {
- &:before {
- content:"\f10e";
- }
-}
-
-
-.ion-warning {
- &:before {
- content:"\f10f";
- }
-}
-
-
-.ion-error {
- &:before {
- content:"\f110";
- }
-}
-
-
-.ion-film-outline {
- &:before {
- content:"\f111";
- }
-}
-
-
-.ion-music-note {
- &:before {
- content:"\f112";
- }
-}
-
-
-.ion-more-vertical {
- &:before {
- content:"\f113";
- }
-}
-
-
-.ion-magnet {
- &:before {
- content:"\f114";
- }
-}
-
diff --git a/searx/static/themes/simple/magnet.svg b/searx/static/themes/simple/magnet.svg
index 5a7a163..1a1defd 100644
--- a/searx/static/themes/simple/magnet.svg
+++ b/searx/static/themes/simple/magnet.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 32 40" enable-background="new 0 0 32 32" xml:space="preserve"><path d="M21.11,21.157h5.002v-6.867c-0.028-1.706-0.61-3.807-2.172-5.841c-1.539-2.014-4.315-3.72-7.939-3.687 C12.374,4.731,9.598,6.437,8.06,8.45c-1.562,2.034-2.145,4.136-2.174,5.842v6.866h5v-6.866c-0.027-0.377,0.303-1.789,1.099-2.748 c0.819-0.979,1.848-1.747,4.014-1.778c2.165,0.032,3.195,0.799,4.013,1.778c0.798,0.959,1.126,2.372,1.099,2.748V21.157 L21.11,21.157z M26.112,27.236c0,0,0-2.354,0-5.079H21.11c0,2.727,0,5.08,0,5.08l5.004-0.001H26.112z M5.886,27.237h5 c0,0,0-2.354,0-5.08h-5C5.886,24.884,5.886,27.237,5.886,27.237z"/><text x="0" y="47" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">Created by Dmitry Baranovskiy</text><text x="0" y="52" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">from the Noun Project</text></svg> \ No newline at end of file
+<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" width="31mm" height="44mm" viewBox="0 0 31 44" version="1.1"><metadata><rdf:RDF><cc:Work><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/><cc:license rdf:resource="https://www.gnu.org/licenses/agpl-3.0.en.html"/><dc:creator><cc:Agent><dc:title>Alexandre Flament</dc:title></cc:Agent></dc:creator></cc:Work></rdf:RDF></metadata><g fill="#000"><path d="M2.381 28.39H9.79v5.82H2.38z" stroke-width=".049"/><path d="M15.872 10.398c2.381 0 5.82.264 5.82 3.704v12.17c2.47.055 4.94-.001 7.41 0 .02-4.371 0-8.73 0-12.964-.022-3.73-1.158-6.05-3.705-7.937-2.844-2.203-6.144-2.335-9.656-2.347-3.512.012-6.812.144-9.656 2.347-2.547 1.887-3.683 4.207-3.704 7.937 0 4.234-.02 8.593 0 12.965 2.47-.002 4.94.054 7.409 0v-12.17c0-3.44 3.44-3.705 5.82-3.705" stroke="#000" stroke-width=".063" stroke-linecap="butt" stroke-linejoin="miter" stroke-opacity="1"/><path d="M21.696 28.39h7.408v5.82h-7.408z" stroke-width=".049"/></g></svg>
diff --git a/searx/templates/courgette/preferences.html b/searx/templates/courgette/preferences.html
index 56a6e02..61f5214 100644
--- a/searx/templates/courgette/preferences.html
+++ b/searx/templates/courgette/preferences.html
@@ -13,7 +13,6 @@
<legend>{{ _('Search language') }}</legend>
<p>
<select name='language'>
- <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
{% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
{% endfor %}
diff --git a/searx/templates/legacy/preferences.html b/searx/templates/legacy/preferences.html
index f418dcd..fb70832 100644
--- a/searx/templates/legacy/preferences.html
+++ b/searx/templates/legacy/preferences.html
@@ -14,7 +14,6 @@
<legend>{{ _('Search language') }}</legend>
<p>
<select name='language'>
- <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
{% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
{% endfor %}
diff --git a/searx/templates/oscar/base.html b/searx/templates/oscar/base.html
index 890204c..243e8b3 100644
--- a/searx/templates/oscar/base.html
+++ b/searx/templates/oscar/base.html
@@ -13,8 +13,8 @@
<title>{% block title %}{% endblock %}{{ instance_name }}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}" type="text/css" />
- {% if cookies['oscar-style'] %}
- <link rel="stylesheet" href="{{ url_for('static', filename='css/'+cookies['oscar-style']+'.min.css') }}" type="text/css" />
+ {% if preferences.get_value('oscar-style') %}
+ <link rel="stylesheet" href="{{ url_for('static', filename='css/'+preferences.get_value('oscar-style')+'.min.css') }}" type="text/css" />
{% else %}
<link rel="stylesheet" href="{{ url_for('static', filename='css/logicodev.min.css') }}" type="text/css" />
{% endif %}
@@ -87,7 +87,14 @@
<div class="container">
{% block footer %}
{% endblock %}
- <p class="text-muted"><small>{{ _('Powered by') }} <a href="https://asciimoo.github.io/searx/">searx</a> - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}</small></p>
+ <p class="text-muted">
+ <small>
+ {{ _('Powered by') }} <a href="https://asciimoo.github.io/searx/">searx</a> - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}<br/>
+ <a href="https://github.com/asciimoo/searx">{{ _('Source code') }}</a> |
+ <a href="https://github.com/asciimoo/searx/issues">{{ _('Issue tracker') }}</a> |
+ <a href="https://github.com/asciimoo/searx/wiki/Searx-instances">{{ _('Public instances') }}</a>
+ </small>
+ </p>
</div>
</div>
<script src="{{ url_for('static', filename='js/jquery-1.11.1.min.js') }}"></script>
diff --git a/searx/templates/oscar/languages.html b/searx/templates/oscar/languages.html
index 96c1c3a..996c427 100644
--- a/searx/templates/oscar/languages.html
+++ b/searx/templates/oscar/languages.html
@@ -3,10 +3,9 @@
{% else %}
<select class="time_range custom-select form-control" id='language' name='language'>
{% endif %}
- <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
- {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
- <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>
- {{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}
- </option>
- {% endfor %}
+ {% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
+ <option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>
+ {{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}
+ </option>
+ {% endfor %}
</select>
diff --git a/searx/templates/oscar/preferences.html b/searx/templates/oscar/preferences.html
index 5f85a9a..f23cae3 100644
--- a/searx/templates/oscar/preferences.html
+++ b/searx/templates/oscar/preferences.html
@@ -106,7 +106,8 @@
{{ preferences_item_header(_('Choose style for this theme'), _('Style'), rtl) }}
<select class="form-control" name='oscar-style'>
<option value="logicodev" >Logicodev</option>
- <option value="pointhi" {% if cookies['oscar-style'] == 'pointhi' %}selected="selected"{% endif %}>Pointhi</option>
+ <option value="pointhi" {% if preferences.get_value('oscar-style') == 'pointhi' %}selected="selected"{% endif %}>Pointhi</option>
+ <option value="logicodev-dark" {% if preferences.get_value('oscar-style') == 'logicodev-dark' %}selected="selected"{% endif %}>Logicodev dark</option>
</select>
{{ preferences_item_footer(_('Choose style for this theme'), _('Style'), rtl) }}
@@ -186,7 +187,7 @@
</td>
<th>{{ search_engine.name }}</th>
<td class="name">{{ shortcuts[search_engine.name] }}</td>
- <td>{{ support_toggle(current_language == 'all' or current_language in search_engine.supported_languages or current_language.split('-')[0] in search_engine.supported_languages) }}</td>
+ <td>{{ support_toggle(current_language in search_engine.supported_languages or current_language.split('-')[0] in search_engine.supported_languages) }}</td>
<td>{{ support_toggle(search_engine.safesearch==True) }}</td>
<td>{{ support_toggle(search_engine.time_range_support==True) }}</td>
<td class="{{ 'danger' if stats[search_engine.name]['warn_time'] else '' }}">{{ 'N/A' if stats[search_engine.name].time==None else stats[search_engine.name].time }}</td>
@@ -196,7 +197,7 @@
<td class="{{ 'danger' if stats[search_engine.name]['warn_time'] else '' }}">{{ 'N/A' if stats[search_engine.name].time==None else stats[search_engine.name].time }}</td>
<td>{{ support_toggle(search_engine.time_range_support==True) }}</td>
<td>{{ support_toggle(search_engine.safesearch==True) }}</td>
- <td>{{ support_toggle(current_language == 'all' or current_language in search_engine.supported_languages or current_language.split('-')[0] in search_engine.supported_languages) }}</td>
+ <td>{{ support_toggle(current_language in search_engine.supported_languages or current_language.split('-')[0] in search_engine.supported_languages) }}</td>
<td>{{ shortcuts[search_engine.name] }}</td>
<th>{{ search_engine.name }}</th>
<td class="onoff-checkbox">
diff --git a/searx/templates/pix-art/preferences.html b/searx/templates/pix-art/preferences.html
index 05876de..0b2bb67 100644
--- a/searx/templates/pix-art/preferences.html
+++ b/searx/templates/pix-art/preferences.html
@@ -9,7 +9,6 @@
<legend>{{ _('Search language') }}</legend>
<p>
<select name='language'>
- <option value="all" {% if current_language == 'all' %}selected="selected"{% endif %}>{{ _('Default language') }}</option>
{% for lang_id,lang_name,country_name,english_name in language_codes | sort(attribute=1) %}
<option value="{{ lang_id }}" {% if lang_id == current_language %}selected="selected"{% endif %}>{{ lang_name }} {% if country_name %}({{ country_name }}) {% endif %}- {{ lang_id }}</option>
{% endfor %}
diff --git a/searx/templates/simple/404.html b/searx/templates/simple/404.html
index 1843c98..11d6043 100644
--- a/searx/templates/simple/404.html
+++ b/searx/templates/simple/404.html
@@ -3,7 +3,7 @@
<div class="center">
<h1>{{ _('Page not found') }}</h1>
{% autoescape false %}
- <p>{{ _('Go to %(search_page)s.', search_page='<a href="{}">{}</a>'.decode('utf-8').format(url_for('index'), _('search page'))) }}</p>
+ <p>{{ _('Go to %(search_page)s.', search_page=unicode('<a href="{}">{}</a>').format(url_for('index'), _('search page'))) }}</p>
{% endautoescape %}
</div>
{% endblock %}
diff --git a/searx/templates/simple/base.html b/searx/templates/simple/base.html
index 0003f11..f0dea57 100644
--- a/searx/templates/simple/base.html
+++ b/searx/templates/simple/base.html
@@ -52,7 +52,12 @@
{% endblock %}
</main>
<footer>
- <p>{{ _('Powered by') }} <a href="{{ url_for('about') }}">searx</a> - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}</p>
+ <p>
+ {{ _('Powered by') }} <a href="{{ url_for('about') }}">searx</a> - {{ searx_version }} - {{ _('a privacy-respecting, hackable metasearch engine') }}<br/>
+ <a href="https://github.com/asciimoo/searx">{{ _('Source code') }}</a> |
+ <a href="https://github.com/asciimoo/searx/issues">{{ _('Issue tracker') }}</a> |
+ <a href="https://github.com/asciimoo/searx/wiki/Searx-instances">{{ _('Public instances') }}</a>
+ </p>
</footer>
<!--[if gte IE 9]>-->
<script src="{{ url_for('static', filename='js/searx.min.js') }}" ></script>
diff --git a/searx/translations/ar/LC_MESSAGES/messages.po b/searx/translations/ar/LC_MESSAGES/messages.po
index 9756e4a..a81a804 100644
--- a/searx/translations/ar/LC_MESSAGES/messages.po
+++ b/searx/translations/ar/LC_MESSAGES/messages.po
@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PROJECT project.
#
# Translators:
-# ButterflyOfFire, 2017
+# ButterflyOfFire, 2017-2018
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-12 14:51+0000\n"
+"PO-Revision-Date: 2018-01-23 17:54+0000\n"
"Last-Translator: ButterflyOfFire\n"
"Language-Team: Arabic (http://www.transifex.com/asciimoo/searx/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -57,7 +57,7 @@ msgstr "فيديوهات"
#: searx/webapp.py:142
msgid "it"
-msgstr ""
+msgstr "علوم و تكنولوجيا"
#: searx/webapp.py:143
msgid "news"
@@ -89,11 +89,11 @@ msgstr "قبل {minutes} ثانية"
#: searx/webapp.py:532
msgid "{hours} hour(s), {minutes} minute(s) ago"
-msgstr ""
+msgstr "قبل {hours} ساعات، {minutes} دقائق"
#: searx/answerers/random/answerer.py:53
msgid "Random value generator"
-msgstr ""
+msgstr "مولّد قيمة عشوائية"
#: searx/answerers/random/answerer.py:54
msgid "Generate different random values"
@@ -109,11 +109,11 @@ msgstr ""
#: searx/engines/__init__.py:194 searx/engines/flycheck___init__.py:201
msgid "Engine time (sec)"
-msgstr ""
+msgstr "المدة المستغرقة للمحرك (ثواني)"
#: searx/engines/__init__.py:198 searx/engines/flycheck___init__.py:205
msgid "Page loads (sec)"
-msgstr ""
+msgstr "مدة تحميل الصفحة (ثواني)"
#: searx/engines/__init__.py:202 searx/engines/flycheck___init__.py:209
#: searx/templates/oscar/results.html:95
@@ -135,7 +135,7 @@ msgstr "أخطاء"
#: searx/engines/pdbe.py:87
msgid "{title}&nbsp;(OBSOLETE)"
-msgstr ""
+msgstr "{title}&nbsp;(OBSOLETE)"
#: searx/engines/pdbe.py:91
msgid "This entry has been superseded by"
@@ -147,15 +147,15 @@ msgstr ""
#: searx/plugins/https_rewrite.py:32
msgid "Rewrite HTTP links to HTTPS if possible"
-msgstr ""
+msgstr "تحويل روابط HTTP إلى روابط آمنة HTTPS عندما يكون ذلك مُتاحًا"
#: searx/plugins/infinite_scroll.py:3
msgid "Infinite scroll"
-msgstr ""
+msgstr "تمرير الصفحات بلا حدود"
#: searx/plugins/infinite_scroll.py:4
msgid "Automatically load next page when scrolling to bottom of current page"
-msgstr ""
+msgstr "حمّل تلقائيا الصفحة التالية عن السحب إلى أسفل النتائج"
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
@@ -197,7 +197,7 @@ msgstr ""
#: searx/plugins/tracker_url_remover.py:26
msgid "Tracker URL remover"
-msgstr ""
+msgstr "مزيل روابط التعقّب"
#: searx/plugins/tracker_url_remover.py:27
msgid "Remove trackers arguments from the returned URL"
@@ -205,7 +205,7 @@ msgstr ""
#: searx/plugins/vim_hotkeys.py:3
msgid "Vim-like hotkeys"
-msgstr ""
+msgstr "إختصارات لوحة المفاتيح مثل التي في Vim"
#: searx/plugins/vim_hotkeys.py:4
msgid ""
@@ -302,7 +302,7 @@ msgstr "تكملة تلقائية"
#: searx/templates/oscar/preferences.html:68
#: searx/templates/simple/preferences.html:166
msgid "Image proxy"
-msgstr ""
+msgstr "وكيل بروكسي الصور"
#: searx/templates/courgette/preferences.html:48
#: searx/templates/legacy/preferences.html:49
@@ -468,7 +468,7 @@ msgstr "حفظ"
#: searx/templates/oscar/preferences.html:307
#: searx/templates/simple/preferences.html:186
msgid "Reset defaults"
-msgstr ""
+msgstr "إعاد التعيين إلى الإعدادات الإفتراضية"
#: searx/templates/courgette/preferences.html:129
#: searx/templates/legacy/preferences.html:126
@@ -483,7 +483,7 @@ msgstr "العودة"
#: searx/templates/oscar/results.html:136
#: searx/templates/simple/results.html:58
msgid "Search URL"
-msgstr ""
+msgstr "رابط البحث"
#: searx/templates/courgette/results.html:16
#: searx/templates/legacy/results.html:17
@@ -536,21 +536,21 @@ msgstr "إحصائيات المحرك"
#: searx/templates/legacy/result_templates/images.html:4
#: searx/templates/pix-art/result_templates/images.html:4
msgid "original context"
-msgstr ""
+msgstr "الوضع الأصلي"
#: searx/templates/courgette/result_templates/torrent.html:7
#: searx/templates/legacy/result_templates/torrent.html:11
#: searx/templates/oscar/result_templates/torrent.html:6
#: searx/templates/simple/result_templates/torrent.html:9
msgid "Seeder"
-msgstr ""
+msgstr "الزارع"
#: searx/templates/courgette/result_templates/torrent.html:7
#: searx/templates/legacy/result_templates/torrent.html:11
#: searx/templates/oscar/result_templates/torrent.html:6
#: searx/templates/simple/result_templates/torrent.html:9
msgid "Leecher"
-msgstr ""
+msgstr "الحاصد"
#: searx/templates/courgette/result_templates/torrent.html:9
#: searx/templates/legacy/result_templates/torrent.html:9
@@ -617,24 +617,24 @@ msgstr "خطأ !"
#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:55
msgid "Powered by"
-msgstr ""
+msgstr "مدعوم بواسطة"
#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:55
msgid "a privacy-respecting, hackable metasearch engine"
-msgstr ""
+msgstr "محرك بحث يحمي الخصوصية و قابل للتهكير"
#: searx/templates/oscar/macros.html:36 searx/templates/oscar/macros.html:50
#: searx/templates/simple/macros.html:43
msgid "proxied"
-msgstr ""
+msgstr "يمر عبر البروكسي"
#: searx/templates/oscar/macros.html:92
msgid "supported"
-msgstr ""
+msgstr "مدعوم"
#: searx/templates/oscar/macros.html:96
msgid "not supported"
-msgstr ""
+msgstr "غير مدعوم"
#: searx/templates/oscar/preferences.html:13
#: searx/templates/oscar/preferences.html:22
@@ -656,7 +656,7 @@ msgstr "الإضافات"
#: searx/templates/oscar/preferences.html:16
#: searx/templates/oscar/preferences.html:245
msgid "Answerers"
-msgstr ""
+msgstr "المجيبون"
#: searx/templates/oscar/preferences.html:17
#: searx/templates/oscar/preferences.html:272
@@ -671,7 +671,7 @@ msgstr "ما هي لغتك المفضلة للبحث ؟"
#: searx/templates/oscar/preferences.html:48
#: searx/templates/simple/preferences.html:128
msgid "Change the language of the layout"
-msgstr ""
+msgstr "يقوم بتغيير لغة واجهة البحث"
#: searx/templates/oscar/preferences.html:58
#: searx/templates/simple/preferences.html:60
@@ -698,7 +698,7 @@ msgstr "فلترة المحتوى"
#: searx/templates/oscar/preferences.html:97
#: searx/templates/simple/preferences.html:139
msgid "Change searx layout"
-msgstr ""
+msgstr "تغيير مظهر سيركس"
#: searx/templates/oscar/preferences.html:106
#: searx/templates/oscar/preferences.html:111
@@ -724,7 +724,7 @@ msgstr ""
#: searx/templates/oscar/preferences.html:175
#: searx/templates/simple/preferences.html:88
msgid "Shortcut"
-msgstr ""
+msgstr "الإختصار"
#: searx/templates/oscar/preferences.html:164
#: searx/templates/oscar/preferences.html:174
@@ -735,19 +735,19 @@ msgstr "اللغة المختارة"
#: searx/templates/oscar/preferences.html:172
#: searx/templates/simple/preferences.html:91
msgid "Time range"
-msgstr ""
+msgstr "الفترة"
#: searx/templates/oscar/preferences.html:167
#: searx/templates/oscar/preferences.html:171
#: searx/templates/simple/preferences.html:92
msgid "Avg. time"
-msgstr ""
+msgstr "متوسط الوقت"
#: searx/templates/oscar/preferences.html:168
#: searx/templates/oscar/preferences.html:170
#: searx/templates/simple/preferences.html:93
msgid "Max time"
-msgstr ""
+msgstr "أقصى مدّة"
#: searx/templates/oscar/preferences.html:248
msgid "This is the list of searx's instant answering modules."
@@ -857,7 +857,7 @@ msgstr ""
#: searx/templates/oscar/messages/first_time.html:7
msgid "It look like you are using searx first time."
-msgstr ""
+msgstr "يظهر أنك تستخدم محرك سيركس لأول مرة."
#: searx/templates/oscar/messages/no_cookies.html:3
msgid "Information!"
@@ -869,17 +869,17 @@ msgstr ""
#: searx/templates/oscar/messages/no_data_available.html:4
msgid "There is currently no data available. "
-msgstr ""
+msgstr "لم يتم العثور على أية بيانات بعدُ."
#: searx/templates/oscar/messages/no_results.html:4
#: searx/templates/simple/messages/no_results.html:4
msgid "Engines cannot retrieve results."
-msgstr ""
+msgstr "لم تتمكن المحركات من العثور على أية نتيجة."
#: searx/templates/oscar/messages/no_results.html:10
#: searx/templates/simple/messages/no_results.html:10
msgid "Please, try again later or find another searx instance."
-msgstr ""
+msgstr "يرجى إعادة المحاولة لاحقًا. إن كنت في عجلة من أمرك، ندعوك إلى البحث عن مثيل خادم آخر لمحرك سيركس."
#: searx/templates/oscar/messages/no_results.html:14
#: searx/templates/simple/messages/no_results.html:14
@@ -891,7 +891,7 @@ msgstr "عفوا !"
msgid ""
"we didn't find any results. Please use another query or search in more "
"categories."
-msgstr ""
+msgstr "لم نتوصل إلى العثور على أية نتيجة. الرجاء إعادة صياغة طلب البحث أو إبحث مع تحديد أكثر من فئة."
#: searx/templates/oscar/messages/save_settings_successfull.html:7
msgid "Well done!"
@@ -955,12 +955,12 @@ msgstr "حجم الملف"
#: searx/templates/oscar/result_templates/torrent.html:9
#: searx/templates/simple/result_templates/torrent.html:12
msgid "Bytes"
-msgstr ""
+msgstr "بايت"
#: searx/templates/oscar/result_templates/torrent.html:10
#: searx/templates/simple/result_templates/torrent.html:13
msgid "kiB"
-msgstr ""
+msgstr "ك.بايت"
#: searx/templates/oscar/result_templates/torrent.html:11
#: searx/templates/simple/result_templates/torrent.html:14
@@ -998,11 +998,11 @@ msgstr "تحميل المزيد ..."
#: searx/templates/simple/base.html:31
msgid "No item found"
-msgstr ""
+msgstr "تعذر العثور على عناصر"
#: searx/templates/simple/preferences.html:89
msgid "Supports selected language"
-msgstr ""
+msgstr "يدعم اللغة المختارة"
#: searx/templates/simple/preferences.html:118
msgid "User interface"
diff --git a/searx/translations/de/LC_MESSAGES/messages.po b/searx/translations/de/LC_MESSAGES/messages.po
index 33a530a..2bf2291 100644
--- a/searx/translations/de/LC_MESSAGES/messages.po
+++ b/searx/translations/de/LC_MESSAGES/messages.po
@@ -21,8 +21,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-01 20:31+0000\n"
-"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
+"PO-Revision-Date: 2017-12-09 13:14+0000\n"
+"Last-Translator: Mario Siegmann <mario_siegmann@web.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"
@@ -155,7 +155,7 @@ msgstr "Dieser Eintrag wurde überschrieben von"
#: searx/engines/pubmed.py:74
msgid "No abstract is available for this publication."
-msgstr ""
+msgstr "Keine Zusammenfassung für die Veröffentlichung verfügbar."
#: searx/plugins/https_rewrite.py:32
msgid "Rewrite HTTP links to HTTPS if possible"
@@ -171,7 +171,7 @@ msgstr "Lädt automatisch die nächste Seite wenn das Ende der aktuellen Seite e
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
-msgstr ""
+msgstr "Open Access DOI rewrite"
#: searx/plugins/oa_doi_rewrite.py:10
msgid ""
@@ -183,13 +183,13 @@ msgstr "Bezahlbeschränkungen durch die Weiterleitung zu der verfügbaren Open-A
#: searx/templates/oscar/preferences.html:114
#: searx/templates/simple/preferences.html:149
msgid "Open result links on new browser tabs"
-msgstr "Öffne Links in einem neuen Browser-Tab"
+msgstr "Links in einem neuen Browser-Tab öffnen"
#: searx/plugins/open_results_on_new_tab.py:19
msgid ""
"Results are opened in the same window by default. This plugin overwrites the"
" default behaviour to open links on new tabs/windows. (JavaScript required)"
-msgstr "Links werden normalerweise im gleichen Fenster geöffnet. Dieses Plugin überschreibt dieses Verhalten und öffnet Links in einem neuen Browser Tab bzw Fenster.\n(es wird JavaScript benötigt)"
+msgstr "Links werden normalerweise im gleichen Fenster geöffnet. Dieses Plugin überschreibt dieses Verhalten und öffnet Links in einem neuen Tab bzw. Fenster.\n(JavaScript wird benötigt)"
#: searx/plugins/search_on_category_select.py:18
msgid "Search on category select"
@@ -199,7 +199,7 @@ msgstr "Suche starten, wenn Kategorie angeklickt wird"
msgid ""
"Perform search immediately if a category selected. Disable to select "
"multiple categories. (JavaScript required)"
-msgstr "Die Suche sofort starten, wenn eine Kategorie ausgewählt wird. Es ist nicht mehr möglich mehrere Kategorien auszuwählen. (JavaScript benötigt)"
+msgstr "Die Suche sofort starten, wenn eine Kategorie ausgewählt wird. Es ist dann nicht mehr möglich, mehrere Kategorien auszuwählen. (JavaScript wird benötigt)"
#: searx/plugins/self_info.py:20
msgid ""
@@ -715,7 +715,7 @@ msgstr "ändere das Aussehen von searx"
#: searx/templates/oscar/preferences.html:106
#: searx/templates/oscar/preferences.html:111
msgid "Choose style for this theme"
-msgstr "Wähle den Stil für dieses Thema"
+msgstr "Stil für dieses Thema auswählen"
#: searx/templates/oscar/preferences.html:106
#: searx/templates/oscar/preferences.html:111
@@ -724,13 +724,13 @@ msgstr "Aussehen"
#: searx/templates/oscar/preferences.html:122
msgid "Open Access DOI resolver"
-msgstr ""
+msgstr "Open Access DOI resolver"
#: searx/templates/oscar/preferences.html:123
msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
-msgstr ""
+msgstr "Weiterleitung zu frei zugänglichen Versionen von Veröffentlichungen, wenn verfügbar (Plugin benötigt)"
#: searx/templates/oscar/preferences.html:163
#: searx/templates/oscar/preferences.html:175
@@ -807,7 +807,7 @@ msgstr "Such-URL für die aktuell gespeicherten Einstellungen"
msgid ""
"Note: specifying custom settings in the search URL can reduce privacy by "
"leaking data to the clicked result sites."
-msgstr "Hinweis: Das Definieren eigener Einstellungen der Such-URL kann die Privatsphäre reduzieren. Dies kann durch die Veröffentlichung weiterer Daten auf der angeklickten Seite geschehen."
+msgstr "Hinweis: Das Festlegen eigener Einstellungen in der Such-URL kann Ihre Privatsphäre reduzieren, weil gegebenenfalls ungewollt Daten an die ausgewählten Ergebnisseiten übermittelt werden."
#: searx/templates/oscar/results.html:17
msgid "Search results"
@@ -821,7 +821,7 @@ msgstr "Suche nach:"
#: searx/templates/oscar/results.html:100
#: searx/templates/simple/results.html:25
msgid "Engines cannot retrieve results"
-msgstr "Suchmaschinen können die Ergebnisse nicht empfangen"
+msgstr "Die folgenden Suchmaschinen können die Ergebnisse nicht empfangen"
#: searx/templates/oscar/results.html:131
msgid "Links"
@@ -855,7 +855,7 @@ msgstr "Letzte Woche"
#: searx/templates/oscar/time-range.html:12
#: searx/templates/simple/time-range.html:12
msgid "Last month"
-msgstr "Letztes Monat"
+msgstr "Letzten Monat"
#: searx/templates/oscar/time-range.html:15
#: searx/templates/simple/time-range.html:15
diff --git a/searx/translations/el_GR/LC_MESSAGES/messages.po b/searx/translations/el_GR/LC_MESSAGES/messages.po
index 5c8265b..073f2f6 100644
--- a/searx/translations/el_GR/LC_MESSAGES/messages.po
+++ b/searx/translations/el_GR/LC_MESSAGES/messages.po
@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PROJECT project.
#
# Translators:
-# xinomilo <dimitris@stinpriza.org>, 2017
+# xinomilo <dimitris@stinpriza.org>, 2017-2018
# xinomilo <dimitris@stinpriza.org>, 2015
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-15 20:20+0000\n"
+"PO-Revision-Date: 2018-01-17 10:03+0000\n"
"Last-Translator: xinomilo <dimitris@stinpriza.org>\n"
"Language-Team: Greek (Greece) (http://www.transifex.com/asciimoo/searx/language/el_GR/)\n"
"MIME-Version: 1.0\n"
@@ -94,7 +94,7 @@ msgstr ""
#: searx/answerers/random/answerer.py:53
msgid "Random value generator"
-msgstr ""
+msgstr "Γεννήτρια τυχαίων τιμών"
#: searx/answerers/random/answerer.py:54
msgid "Generate different random values"
@@ -182,19 +182,19 @@ msgstr ""
#: searx/plugins/search_on_category_select.py:18
msgid "Search on category select"
-msgstr ""
+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 ""
+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 ""
+msgstr "Προβολή της IP διεύθυνσης αν η αναζήτηση είναι \"ip\" και το user agent αν η αναζήτηση περιέχει \"user agent\"."
#: searx/plugins/tracker_url_remover.py:26
msgid "Tracker URL remover"
@@ -399,7 +399,7 @@ msgstr "Κόκκινο"
#: searx/templates/pix-art/preferences.html:49
#: searx/templates/simple/preferences.html:77
msgid "Currently used search engines"
-msgstr ""
+msgstr "Μηχανές αναζήτησης που χρησιμοποιούνται"
#: searx/templates/courgette/preferences.html:100
#: searx/templates/legacy/preferences.html:97
@@ -558,7 +558,7 @@ msgstr ""
#: searx/templates/oscar/macros.html:23
#: searx/templates/simple/result_templates/torrent.html:6
msgid "magnet link"
-msgstr ""
+msgstr "σύνδεσμος magnet"
#: searx/templates/courgette/result_templates/torrent.html:10
#: searx/templates/legacy/result_templates/torrent.html:10
diff --git a/searx/translations/es/LC_MESSAGES/messages.po b/searx/translations/es/LC_MESSAGES/messages.po
index 71f3fb6..4c27630 100644
--- a/searx/translations/es/LC_MESSAGES/messages.po
+++ b/searx/translations/es/LC_MESSAGES/messages.po
@@ -5,10 +5,12 @@
# Translators:
# Adam Tauber <asciimoo@gmail.com>, 2015
# Alejandro León Aznar, 2014
-# Alejandro León Aznar, 2014-2017
+# Alejandro León Aznar, 2014-2018
# Carmen Fernández B., 2016
# juanda097 <juanda097@protonmail.ch>, 2016
+# juanda097 <juanda097@protonmail.ch>, 2017
# Marc Abonce Seguin, 2016
+# Marc Abonce Seguin, 2018
# Oscar <ocf@openmailbox.org>, 2015
# rivera valdez <riveravaldezmail@gmail.com>, 2016
# wefwefew ewfewfewf <nnnedmz0d@moakt.ws>, 2016
@@ -17,8 +19,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-01 20:31+0000\n"
-"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
+"PO-Revision-Date: 2018-02-16 05:29+0000\n"
+"Last-Translator: Marc Abonce Seguin\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"
@@ -29,15 +31,15 @@ msgstr ""
#: searx/search.py:137 searx/search.py:182
msgid "timeout"
-msgstr ""
+msgstr "límite de tiempo"
#: searx/search.py:144
msgid "request exception"
-msgstr ""
+msgstr "solicitud de excepción"
#: searx/search.py:151
msgid "unexpected crash"
-msgstr ""
+msgstr "choque inesperado"
#: searx/webapp.py:136
msgid "files"
@@ -85,7 +87,7 @@ msgstr "Parámetros incorrectos, por favor, cambia tus preferencias"
#: searx/webapp.py:415
msgid "Invalid settings"
-msgstr ""
+msgstr "Ajustes no válidos"
#: searx/webapp.py:449 searx/webapp.py:493
msgid "search error"
@@ -151,7 +153,7 @@ msgstr "Esta entrada la ha sustituido"
#: searx/engines/pubmed.py:74
msgid "No abstract is available for this publication."
-msgstr ""
+msgstr "No hay resúmenes disponibles para esta publicación."
#: searx/plugins/https_rewrite.py:32
msgid "Rewrite HTTP links to HTTPS if possible"
@@ -638,11 +640,11 @@ msgstr "proxied"
#: searx/templates/oscar/macros.html:92
msgid "supported"
-msgstr ""
+msgstr "soportado"
#: searx/templates/oscar/macros.html:96
msgid "not supported"
-msgstr ""
+msgstr "no soportado"
#: searx/templates/oscar/preferences.html:13
#: searx/templates/oscar/preferences.html:22
@@ -726,7 +728,7 @@ msgstr ""
msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
-msgstr ""
+msgstr "Redireccionar a versiones de acceso abierto de las publicaciones cuando estén disponibles (se requiere plugin)"
#: searx/templates/oscar/preferences.html:163
#: searx/templates/oscar/preferences.html:175
@@ -737,7 +739,7 @@ msgstr "Atajo"
#: searx/templates/oscar/preferences.html:164
#: searx/templates/oscar/preferences.html:174
msgid "Selected language"
-msgstr "Elegir idioma"
+msgstr "Idioma elegido"
#: searx/templates/oscar/preferences.html:166
#: searx/templates/oscar/preferences.html:172
@@ -797,13 +799,13 @@ msgstr "Valor"
#: searx/templates/oscar/preferences.html:301
msgid "Search URL of the currently saved preferences"
-msgstr ""
+msgstr "Buscar URL de las preferencias guardadas actualmente"
#: searx/templates/oscar/preferences.html:301
msgid ""
"Note: specifying custom settings in the search URL can reduce privacy by "
"leaking data to the clicked result sites."
-msgstr ""
+msgstr "Nota: especificar configuraciones personalizadas en la URL de búsqueda puede reducir la privacidad al filtrar datos a los sitios de resultados en los que se ha hecho clic."
#: searx/templates/oscar/results.html:17
msgid "Search results"
@@ -817,7 +819,7 @@ msgstr "Intenta buscar:"
#: searx/templates/oscar/results.html:100
#: searx/templates/simple/results.html:25
msgid "Engines cannot retrieve results"
-msgstr ""
+msgstr "Los motores no pueden obtener resultados"
#: searx/templates/oscar/results.html:131
msgid "Links"
@@ -882,12 +884,12 @@ msgstr "Actualmente no hay datos disponibles."
#: searx/templates/oscar/messages/no_results.html:4
#: searx/templates/simple/messages/no_results.html:4
msgid "Engines cannot retrieve results."
-msgstr ""
+msgstr "Los motores no pueden obtener resultados."
#: searx/templates/oscar/messages/no_results.html:10
#: searx/templates/simple/messages/no_results.html:10
msgid "Please, try again later or find another searx instance."
-msgstr ""
+msgstr "Por favor, inténtelo de nuevo más tarde o busque otra instancia de searx."
#: searx/templates/oscar/messages/no_results.html:14
#: searx/templates/simple/messages/no_results.html:14
@@ -1006,7 +1008,7 @@ msgstr "Cargar más"
#: searx/templates/simple/base.html:31
msgid "No item found"
-msgstr ""
+msgstr "Ningún artículo encontrado"
#: searx/templates/simple/preferences.html:89
msgid "Supports selected language"
diff --git a/searx/translations/fil/LC_MESSAGES/messages.po b/searx/translations/fil/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..12337e0
--- /dev/null
+++ b/searx/translations/fil/LC_MESSAGES/messages.po
@@ -0,0 +1,1014 @@
+# Translations template for PROJECT.
+# Copyright (C) 2017 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+#
+# Translators:
+# GR01D, 2018
+# GR01D, 2018
+msgid ""
+msgstr ""
+"Project-Id-Version: searx\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2017-11-01 21:31+0100\n"
+"PO-Revision-Date: 2018-02-18 04:45+0000\n"
+"Last-Translator: GR01D\n"
+"Language-Team: Filipino (http://www.transifex.com/asciimoo/searx/language/fil/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.3.4\n"
+"Language: fil\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n==2 || n==3) || (n % 10 != 4 || n % 10 != 6 || n % 10 != 9);\n"
+
+#: searx/search.py:137 searx/search.py:182
+msgid "timeout"
+msgstr "timeout"
+
+#: searx/search.py:144
+msgid "request exception"
+msgstr "request exception"
+
+#: searx/search.py:151
+msgid "unexpected crash"
+msgstr "hindi inaasahan na crash"
+
+#: searx/webapp.py:136
+msgid "files"
+msgstr "file"
+
+#: searx/webapp.py:137
+msgid "general"
+msgstr "pangkalahatan"
+
+#: searx/webapp.py:138
+msgid "music"
+msgstr "musika"
+
+#: searx/webapp.py:139
+msgid "social media"
+msgstr "social media"
+
+#: searx/webapp.py:140
+msgid "images"
+msgstr "larawan"
+
+#: searx/webapp.py:141
+msgid "videos"
+msgstr "bidyo"
+
+#: searx/webapp.py:142
+msgid "it"
+msgstr "it"
+
+#: searx/webapp.py:143
+msgid "news"
+msgstr "balita"
+
+#: searx/webapp.py:144
+msgid "map"
+msgstr "mapa"
+
+#: searx/webapp.py:145
+msgid "science"
+msgstr "agham"
+
+#: searx/webapp.py:399 searx/webapp.py:658
+msgid "Invalid settings, please edit your preferences"
+msgstr "Maling settings, paki ayos ang preferences"
+
+#: searx/webapp.py:415
+msgid "Invalid settings"
+msgstr "Maling settings"
+
+#: searx/webapp.py:449 searx/webapp.py:493
+msgid "search error"
+msgstr "nagkaproblema sa paghahanap"
+
+#: searx/webapp.py:530
+msgid "{minutes} minute(s) ago"
+msgstr "{minutes} na minuto ang nakalipas"
+
+#: searx/webapp.py:532
+msgid "{hours} hour(s), {minutes} minute(s) ago"
+msgstr "{hours} oras at {minutes} na minto ang nakalipas"
+
+#: searx/answerers/random/answerer.py:53
+msgid "Random value generator"
+msgstr "Random value generator"
+
+#: searx/answerers/random/answerer.py:54
+msgid "Generate different random values"
+msgstr "Generate different random values"
+
+#: searx/answerers/statistics/answerer.py:53
+msgid "Statistics functions"
+msgstr "Estatistika ng mga tungkulin"
+
+#: searx/answerers/statistics/answerer.py:54
+msgid "Compute {functions} of the arguments"
+msgstr "Tuusin ang {functions} ng pangangatuwiran"
+
+#: searx/engines/__init__.py:194 searx/engines/flycheck___init__.py:201
+msgid "Engine time (sec)"
+msgstr "Oras ng engine (segundo)"
+
+#: searx/engines/__init__.py:198 searx/engines/flycheck___init__.py:205
+msgid "Page loads (sec)"
+msgstr "Oras ng pagkarga ng pahina (segundo)"
+
+#: searx/engines/__init__.py:202 searx/engines/flycheck___init__.py:209
+#: searx/templates/oscar/results.html:95
+#: searx/templates/simple/results.html:20
+msgid "Number of results"
+msgstr "Bilang ng resulta"
+
+#: searx/engines/__init__.py:206 searx/engines/flycheck___init__.py:213
+msgid "Scores"
+msgstr "Iskor"
+
+#: searx/engines/__init__.py:210 searx/engines/flycheck___init__.py:217
+msgid "Scores per result"
+msgstr "Iskor ng bawat resulta"
+
+#: searx/engines/__init__.py:214 searx/engines/flycheck___init__.py:221
+msgid "Errors"
+msgstr "Kamalian"
+
+#: searx/engines/pdbe.py:87
+msgid "{title}&nbsp;(OBSOLETE)"
+msgstr "{title}&nbsp;(LUMA)"
+
+#: searx/engines/pdbe.py:91
+msgid "This entry has been superseded by"
+msgstr "Ang tala na ito ay ipinagpaliban ng"
+
+#: searx/engines/pubmed.py:74
+msgid "No abstract is available for this publication."
+msgstr "Walang nakita na abstract para sa pahahayag na ito."
+
+#: searx/plugins/https_rewrite.py:32
+msgid "Rewrite HTTP links to HTTPS if possible"
+msgstr "Palitan ang HTTP links patungo sa HTTPS hanggat maaari"
+
+#: searx/plugins/infinite_scroll.py:3
+msgid "Infinite scroll"
+msgstr "Walang hanggan na pag-scroll"
+
+#: searx/plugins/infinite_scroll.py:4
+msgid "Automatically load next page when scrolling to bottom of current page"
+msgstr "Awtomatiko na ikarga ang sumunod na pahina kapag nakarating na sa dulo ng kasalukuyang pahina"
+
+#: searx/plugins/oa_doi_rewrite.py:9
+msgid "Open Access DOI rewrite"
+msgstr "Open Access DOI rewrite"
+
+#: searx/plugins/oa_doi_rewrite.py:10
+msgid ""
+"Avoid paywalls by redirecting to open-access versions of publications when "
+"available"
+msgstr "Iwasan ang paywall sa pag-redirect sa open-access na bersyon ng pahahayagan kapagmakukuha"
+
+#: searx/plugins/open_results_on_new_tab.py:18
+#: searx/templates/oscar/preferences.html:114
+#: searx/templates/simple/preferences.html:149
+msgid "Open result links on new browser tabs"
+msgstr "Buksan ang resulta sa panibagong browser tab"
+
+#: searx/plugins/open_results_on_new_tab.py:19
+msgid ""
+"Results are opened in the same window by default. This plugin overwrites the"
+" default behaviour to open links on new tabs/windows. (JavaScript required)"
+msgstr "Ang mga resulta ang bubuksan sa kasalukuyan window, ito ay ang default. Ang plugin na ito ay babaliwalain ang default na kilos sa pagbukas ng panibagong link sa bagong tab/window."
+
+#: searx/plugins/search_on_category_select.py:18
+msgid "Search on category select"
+msgstr "Maghanap kapag nakapili ng uri"
+
+#: searx/plugins/search_on_category_select.py:19
+msgid ""
+"Perform search immediately if a category selected. Disable to select "
+"multiple categories. (JavaScript required)"
+msgstr "Gawin ang paghahanap hanggat maaari kapag nakapili ng uri. Alisin kapag nakapili ng maraming uri. (Nangagailangan ng 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 "Ipapakita ang iyong IP kapag ang tanong ay \"ip\" at ang iyong user agent kapag ang sa tanong ay naglalaman ng \"user agent\"."
+
+#: searx/plugins/tracker_url_remover.py:26
+msgid "Tracker URL remover"
+msgstr "Alisin ang URL tracker"
+
+#: searx/plugins/tracker_url_remover.py:27
+msgid "Remove trackers arguments from the returned URL"
+msgstr "Alisin ang tracker sa ibabalik na URL"
+
+#: searx/plugins/vim_hotkeys.py:3
+msgid "Vim-like hotkeys"
+msgstr "Vim-like hotkeys"
+
+#: searx/plugins/vim_hotkeys.py:4
+msgid ""
+"Navigate search results with Vim-like hotkeys (JavaScript required). Press "
+"\"h\" key on main or result page to get help."
+msgstr "Maglakbay sa resulta ng paghahanap gamit ang 'Vim-like hotkeys' (Nangagailangan ito ng JavaScript). Pindutin ang \"h\" na pindutan sa panguna o ang pahina ng resulta para makahingi ng tulong."
+
+#: searx/templates/courgette/404.html:4 searx/templates/legacy/404.html:4
+#: searx/templates/oscar/404.html:4 searx/templates/pix-art/404.html:4
+#: searx/templates/simple/404.html:4
+msgid "Page not found"
+msgstr "Hindi natagpuan ang pahina"
+
+#: searx/templates/courgette/404.html:6 searx/templates/legacy/404.html:6
+#: searx/templates/oscar/404.html:6 searx/templates/pix-art/404.html:6
+#: searx/templates/simple/404.html:6
+#, python-format
+msgid "Go to %(search_page)s."
+msgstr "Pumunta sa %(search_page)s."
+
+#: searx/templates/courgette/404.html:6 searx/templates/legacy/404.html:6
+#: searx/templates/oscar/404.html:6 searx/templates/pix-art/404.html:6
+#: searx/templates/simple/404.html:6
+msgid "search page"
+msgstr "ang pahina ng paghahanap"
+
+#: searx/templates/courgette/index.html:9
+#: searx/templates/courgette/index.html:13
+#: searx/templates/courgette/results.html:5
+#: searx/templates/legacy/index.html:8 searx/templates/legacy/index.html:12
+#: searx/templates/oscar/navbar.html:7
+#: searx/templates/oscar/preferences.html:3
+#: searx/templates/pix-art/index.html:8
+msgid "preferences"
+msgstr "preferences"
+
+#: searx/templates/courgette/index.html:11
+#: searx/templates/legacy/index.html:10 searx/templates/oscar/about.html:2
+#: searx/templates/oscar/navbar.html:6 searx/templates/pix-art/index.html:7
+msgid "about"
+msgstr "hinggil"
+
+#: searx/templates/courgette/preferences.html:5
+#: searx/templates/legacy/preferences.html:5
+#: searx/templates/oscar/preferences.html:8
+#: searx/templates/pix-art/preferences.html:5
+#: searx/templates/simple/preferences.html:26
+msgid "Preferences"
+msgstr "Preferences"
+
+#: searx/templates/courgette/preferences.html:9
+#: searx/templates/legacy/preferences.html:9
+#: searx/templates/oscar/preferences.html:33
+#: searx/templates/oscar/preferences.html:35
+#: searx/templates/simple/preferences.html:34
+msgid "Default categories"
+msgstr "Ang mga default na uri"
+
+#: searx/templates/courgette/preferences.html:13
+#: searx/templates/legacy/preferences.html:14
+#: searx/templates/oscar/preferences.html:41
+#: searx/templates/pix-art/preferences.html:9
+#: searx/templates/simple/preferences.html:39
+#: searx/templates/simple/preferences.html:163
+msgid "Search language"
+msgstr "Ang wika ng paghahanap"
+
+#: searx/templates/courgette/preferences.html:16
+#: searx/templates/legacy/preferences.html:17
+#: searx/templates/oscar/languages.html:6
+#: searx/templates/pix-art/preferences.html:12
+#: searx/templates/simple/languages.html:2
+#: searx/templates/simple/preferences.html:42
+msgid "Default language"
+msgstr "Default na wika"
+
+#: searx/templates/courgette/preferences.html:24
+#: searx/templates/legacy/preferences.html:25
+#: searx/templates/oscar/preferences.html:47
+#: searx/templates/pix-art/preferences.html:20
+#: searx/templates/simple/preferences.html:120
+msgid "Interface language"
+msgstr "Ang wika ng Interface"
+
+#: searx/templates/courgette/preferences.html:34
+#: searx/templates/legacy/preferences.html:35
+#: searx/templates/oscar/preferences.html:57
+#: searx/templates/simple/preferences.html:51
+msgid "Autocomplete"
+msgstr "Autocomplete"
+
+#: searx/templates/courgette/preferences.html:45
+#: searx/templates/legacy/preferences.html:46
+#: searx/templates/oscar/preferences.html:68
+#: searx/templates/simple/preferences.html:166
+msgid "Image proxy"
+msgstr "Proxy ng larawan"
+
+#: searx/templates/courgette/preferences.html:48
+#: searx/templates/legacy/preferences.html:49
+#: searx/templates/oscar/preferences.html:72
+#: searx/templates/simple/preferences.html:169
+msgid "Enabled"
+msgstr "Paganahin"
+
+#: searx/templates/courgette/preferences.html:49
+#: searx/templates/legacy/preferences.html:50
+#: searx/templates/oscar/preferences.html:73
+#: searx/templates/simple/preferences.html:170
+msgid "Disabled"
+msgstr "Hindi paganahin"
+
+#: searx/templates/courgette/preferences.html:54
+#: searx/templates/legacy/preferences.html:55
+#: searx/templates/oscar/preferences.html:77
+#: searx/templates/pix-art/preferences.html:30
+#: searx/templates/simple/preferences.html:156
+msgid "Method"
+msgstr "Paraan"
+
+#: searx/templates/courgette/preferences.html:63
+#: searx/templates/legacy/preferences.html:64
+#: searx/templates/oscar/preferences.html:86
+#: searx/templates/oscar/preferences.html:165
+#: searx/templates/oscar/preferences.html:173
+#: searx/templates/simple/preferences.html:63
+#: searx/templates/simple/preferences.html:90
+msgid "SafeSearch"
+msgstr "Ligtas na Paghahanap"
+
+#: searx/templates/courgette/preferences.html:66
+#: searx/templates/legacy/preferences.html:67
+#: searx/templates/oscar/preferences.html:90
+#: searx/templates/simple/preferences.html:66
+msgid "Strict"
+msgstr "Mahigpit"
+
+#: searx/templates/courgette/preferences.html:67
+#: searx/templates/legacy/preferences.html:68
+#: searx/templates/oscar/preferences.html:91
+#: searx/templates/simple/preferences.html:67
+msgid "Moderate"
+msgstr "Banayad"
+
+#: searx/templates/courgette/preferences.html:68
+#: searx/templates/legacy/preferences.html:69
+#: searx/templates/oscar/preferences.html:92
+#: searx/templates/simple/preferences.html:68
+msgid "None"
+msgstr "Wala"
+
+#: searx/templates/courgette/preferences.html:73
+#: searx/templates/legacy/preferences.html:74
+#: searx/templates/oscar/preferences.html:96
+#: searx/templates/pix-art/preferences.html:39
+#: searx/templates/simple/preferences.html:131
+msgid "Themes"
+msgstr "Tema"
+
+#: searx/templates/courgette/preferences.html:83
+msgid "Color"
+msgstr "Kulay"
+
+#: searx/templates/courgette/preferences.html:86
+msgid "Blue (default)"
+msgstr "Asul (default)"
+
+#: searx/templates/courgette/preferences.html:87
+msgid "Violet"
+msgstr "Byoleta"
+
+#: searx/templates/courgette/preferences.html:88
+msgid "Green"
+msgstr "Berde"
+
+#: searx/templates/courgette/preferences.html:89
+msgid "Cyan"
+msgstr "Siyano"
+
+#: searx/templates/courgette/preferences.html:90
+msgid "Orange"
+msgstr "Kulay-dalandan"
+
+#: searx/templates/courgette/preferences.html:91
+msgid "Red"
+msgstr "Pula"
+
+#: searx/templates/courgette/preferences.html:96
+#: searx/templates/legacy/preferences.html:93
+#: searx/templates/pix-art/preferences.html:49
+#: searx/templates/simple/preferences.html:77
+msgid "Currently used search engines"
+msgstr "Ang ginagamit natin na search engines"
+
+#: searx/templates/courgette/preferences.html:100
+#: searx/templates/legacy/preferences.html:97
+#: searx/templates/oscar/preferences.html:162
+#: searx/templates/oscar/preferences.html:176
+#: searx/templates/pix-art/preferences.html:53
+#: searx/templates/simple/preferences.html:87
+msgid "Engine name"
+msgstr "Pangalan ng engine"
+
+#: searx/templates/courgette/preferences.html:101
+#: searx/templates/legacy/preferences.html:98
+msgid "Category"
+msgstr "Uri"
+
+#: searx/templates/courgette/preferences.html:102
+#: searx/templates/courgette/preferences.html:113
+#: searx/templates/legacy/preferences.html:99
+#: searx/templates/legacy/preferences.html:110
+#: searx/templates/oscar/preferences.html:161
+#: searx/templates/oscar/preferences.html:177
+#: searx/templates/pix-art/preferences.html:54
+#: searx/templates/pix-art/preferences.html:64
+#: searx/templates/simple/preferences.html:86
+msgid "Allow"
+msgstr "Payagan"
+
+#: searx/templates/courgette/preferences.html:102
+#: searx/templates/courgette/preferences.html:114
+#: searx/templates/legacy/preferences.html:99
+#: searx/templates/legacy/preferences.html:111
+#: searx/templates/pix-art/preferences.html:54
+#: searx/templates/pix-art/preferences.html:65
+msgid "Block"
+msgstr "Harangan"
+
+#: searx/templates/courgette/preferences.html:122
+#: searx/templates/legacy/preferences.html:119
+#: searx/templates/oscar/preferences.html:297
+#: searx/templates/pix-art/preferences.html:73
+#: searx/templates/simple/preferences.html:180
+msgid ""
+"These settings are stored in your cookies, this allows us not to store this "
+"data about you."
+msgstr "Ang settings ay nakalagay sa cookies upang hindi kami makakuha ng datos mula sa iyo."
+
+#: searx/templates/courgette/preferences.html:124
+#: searx/templates/legacy/preferences.html:121
+#: searx/templates/oscar/preferences.html:299
+#: searx/templates/pix-art/preferences.html:75
+#: searx/templates/simple/preferences.html:182
+msgid ""
+"These cookies serve your sole convenience, we don't use these cookies to "
+"track you."
+msgstr "Hindi namin ginagamit ang cookies para i-track ka, ito ay para maging maayos ang paggamit mo."
+
+#: searx/templates/courgette/preferences.html:127
+#: searx/templates/legacy/preferences.html:124
+#: searx/templates/oscar/preferences.html:305
+#: searx/templates/pix-art/preferences.html:78
+#: searx/templates/simple/preferences.html:185
+msgid "save"
+msgstr "i-save"
+
+#: searx/templates/courgette/preferences.html:128
+#: searx/templates/legacy/preferences.html:125
+#: searx/templates/oscar/preferences.html:307
+#: searx/templates/simple/preferences.html:186
+msgid "Reset defaults"
+msgstr "I-reset ang defaults"
+
+#: searx/templates/courgette/preferences.html:129
+#: searx/templates/legacy/preferences.html:126
+#: searx/templates/oscar/preferences.html:306
+#: searx/templates/pix-art/preferences.html:79
+#: searx/templates/simple/preferences.html:187
+msgid "back"
+msgstr "bumalik"
+
+#: searx/templates/courgette/results.html:12
+#: searx/templates/legacy/results.html:13
+#: searx/templates/oscar/results.html:136
+#: searx/templates/simple/results.html:58
+msgid "Search URL"
+msgstr "URL ng Search"
+
+#: searx/templates/courgette/results.html:16
+#: searx/templates/legacy/results.html:17
+#: searx/templates/oscar/results.html:141
+#: searx/templates/simple/results.html:62
+msgid "Download results"
+msgstr "I-download ang mga resulta"
+
+#: searx/templates/courgette/results.html:34
+#: searx/templates/legacy/results.html:35
+#: searx/templates/simple/results.html:10
+msgid "Answers"
+msgstr "Mga sagot"
+
+#: searx/templates/courgette/results.html:42
+#: searx/templates/legacy/results.html:43
+#: searx/templates/oscar/results.html:116
+#: searx/templates/simple/results.html:42
+msgid "Suggestions"
+msgstr "Mga mungkahi"
+
+#: searx/templates/courgette/results.html:70
+#: searx/templates/legacy/results.html:81
+#: searx/templates/oscar/results.html:68 searx/templates/oscar/results.html:78
+#: searx/templates/simple/results.html:130
+msgid "previous page"
+msgstr "bumalik sa nakaraang pahina"
+
+#: searx/templates/courgette/results.html:81
+#: searx/templates/legacy/results.html:92
+#: searx/templates/oscar/results.html:62 searx/templates/oscar/results.html:84
+#: searx/templates/simple/results.html:145
+msgid "next page"
+msgstr "pumanhik sa sumunod na pahina"
+
+#: searx/templates/courgette/search.html:3
+#: searx/templates/legacy/search.html:3 searx/templates/oscar/search.html:6
+#: searx/templates/oscar/search_full.html:9
+#: searx/templates/pix-art/search.html:3 searx/templates/simple/search.html:4
+msgid "Search for..."
+msgstr "Maghanap ng..."
+
+#: searx/templates/courgette/stats.html:4 searx/templates/legacy/stats.html:4
+#: searx/templates/oscar/stats.html:5 searx/templates/pix-art/stats.html:4
+#: searx/templates/simple/stats.html:7
+msgid "Engine stats"
+msgstr "Engine stats"
+
+#: searx/templates/courgette/result_templates/images.html:4
+#: searx/templates/legacy/result_templates/images.html:4
+#: searx/templates/pix-art/result_templates/images.html:4
+msgid "original context"
+msgstr "orihinal na nilalaman"
+
+#: searx/templates/courgette/result_templates/torrent.html:7
+#: searx/templates/legacy/result_templates/torrent.html:11
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/simple/result_templates/torrent.html:9
+msgid "Seeder"
+msgstr "Seeder"
+
+#: searx/templates/courgette/result_templates/torrent.html:7
+#: searx/templates/legacy/result_templates/torrent.html:11
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/simple/result_templates/torrent.html:9
+msgid "Leecher"
+msgstr "Leecher"
+
+#: searx/templates/courgette/result_templates/torrent.html:9
+#: searx/templates/legacy/result_templates/torrent.html:9
+#: searx/templates/oscar/macros.html:23
+#: searx/templates/simple/result_templates/torrent.html:6
+msgid "magnet link"
+msgstr "i-magnet ang link"
+
+#: searx/templates/courgette/result_templates/torrent.html:10
+#: searx/templates/legacy/result_templates/torrent.html:10
+#: searx/templates/oscar/macros.html:24
+#: searx/templates/simple/result_templates/torrent.html:7
+msgid "torrent file"
+msgstr "torrent file"
+
+#: searx/templates/legacy/categories.html:8
+#: searx/templates/simple/categories.html:6
+msgid "Click on the magnifier to perform search"
+msgstr "Pindutin ang magnifier para maghanap"
+
+#: searx/templates/legacy/preferences.html:84
+#: searx/templates/oscar/preferences.html:113
+#: searx/templates/simple/preferences.html:142
+msgid "Results on new tabs"
+msgstr "Ang resulta ay na sa bagong tab"
+
+#: searx/templates/legacy/preferences.html:87
+#: searx/templates/oscar/preferences.html:117
+#: searx/templates/simple/preferences.html:145
+msgid "On"
+msgstr "Bukas"
+
+#: searx/templates/legacy/preferences.html:88
+#: searx/templates/oscar/preferences.html:118
+#: searx/templates/simple/preferences.html:146
+msgid "Off"
+msgstr "Sara"
+
+#: searx/templates/legacy/result_templates/code.html:3
+#: searx/templates/legacy/result_templates/default.html:3
+#: searx/templates/legacy/result_templates/map.html:9
+#: searx/templates/oscar/macros.html:34 searx/templates/oscar/macros.html:48
+#: searx/templates/simple/macros.html:43
+msgid "cached"
+msgstr "cached"
+
+#: searx/templates/oscar/advanced.html:4
+msgid "Advanced settings"
+msgstr "Advanced settings"
+
+#: searx/templates/oscar/base.html:62
+#: searx/templates/oscar/messages/first_time.html:4
+#: searx/templates/oscar/messages/save_settings_successfull.html:5
+#: searx/templates/oscar/messages/unknow_error.html:5
+msgid "Close"
+msgstr "Isara"
+
+#: searx/templates/oscar/base.html:64
+#: searx/templates/oscar/messages/no_results.html:4
+#: searx/templates/simple/messages/no_results.html:4
+#: searx/templates/simple/results.html:25
+msgid "Error!"
+msgstr "Kamalian!"
+
+#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:55
+msgid "Powered by"
+msgstr "Pinapatakbo ng"
+
+#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:55
+msgid "a privacy-respecting, hackable metasearch engine"
+msgstr "isang gumagalang sa pagiging pribado, hackable na metasearch engine"
+
+#: searx/templates/oscar/macros.html:36 searx/templates/oscar/macros.html:50
+#: searx/templates/simple/macros.html:43
+msgid "proxied"
+msgstr "proxied"
+
+#: searx/templates/oscar/macros.html:92
+msgid "supported"
+msgstr "suportado"
+
+#: searx/templates/oscar/macros.html:96
+msgid "not supported"
+msgstr "hindi suportado"
+
+#: searx/templates/oscar/preferences.html:13
+#: searx/templates/oscar/preferences.html:22
+#: searx/templates/simple/preferences.html:32
+msgid "General"
+msgstr "Pangkalahatan"
+
+#: searx/templates/oscar/preferences.html:14
+#: searx/templates/oscar/preferences.html:146
+#: searx/templates/simple/preferences.html:76
+msgid "Engines"
+msgstr "Engines"
+
+#: searx/templates/oscar/preferences.html:15
+#: searx/templates/oscar/preferences.html:219
+msgid "Plugins"
+msgstr "Plugins"
+
+#: searx/templates/oscar/preferences.html:16
+#: searx/templates/oscar/preferences.html:245
+msgid "Answerers"
+msgstr "Mga pangsagot"
+
+#: searx/templates/oscar/preferences.html:17
+#: searx/templates/oscar/preferences.html:272
+msgid "Cookies"
+msgstr "Cookies"
+
+#: searx/templates/oscar/preferences.html:42
+#: searx/templates/simple/preferences.html:48
+msgid "What language do you prefer for search?"
+msgstr "Ano ang gusto mong wika sa paghahanap?"
+
+#: searx/templates/oscar/preferences.html:48
+#: searx/templates/simple/preferences.html:128
+msgid "Change the language of the layout"
+msgstr "Ibahin ang wika ng layout"
+
+#: searx/templates/oscar/preferences.html:58
+#: searx/templates/simple/preferences.html:60
+msgid "Find stuff as you type"
+msgstr "Maghanap habang ikaw ang nag-tytype"
+
+#: searx/templates/oscar/preferences.html:69
+#: searx/templates/simple/preferences.html:173
+msgid "Proxying image results through searx"
+msgstr "I-Proxy ang resulta ng mga larawan papunta sa searx"
+
+#: searx/templates/oscar/preferences.html:78
+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 "Ibahin kung paano ang mga forms are pinapasa, <a href=\"http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#Request_methods\" rel=\"external\">alamin ang iba pang mga request methods</a>"
+
+#: searx/templates/oscar/preferences.html:87
+#: searx/templates/simple/preferences.html:71
+msgid "Filter content"
+msgstr "Salain ang mga nilalaman"
+
+#: searx/templates/oscar/preferences.html:97
+#: searx/templates/simple/preferences.html:139
+msgid "Change searx layout"
+msgstr "Ibahin ang layout ng searx"
+
+#: searx/templates/oscar/preferences.html:106
+#: searx/templates/oscar/preferences.html:111
+msgid "Choose style for this theme"
+msgstr "Pumili ng estilo para sa tema na ito"
+
+#: searx/templates/oscar/preferences.html:106
+#: searx/templates/oscar/preferences.html:111
+msgid "Style"
+msgstr "Estilo"
+
+#: searx/templates/oscar/preferences.html:122
+msgid "Open Access DOI resolver"
+msgstr "Open Access DOI resolver"
+
+#: searx/templates/oscar/preferences.html:123
+msgid ""
+"Redirect to open-access versions of publications when available (plugin "
+"required)"
+msgstr "Redirect to open-access versions of publications when available (plugin required)"
+
+#: searx/templates/oscar/preferences.html:163
+#: searx/templates/oscar/preferences.html:175
+#: searx/templates/simple/preferences.html:88
+msgid "Shortcut"
+msgstr "Shortcut"
+
+#: searx/templates/oscar/preferences.html:164
+#: searx/templates/oscar/preferences.html:174
+msgid "Selected language"
+msgstr "Piniling wika"
+
+#: searx/templates/oscar/preferences.html:166
+#: searx/templates/oscar/preferences.html:172
+#: searx/templates/simple/preferences.html:91
+msgid "Time range"
+msgstr "Agwat ng oras"
+
+#: searx/templates/oscar/preferences.html:167
+#: searx/templates/oscar/preferences.html:171
+#: searx/templates/simple/preferences.html:92
+msgid "Avg. time"
+msgstr "Gitnang oras"
+
+#: searx/templates/oscar/preferences.html:168
+#: searx/templates/oscar/preferences.html:170
+#: searx/templates/simple/preferences.html:93
+msgid "Max time"
+msgstr "Ang max na oras"
+
+#: searx/templates/oscar/preferences.html:248
+msgid "This is the list of searx's instant answering modules."
+msgstr "Ito ang listahan ng instant answering modules ni searx."
+
+#: searx/templates/oscar/preferences.html:252
+msgid "Name"
+msgstr "Pangalan"
+
+#: searx/templates/oscar/preferences.html:253
+msgid "Keywords"
+msgstr "Mga keyword"
+
+#: searx/templates/oscar/preferences.html:254
+msgid "Description"
+msgstr "Paglalarawan"
+
+#: searx/templates/oscar/preferences.html:255
+msgid "Examples"
+msgstr "Mga halimbawa"
+
+#: searx/templates/oscar/preferences.html:275
+msgid ""
+"This is the list of cookies and their values searx is storing on your "
+"computer."
+msgstr "Ito ang listahan ng cookies at ang kanilang value na inilagay ni searx sa iyon kompyuter."
+
+#: searx/templates/oscar/preferences.html:276
+msgid "With that list, you can assess searx transparency."
+msgstr "Dahil sa listahan na iyon, maaari mong makita ang pagiging transparent ni searx."
+
+#: searx/templates/oscar/preferences.html:281
+msgid "Cookie name"
+msgstr "Pangalan ng cookie"
+
+#: searx/templates/oscar/preferences.html:282
+msgid "Value"
+msgstr "Value"
+
+#: searx/templates/oscar/preferences.html:301
+msgid "Search URL of the currently saved preferences"
+msgstr "Search URL ng kasalukuyan na naka-save sa preferences"
+
+#: searx/templates/oscar/preferences.html:301
+msgid ""
+"Note: specifying custom settings in the search URL can reduce privacy by "
+"leaking data to the clicked result sites."
+msgstr "Tandaan: kapag gumawa ng sariling settings sa search URL mababawasan ang pagiging pribado dahil magkakaroon ng butas sa datos dahil sa pag-pindot sa resulta na sites."
+
+#: searx/templates/oscar/results.html:17
+msgid "Search results"
+msgstr "Mga resulta ng paghahanap"
+
+#: searx/templates/oscar/results.html:21
+#: searx/templates/simple/results.html:84
+msgid "Try searching for:"
+msgstr "Subukan maghanap ng:"
+
+#: searx/templates/oscar/results.html:100
+#: searx/templates/simple/results.html:25
+msgid "Engines cannot retrieve results"
+msgstr "Hindi makuha ng engines ang mga resulta"
+
+#: searx/templates/oscar/results.html:131
+msgid "Links"
+msgstr "Links"
+
+#: searx/templates/oscar/search.html:8
+#: searx/templates/oscar/search_full.html:11
+#: searx/templates/simple/search.html:5
+msgid "Start search"
+msgstr "Simulan ang paghahanap"
+
+#: searx/templates/oscar/stats.html:2
+msgid "stats"
+msgstr "stats"
+
+#: searx/templates/oscar/time-range.html:3
+#: searx/templates/simple/time-range.html:3
+msgid "Anytime"
+msgstr "Kahit anong oras"
+
+#: searx/templates/oscar/time-range.html:6
+#: searx/templates/simple/time-range.html:6
+msgid "Last day"
+msgstr "Nakaraang araw"
+
+#: searx/templates/oscar/time-range.html:9
+#: searx/templates/simple/time-range.html:9
+msgid "Last week"
+msgstr "Nakaraang linggo"
+
+#: searx/templates/oscar/time-range.html:12
+#: searx/templates/simple/time-range.html:12
+msgid "Last month"
+msgstr "Nakaraang buwan"
+
+#: searx/templates/oscar/time-range.html:15
+#: searx/templates/simple/time-range.html:15
+msgid "Last year"
+msgstr "Nakaraang taon"
+
+#: searx/templates/oscar/messages/first_time.html:6
+#: searx/templates/oscar/messages/no_data_available.html:3
+msgid "Heads up!"
+msgstr "Alerto!"
+
+#: searx/templates/oscar/messages/first_time.html:7
+msgid "It look like you are using searx first time."
+msgstr "Mukhang ito ang unang paggamit mo ng searx."
+
+#: searx/templates/oscar/messages/no_cookies.html:3
+msgid "Information!"
+msgstr "Impormasyon!"
+
+#: searx/templates/oscar/messages/no_cookies.html:4
+msgid "currently, there are no cookies defined."
+msgstr "wala pa sa ngayon na cookies na naka define."
+
+#: searx/templates/oscar/messages/no_data_available.html:4
+msgid "There is currently no data available. "
+msgstr "Wala pa sa ngayon na makitang datos."
+
+#: searx/templates/oscar/messages/no_results.html:4
+#: searx/templates/simple/messages/no_results.html:4
+msgid "Engines cannot retrieve results."
+msgstr "Hindi makuha ng engines ang mga resulta."
+
+#: searx/templates/oscar/messages/no_results.html:10
+#: searx/templates/simple/messages/no_results.html:10
+msgid "Please, try again later or find another searx instance."
+msgstr "Paki subukan muli o gumamit ng ibang instance ng searx."
+
+#: searx/templates/oscar/messages/no_results.html:14
+#: searx/templates/simple/messages/no_results.html:14
+msgid "Sorry!"
+msgstr "Paumanhin!"
+
+#: searx/templates/oscar/messages/no_results.html:15
+#: searx/templates/simple/messages/no_results.html:15
+msgid ""
+"we didn't find any results. Please use another query or search in more "
+"categories."
+msgstr "wala kaming nakita na resulta. Pakiusap na ibahin ang tanong o maghanap sa maraming uri."
+
+#: searx/templates/oscar/messages/save_settings_successfull.html:7
+msgid "Well done!"
+msgstr "Mahusay!"
+
+#: searx/templates/oscar/messages/save_settings_successfull.html:8
+msgid "Settings saved successfully."
+msgstr "Tagumpay sa pag-save ng settings."
+
+#: searx/templates/oscar/messages/unknow_error.html:7
+msgid "Oh snap!"
+msgstr "Naku!"
+
+#: searx/templates/oscar/messages/unknow_error.html:8
+msgid "Something went wrong."
+msgstr "Nagkaproblema."
+
+#: searx/templates/oscar/result_templates/default.html:7
+#: searx/templates/simple/result_templates/default.html:6
+msgid "show media"
+msgstr "ipakita ang media"
+
+#: searx/templates/oscar/result_templates/default.html:7
+#: searx/templates/simple/result_templates/default.html:6
+msgid "hide media"
+msgstr "itago ang media"
+
+#: searx/templates/oscar/result_templates/images.html:30
+msgid "Get image"
+msgstr "Kuhanin ang larawan"
+
+#: searx/templates/oscar/result_templates/images.html:33
+msgid "View source"
+msgstr "Tignan ang pinagkuhanan"
+
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/simple/result_templates/map.html:7
+msgid "show map"
+msgstr "ipakita ang mapa"
+
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/simple/result_templates/map.html:7
+msgid "hide map"
+msgstr "itago ang mapa"
+
+#: searx/templates/oscar/result_templates/map.html:11
+#: searx/templates/simple/result_templates/map.html:11
+msgid "show details"
+msgstr "ipakita ang nilalaman"
+
+#: searx/templates/oscar/result_templates/map.html:11
+#: searx/templates/simple/result_templates/map.html:11
+msgid "hide details"
+msgstr "itago ang nilalaman"
+
+#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/simple/result_templates/torrent.html:11
+msgid "Filesize"
+msgstr "Filesize"
+
+#: searx/templates/oscar/result_templates/torrent.html:9
+#: searx/templates/simple/result_templates/torrent.html:12
+msgid "Bytes"
+msgstr "Bytes"
+
+#: searx/templates/oscar/result_templates/torrent.html:10
+#: searx/templates/simple/result_templates/torrent.html:13
+msgid "kiB"
+msgstr "kiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:11
+#: searx/templates/simple/result_templates/torrent.html:14
+msgid "MiB"
+msgstr "MiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:12
+#: searx/templates/simple/result_templates/torrent.html:15
+msgid "GiB"
+msgstr "GiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:13
+#: searx/templates/simple/result_templates/torrent.html:16
+msgid "TiB"
+msgstr "TiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:15
+#: searx/templates/simple/result_templates/torrent.html:20
+msgid "Number of Files"
+msgstr "Bilang ng mga files"
+
+#: searx/templates/oscar/result_templates/videos.html:7
+#: searx/templates/simple/result_templates/videos.html:6
+msgid "show video"
+msgstr "ipakita ang bidyo"
+
+#: searx/templates/oscar/result_templates/videos.html:7
+#: searx/templates/simple/result_templates/videos.html:6
+msgid "hide video"
+msgstr "itago ang bidyo"
+
+#: searx/templates/pix-art/results.html:28
+msgid "Load more..."
+msgstr "Maghanap pa..."
+
+#: searx/templates/simple/base.html:31
+msgid "No item found"
+msgstr "Walang nakita na aytem"
+
+#: searx/templates/simple/preferences.html:89
+msgid "Supports selected language"
+msgstr "Suportado ang pinili na wika"
+
+#: searx/templates/simple/preferences.html:118
+msgid "User interface"
+msgstr "Ang User interface"
+
+#: searx/templates/simple/preferences.html:154
+msgid "Privacy"
+msgstr "Pagiging Pribado"
diff --git a/searx/translations/it/LC_MESSAGES/messages.po b/searx/translations/it/LC_MESSAGES/messages.po
index a06e731..b2db9b3 100644
--- a/searx/translations/it/LC_MESSAGES/messages.po
+++ b/searx/translations/it/LC_MESSAGES/messages.po
@@ -3,8 +3,9 @@
# This file is distributed under the same license as the PROJECT project.
#
# Translators:
+# Adam Tauber <asciimoo@gmail.com>, 2018
# caoswave, 2016
-# caoswave, 2016
+# caoswave, 2016-2017
# dp <d.pitrolo@gmx.com>, 2014
# dp <d.pitrolo@gmx.com>, 2014,2017
# Luca C <mybusiness@yopmail.com>, 2017
@@ -14,7 +15,7 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-01 20:31+0000\n"
+"PO-Revision-Date: 2018-02-01 22:21+0000\n"
"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/asciimoo/searx/language/it/)\n"
"MIME-Version: 1.0\n"
@@ -26,7 +27,7 @@ msgstr ""
#: searx/search.py:137 searx/search.py:182
msgid "timeout"
-msgstr ""
+msgstr "tempo scaduto"
#: searx/search.py:144
msgid "request exception"
@@ -34,7 +35,7 @@ msgstr ""
#: searx/search.py:151
msgid "unexpected crash"
-msgstr ""
+msgstr "crash inaspettato"
#: searx/webapp.py:136
msgid "files"
@@ -82,7 +83,7 @@ msgstr "Impostazioni non valide, modifica le tue preferenze"
#: searx/webapp.py:415
msgid "Invalid settings"
-msgstr ""
+msgstr "Impostazioni non valide"
#: searx/webapp.py:449 searx/webapp.py:493
msgid "search error"
@@ -94,7 +95,7 @@ msgstr "di {minutes} minuti fa"
#: searx/webapp.py:532
msgid "{hours} hour(s), {minutes} minute(s) ago"
-msgstr "di {ore} ore e {minutes} minuti fa"
+msgstr "di {hours} ore e {minutes} minuti fa"
#: searx/answerers/random/answerer.py:53
msgid "Random value generator"
@@ -164,13 +165,13 @@ msgstr "Carica automaticamente la pagina successiva quando si scorre sino alla f
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
-msgstr ""
+msgstr "Reindirizzamento Open Access DOI"
#: searx/plugins/oa_doi_rewrite.py:10
msgid ""
"Avoid paywalls by redirecting to open-access versions of publications when "
"available"
-msgstr "Se possible, evita il paywall di una pubblicazione reindirizzando ad una versione libera"
+msgstr "Se possibile, evita il paywall di una pubblicazione reindirizzando ad una versione libera"
#: searx/plugins/open_results_on_new_tab.py:18
#: searx/templates/oscar/preferences.html:114
@@ -635,11 +636,11 @@ msgstr "via proxy"
#: searx/templates/oscar/macros.html:92
msgid "supported"
-msgstr ""
+msgstr "supportato"
#: searx/templates/oscar/macros.html:96
msgid "not supported"
-msgstr ""
+msgstr "non supportato"
#: searx/templates/oscar/preferences.html:13
#: searx/templates/oscar/preferences.html:22
@@ -734,7 +735,7 @@ msgstr "Scorciatoia"
#: searx/templates/oscar/preferences.html:164
#: searx/templates/oscar/preferences.html:174
msgid "Selected language"
-msgstr ""
+msgstr "Lingua selezionata"
#: searx/templates/oscar/preferences.html:166
#: searx/templates/oscar/preferences.html:172
@@ -809,7 +810,7 @@ msgstr "Risultati della ricerca"
#: searx/templates/oscar/results.html:21
#: searx/templates/simple/results.html:84
msgid "Try searching for:"
-msgstr ""
+msgstr "Prova a cercare:"
#: searx/templates/oscar/results.html:100
#: searx/templates/simple/results.html:25
@@ -884,7 +885,7 @@ msgstr ""
#: searx/templates/oscar/messages/no_results.html:10
#: searx/templates/simple/messages/no_results.html:10
msgid "Please, try again later or find another searx instance."
-msgstr ""
+msgstr "Riprova nuovamente o cerca un'altra istanza di searx."
#: searx/templates/oscar/messages/no_results.html:14
#: searx/templates/simple/messages/no_results.html:14
@@ -1003,7 +1004,7 @@ msgstr "Carica altro..."
#: searx/templates/simple/base.html:31
msgid "No item found"
-msgstr ""
+msgstr "Nessun oggetto trovato"
#: searx/templates/simple/preferences.html:89
msgid "Supports selected language"
@@ -1011,8 +1012,8 @@ msgstr "La lingua selezionata è disponibile"
#: searx/templates/simple/preferences.html:118
msgid "User interface"
-msgstr ""
+msgstr "Interfaccia utente"
#: searx/templates/simple/preferences.html:154
msgid "Privacy"
-msgstr ""
+msgstr "Privacy"
diff --git a/searx/translations/nl/LC_MESSAGES/messages.po b/searx/translations/nl/LC_MESSAGES/messages.po
index 9194c43..1fc8700 100644
--- a/searx/translations/nl/LC_MESSAGES/messages.po
+++ b/searx/translations/nl/LC_MESSAGES/messages.po
@@ -4,14 +4,14 @@
#
# Translators:
# André Koot <meneer@tken.net>, 2014-2017
-# Nathan Follens, 2015-2017
+# Nathan Follens, 2015-2018
# Rejo Zenger <rejo@zenger.nl>, 2016-2017
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-03 11:15+0000\n"
+"PO-Revision-Date: 2018-02-15 22:43+0000\n"
"Last-Translator: Nathan Follens\n"
"Language-Team: Dutch (http://www.transifex.com/asciimoo/searx/language/nl/)\n"
"MIME-Version: 1.0\n"
@@ -27,7 +27,7 @@ msgstr "time-out"
#: searx/search.py:144
msgid "request exception"
-msgstr "request-uitzondering"
+msgstr "aanvraaguitzondering"
#: searx/search.py:151
msgid "unexpected crash"
@@ -55,7 +55,7 @@ msgstr "afbeeldingen"
#: searx/webapp.py:141
msgid "videos"
-msgstr "video's"
+msgstr "video’s"
#: searx/webapp.py:142
msgid "it"
@@ -115,7 +115,7 @@ msgstr "Snelheid zoekmachine (sec)"
#: searx/engines/__init__.py:198 searx/engines/flycheck___init__.py:205
msgid "Page loads (sec)"
-msgstr "Pagina laadt (sec)"
+msgstr "Laden van pagina’s (sec)"
#: searx/engines/__init__.py:202 searx/engines/flycheck___init__.py:209
#: searx/templates/oscar/results.html:95
@@ -157,7 +157,7 @@ msgstr "Oneindig scrollen"
#: searx/plugins/infinite_scroll.py:4
msgid "Automatically load next page when scrolling to bottom of current page"
-msgstr "Automatisch nieuwe pagina laden bij het bereiken van de onderkant van de huidige pagina"
+msgstr "Volgende pagina automatisch laden bij bereiken van de onderkant van de huidige pagina"
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
@@ -195,11 +195,11 @@ msgstr "Zoekopdracht onmiddellijk uitvoeren wanneer een categorie geselecteerd w
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."
+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"
+msgstr "Tracker-URL-verwijderaar"
#: searx/plugins/tracker_url_remover.py:27
msgid "Remove trackers arguments from the returned URL"
@@ -213,7 +213,7 @@ msgstr "Sneltoetsen als in Vim"
msgid ""
"Navigate search results with Vim-like hotkeys (JavaScript required). Press "
"\"h\" key on main or result page to get help."
-msgstr "Blader door zoekresultaten met sneltoetsen zoals die in Vim (JavaScript vereist). Druk op \"h\" op de hoofdpagina of de pagina met resultaten voor hulp."
+msgstr "Blader door zoekresultaten met sneltoetsen zoals die in Vim (JavaScript vereist). Druk op ‘h’ op de hoofdpagina of de pagina met resultaten voor hulp."
#: searx/templates/courgette/404.html:4 searx/templates/legacy/404.html:4
#: searx/templates/oscar/404.html:4 searx/templates/pix-art/404.html:4
@@ -282,7 +282,7 @@ msgstr "Zoektaal"
#: searx/templates/simple/languages.html:2
#: searx/templates/simple/preferences.html:42
msgid "Default language"
-msgstr "Standaard taal"
+msgstr "Standaardtaal"
#: searx/templates/courgette/preferences.html:24
#: searx/templates/legacy/preferences.html:25
@@ -365,7 +365,7 @@ msgstr "Geen"
#: searx/templates/pix-art/preferences.html:39
#: searx/templates/simple/preferences.html:131
msgid "Themes"
-msgstr "Thema's"
+msgstr "Thema’s"
#: searx/templates/courgette/preferences.html:83
msgid "Color"
@@ -538,21 +538,21 @@ msgstr "Zoekmachinestatistieken"
#: searx/templates/legacy/result_templates/images.html:4
#: searx/templates/pix-art/result_templates/images.html:4
msgid "original context"
-msgstr "originele inhoud"
+msgstr "oorspronkelijke context"
#: searx/templates/courgette/result_templates/torrent.html:7
#: searx/templates/legacy/result_templates/torrent.html:11
#: searx/templates/oscar/result_templates/torrent.html:6
#: searx/templates/simple/result_templates/torrent.html:9
msgid "Seeder"
-msgstr "Aanbieder"
+msgstr "Seeders"
#: searx/templates/courgette/result_templates/torrent.html:7
#: searx/templates/legacy/result_templates/torrent.html:11
#: searx/templates/oscar/result_templates/torrent.html:6
#: searx/templates/simple/result_templates/torrent.html:9
msgid "Leecher"
-msgstr "Ophaler"
+msgstr "Leechers"
#: searx/templates/courgette/result_templates/torrent.html:9
#: searx/templates/legacy/result_templates/torrent.html:9
@@ -597,7 +597,7 @@ msgstr "Uit"
#: searx/templates/oscar/macros.html:34 searx/templates/oscar/macros.html:48
#: searx/templates/simple/macros.html:43
msgid "cached"
-msgstr "gecached"
+msgstr "gecachet"
#: searx/templates/oscar/advanced.html:4
msgid "Advanced settings"
@@ -673,7 +673,7 @@ msgstr "Welke taal wil je gebruiken voor het zoeken?"
#: searx/templates/oscar/preferences.html:48
#: searx/templates/simple/preferences.html:128
msgid "Change the language of the layout"
-msgstr "Wijzig de taal van de layout"
+msgstr "Wijzig de taal van de lay-out"
#: searx/templates/oscar/preferences.html:58
#: searx/templates/simple/preferences.html:60
@@ -690,7 +690,7 @@ 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>"
+msgstr "Bepaal hoe de formulieren worden ingestuurd, <a href=\"http://nl.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP-requests\" rel=\"external\">lees meer over opvraagmethodes</a>"
#: searx/templates/oscar/preferences.html:87
#: searx/templates/simple/preferences.html:71
@@ -700,7 +700,7 @@ msgstr "Filteren op inhoud"
#: searx/templates/oscar/preferences.html:97
#: searx/templates/simple/preferences.html:139
msgid "Change searx layout"
-msgstr "Wijzig searx layout"
+msgstr "Opmaak van searx aanpassen"
#: searx/templates/oscar/preferences.html:106
#: searx/templates/oscar/preferences.html:111
@@ -714,13 +714,13 @@ msgstr "Stijl"
#: searx/templates/oscar/preferences.html:122
msgid "Open Access DOI resolver"
-msgstr "Open Access DOI oplossen"
+msgstr "Open Access DOI herschrijven"
#: searx/templates/oscar/preferences.html:123
msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
-msgstr "Doorverwijzen naar vrij toegankelijke versies van publicaties indien beschikbaar (plug-in vereist)"
+msgstr "Doorverwijzen naar vrij toegankelijke versies van publicaties, indien beschikbaar (plug-in vereist)"
#: searx/templates/oscar/preferences.html:163
#: searx/templates/oscar/preferences.html:175
@@ -753,7 +753,7 @@ msgstr "Max. duur"
#: searx/templates/oscar/preferences.html:248
msgid "This is the list of searx's instant answering modules."
-msgstr "Dit is het overzicht van searx's direct antwoordende modules."
+msgstr "Dit is het overzicht van de instantantwoordmodules van searx."
#: searx/templates/oscar/preferences.html:252
msgid "Name"
@@ -815,7 +815,7 @@ msgstr "Zoekmachines konden geen resultaten ophalen"
#: searx/templates/oscar/results.html:131
msgid "Links"
-msgstr "Links"
+msgstr "Koppelingen"
#: searx/templates/oscar/search.html:8
#: searx/templates/oscar/search_full.html:11
@@ -855,7 +855,7 @@ msgstr "Vorig jaar"
#: searx/templates/oscar/messages/first_time.html:6
#: searx/templates/oscar/messages/no_data_available.html:3
msgid "Heads up!"
-msgstr "Heads up!"
+msgstr "Opgelet!"
#: searx/templates/oscar/messages/first_time.html:7
msgid "It look like you are using searx first time."
@@ -893,7 +893,7 @@ msgstr "Sorry!"
msgid ""
"we didn't find any results. Please use another query or search in more "
"categories."
-msgstr "we kregen geen resultaat. Probeer een andere opvraag of zoek in meer categorieën."
+msgstr "We konden geen resultaten vinden. Probeer een andere zoekopdracht, of zoek in meer categorieën."
#: searx/templates/oscar/messages/save_settings_successfull.html:7
msgid "Well done!"
@@ -901,11 +901,11 @@ msgstr "Goed gedaan!"
#: searx/templates/oscar/messages/save_settings_successfull.html:8
msgid "Settings saved successfully."
-msgstr "Instellingen succesvol opgeslagen."
+msgstr "Instellingen opgeslagen."
#: searx/templates/oscar/messages/unknow_error.html:7
msgid "Oh snap!"
-msgstr "Oops!"
+msgstr "Oeps!"
#: searx/templates/oscar/messages/unknow_error.html:8
msgid "Something went wrong."
@@ -1000,7 +1000,7 @@ msgstr "Meer laden..."
#: searx/templates/simple/base.html:31
msgid "No item found"
-msgstr "Geen item gevonden"
+msgstr "Geen resultaat gevonden"
#: searx/templates/simple/preferences.html:89
msgid "Supports selected language"
diff --git a/searx/translations/pt_BR/LC_MESSAGES/messages.po b/searx/translations/pt_BR/LC_MESSAGES/messages.po
index b0496bd..b849be0 100644
--- a/searx/translations/pt_BR/LC_MESSAGES/messages.po
+++ b/searx/translations/pt_BR/LC_MESSAGES/messages.po
@@ -8,13 +8,14 @@
# Guimarães Mello <maeslor@cryptolab.net>, 2017
# Neton Brício <fervelinux@gmail.com>, 2015
# pizzaiolo, 2016
+# Shizuka 静香 <deusadaji@gmail.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-13 19:51+0000\n"
-"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
+"PO-Revision-Date: 2018-02-04 10:39+0000\n"
+"Last-Translator: Shizuka 静香 <deusadaji@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/asciimoo/searx/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -745,7 +746,7 @@ msgstr "Intervalo de tempo"
#: searx/templates/oscar/preferences.html:171
#: searx/templates/simple/preferences.html:92
msgid "Avg. time"
-msgstr "Avg.tempo"
+msgstr "Tempo médio"
#: searx/templates/oscar/preferences.html:168
#: searx/templates/oscar/preferences.html:170
@@ -813,7 +814,7 @@ msgstr "Tente pesquisar por:"
#: searx/templates/oscar/results.html:100
#: searx/templates/simple/results.html:25
msgid "Engines cannot retrieve results"
-msgstr "Os motores de busca não podem obter resultados"
+msgstr "Os motores de busca não conseguiram obter resultados"
#: searx/templates/oscar/results.html:131
msgid "Links"
@@ -832,7 +833,7 @@ msgstr "estatísticas"
#: searx/templates/oscar/time-range.html:3
#: searx/templates/simple/time-range.html:3
msgid "Anytime"
-msgstr "A qualquer tempo"
+msgstr "A qualquer momento"
#: searx/templates/oscar/time-range.html:6
#: searx/templates/simple/time-range.html:6
@@ -861,7 +862,7 @@ msgstr "Atenção!"
#: searx/templates/oscar/messages/first_time.html:7
msgid "It look like you are using searx first time."
-msgstr "Parece que você está usando searx primeira vez."
+msgstr "Parece que você está usando o searx pela primeira vez."
#: searx/templates/oscar/messages/no_cookies.html:3
msgid "Information!"
diff --git a/searx/translations/ru/LC_MESSAGES/messages.po b/searx/translations/ru/LC_MESSAGES/messages.po
index 953f1f0..66738c1 100644
--- a/searx/translations/ru/LC_MESSAGES/messages.po
+++ b/searx/translations/ru/LC_MESSAGES/messages.po
@@ -13,8 +13,8 @@ msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-01 20:31+0000\n"
-"Last-Translator: Adam Tauber <asciimoo@gmail.com>\n"
+"PO-Revision-Date: 2017-12-27 10:02+0000\n"
+"Last-Translator: Andrey\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"
@@ -147,7 +147,7 @@ msgstr "Эта запись была заменена на"
#: searx/engines/pubmed.py:74
msgid "No abstract is available for this publication."
-msgstr ""
+msgstr "Для данной публикации недоступно"
#: searx/plugins/https_rewrite.py:32
msgid "Rewrite HTTP links to HTTPS if possible"
@@ -163,7 +163,7 @@ msgstr "Автоматически загружать следующую стр
#: searx/plugins/oa_doi_rewrite.py:9
msgid "Open Access DOI rewrite"
-msgstr ""
+msgstr "Перезапись открытого доступа к DOI"
#: searx/plugins/oa_doi_rewrite.py:10
msgid ""
@@ -716,13 +716,13 @@ msgstr "Стиль"
#: searx/templates/oscar/preferences.html:122
msgid "Open Access DOI resolver"
-msgstr ""
+msgstr "Распознаватель открытого доступа к DOI"
#: searx/templates/oscar/preferences.html:123
msgid ""
"Redirect to open-access versions of publications when available (plugin "
"required)"
-msgstr ""
+msgstr "Перенаправление на открытые версии публикаций при их наличии (требуется плагин)"
#: searx/templates/oscar/preferences.html:163
#: searx/templates/oscar/preferences.html:175
diff --git a/searx/translations/sv/LC_MESSAGES/messages.po b/searx/translations/sv/LC_MESSAGES/messages.po
index 9961772..3c98e06 100644
--- a/searx/translations/sv/LC_MESSAGES/messages.po
+++ b/searx/translations/sv/LC_MESSAGES/messages.po
@@ -4,13 +4,13 @@
#
# Translators:
# Jonatan Nyberg, 2016-2017
-# Jonatan Nyberg, 2017
+# Jonatan Nyberg, 2017-2018
msgid ""
msgstr ""
"Project-Id-Version: searx\n"
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
"POT-Creation-Date: 2017-11-01 21:31+0100\n"
-"PO-Revision-Date: 2017-11-15 17:23+0000\n"
+"PO-Revision-Date: 2018-01-13 11:39+0000\n"
"Last-Translator: Jonatan Nyberg\n"
"Language-Team: Swedish (http://www.transifex.com/asciimoo/searx/language/sv/)\n"
"MIME-Version: 1.0\n"
@@ -364,7 +364,7 @@ msgstr "Inga"
#: searx/templates/pix-art/preferences.html:39
#: searx/templates/simple/preferences.html:131
msgid "Themes"
-msgstr "Teman"
+msgstr "Tema"
#: searx/templates/courgette/preferences.html:83
msgid "Color"
@@ -444,7 +444,7 @@ msgstr "Blockera"
msgid ""
"These settings are stored in your cookies, this allows us not to store this "
"data about you."
-msgstr "Dessa inställningar lagras i dina kakor, detta gör att vi inte lagrar data om dig."
+msgstr "Dessa inställningar lagras i dina kakor, vilket gör att vi inte lagrar data om dig."
#: searx/templates/courgette/preferences.html:124
#: searx/templates/legacy/preferences.html:121
@@ -454,7 +454,7 @@ msgstr "Dessa inställningar lagras i dina kakor, detta gör att vi inte lagrar
msgid ""
"These cookies serve your sole convenience, we don't use these cookies to "
"track you."
-msgstr "Dessa kakor tjänar din egen bekvämlighet, vi använder inte dessa cookies för att spåra dig."
+msgstr "Dessa kakor tjänar din egen bekvämlighet, vi använder inte dessa kakor för att spåra dig."
#: searx/templates/courgette/preferences.html:127
#: searx/templates/legacy/preferences.html:124
@@ -774,7 +774,7 @@ msgstr "Exempel"
msgid ""
"This is the list of cookies and their values searx is storing on your "
"computer."
-msgstr "Detta är en lista över kakor och deras värden searx lagrar på din dator."
+msgstr "Detta är en lista över kakor och deras värden som searx lagrar på din dator."
#: searx/templates/oscar/preferences.html:276
msgid "With that list, you can assess searx transparency."
diff --git a/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po
new file mode 100644
index 0000000..85060a0
--- /dev/null
+++ b/searx/translations/zh_Hant_TW/LC_MESSAGES/messages.po
@@ -0,0 +1,1014 @@
+# Translations template for PROJECT.
+# Copyright (C) 2017 ORGANIZATION
+# This file is distributed under the same license as the PROJECT project.
+#
+# Translators:
+# FIRST AUTHOR <EMAIL@ADDRESS>, 2016
+# Jeff Huang <s8321414@gmail.com>, 2017
+msgid ""
+msgstr ""
+"Project-Id-Version: searx\n"
+"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
+"POT-Creation-Date: 2017-11-01 21:31+0100\n"
+"PO-Revision-Date: 2017-12-28 12:58+0000\n"
+"Last-Translator: Jeff Huang <s8321414@gmail.com>\n"
+"Language-Team: Chinese (Taiwan) (http://www.transifex.com/asciimoo/searx/language/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.3.4\n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: searx/search.py:137 searx/search.py:182
+msgid "timeout"
+msgstr "逾時"
+
+#: searx/search.py:144
+msgid "request exception"
+msgstr "請求例外"
+
+#: searx/search.py:151
+msgid "unexpected crash"
+msgstr "未預期的當機"
+
+#: searx/webapp.py:136
+msgid "files"
+msgstr "檔案"
+
+#: searx/webapp.py:137
+msgid "general"
+msgstr "一般"
+
+#: searx/webapp.py:138
+msgid "music"
+msgstr "音樂"
+
+#: searx/webapp.py:139
+msgid "social media"
+msgstr "社群媒體"
+
+#: searx/webapp.py:140
+msgid "images"
+msgstr "圖片"
+
+#: searx/webapp.py:141
+msgid "videos"
+msgstr "影片"
+
+#: searx/webapp.py:142
+msgid "it"
+msgstr "IT"
+
+#: searx/webapp.py:143
+msgid "news"
+msgstr "新聞"
+
+#: searx/webapp.py:144
+msgid "map"
+msgstr "地圖"
+
+#: searx/webapp.py:145
+msgid "science"
+msgstr "科學"
+
+#: searx/webapp.py:399 searx/webapp.py:658
+msgid "Invalid settings, please edit your preferences"
+msgstr "無效的設定,請編輯您的偏好設定"
+
+#: searx/webapp.py:415
+msgid "Invalid settings"
+msgstr "無效的設定"
+
+#: searx/webapp.py:449 searx/webapp.py:493
+msgid "search error"
+msgstr "搜尋錯誤"
+
+#: searx/webapp.py:530
+msgid "{minutes} minute(s) ago"
+msgstr "{minutes} 分鐘前"
+
+#: searx/webapp.py:532
+msgid "{hours} hour(s), {minutes} minute(s) ago"
+msgstr "{hours} 小時 {minutes} 分鐘前"
+
+#: searx/answerers/random/answerer.py:53
+msgid "Random value generator"
+msgstr "隨機數值產生器"
+
+#: searx/answerers/random/answerer.py:54
+msgid "Generate different random values"
+msgstr "生成不同的隨機數值"
+
+#: searx/answerers/statistics/answerer.py:53
+msgid "Statistics functions"
+msgstr "統計功能"
+
+#: searx/answerers/statistics/answerer.py:54
+msgid "Compute {functions} of the arguments"
+msgstr "計算 {functions} 參數"
+
+#: searx/engines/__init__.py:194 searx/engines/flycheck___init__.py:201
+msgid "Engine time (sec)"
+msgstr "引擎時間(秒)"
+
+#: searx/engines/__init__.py:198 searx/engines/flycheck___init__.py:205
+msgid "Page loads (sec)"
+msgstr "頁面載入(秒)"
+
+#: searx/engines/__init__.py:202 searx/engines/flycheck___init__.py:209
+#: searx/templates/oscar/results.html:95
+#: searx/templates/simple/results.html:20
+msgid "Number of results"
+msgstr "結果筆數"
+
+#: searx/engines/__init__.py:206 searx/engines/flycheck___init__.py:213
+msgid "Scores"
+msgstr "分數"
+
+#: searx/engines/__init__.py:210 searx/engines/flycheck___init__.py:217
+msgid "Scores per result"
+msgstr "每個結果的分數"
+
+#: searx/engines/__init__.py:214 searx/engines/flycheck___init__.py:221
+msgid "Errors"
+msgstr "錯誤"
+
+#: searx/engines/pdbe.py:87
+msgid "{title}&nbsp;(OBSOLETE)"
+msgstr "{title}&nbsp;(已過時)"
+
+#: searx/engines/pdbe.py:91
+msgid "This entry has been superseded by"
+msgstr "此條目已被取代"
+
+#: searx/engines/pubmed.py:74
+msgid "No abstract is available for this publication."
+msgstr "此出版品無可用摘要。"
+
+#: searx/plugins/https_rewrite.py:32
+msgid "Rewrite HTTP links to HTTPS if possible"
+msgstr "可以的話將 HTTP 連結重寫為 HTTPS"
+
+#: searx/plugins/infinite_scroll.py:3
+msgid "Infinite scroll"
+msgstr "無限捲動"
+
+#: searx/plugins/infinite_scroll.py:4
+msgid "Automatically load next page when scrolling to bottom of current page"
+msgstr "當捲動至目前頁面的底部時自動載入下一頁"
+
+#: searx/plugins/oa_doi_rewrite.py:9
+msgid "Open Access DOI rewrite"
+msgstr "開放存取 DOI 重寫"
+
+#: searx/plugins/oa_doi_rewrite.py:10
+msgid ""
+"Avoid paywalls by redirecting to open-access versions of publications when "
+"available"
+msgstr "盡可能透過重新導向至出版品的開放存取版本來避免付費牆"
+
+#: searx/plugins/open_results_on_new_tab.py:18
+#: searx/templates/oscar/preferences.html:114
+#: searx/templates/simple/preferences.html:149
+msgid "Open result links on new browser tabs"
+msgstr "在新瀏覽器分頁中開啟結果連結"
+
+#: searx/plugins/open_results_on_new_tab.py:19
+msgid ""
+"Results are opened in the same window by default. This plugin overwrites the"
+" default behaviour to open links on new tabs/windows. (JavaScript required)"
+msgstr "結果預設會在同一個視窗開啟。這個外掛程式會覆寫預設行為,會在新分頁/視窗中開啟連結。(需要 JavaScript)"
+
+#: 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,而若包含「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/plugins/vim_hotkeys.py:3
+msgid "Vim-like hotkeys"
+msgstr "類 Vim 快捷鍵"
+
+#: searx/plugins/vim_hotkeys.py:4
+msgid ""
+"Navigate search results with Vim-like hotkeys (JavaScript required). Press "
+"\"h\" key on main or result page to get help."
+msgstr "以類 Vim 的快捷鍵導覽搜尋結果(需要 JavaScript)。在主頁面或結果頁面按「h」鍵以取得說明。"
+
+#: searx/templates/courgette/404.html:4 searx/templates/legacy/404.html:4
+#: searx/templates/oscar/404.html:4 searx/templates/pix-art/404.html:4
+#: searx/templates/simple/404.html:4
+msgid "Page not found"
+msgstr "找不到頁面"
+
+#: searx/templates/courgette/404.html:6 searx/templates/legacy/404.html:6
+#: searx/templates/oscar/404.html:6 searx/templates/pix-art/404.html:6
+#: searx/templates/simple/404.html:6
+#, python-format
+msgid "Go to %(search_page)s."
+msgstr "到 %(search_page)s。"
+
+#: searx/templates/courgette/404.html:6 searx/templates/legacy/404.html:6
+#: searx/templates/oscar/404.html:6 searx/templates/pix-art/404.html:6
+#: searx/templates/simple/404.html:6
+msgid "search page"
+msgstr "搜尋頁面"
+
+#: searx/templates/courgette/index.html:9
+#: searx/templates/courgette/index.html:13
+#: searx/templates/courgette/results.html:5
+#: searx/templates/legacy/index.html:8 searx/templates/legacy/index.html:12
+#: searx/templates/oscar/navbar.html:7
+#: searx/templates/oscar/preferences.html:3
+#: searx/templates/pix-art/index.html:8
+msgid "preferences"
+msgstr "偏好設定"
+
+#: searx/templates/courgette/index.html:11
+#: searx/templates/legacy/index.html:10 searx/templates/oscar/about.html:2
+#: searx/templates/oscar/navbar.html:6 searx/templates/pix-art/index.html:7
+msgid "about"
+msgstr "關於"
+
+#: searx/templates/courgette/preferences.html:5
+#: searx/templates/legacy/preferences.html:5
+#: searx/templates/oscar/preferences.html:8
+#: searx/templates/pix-art/preferences.html:5
+#: searx/templates/simple/preferences.html:26
+msgid "Preferences"
+msgstr "偏好設定"
+
+#: searx/templates/courgette/preferences.html:9
+#: searx/templates/legacy/preferences.html:9
+#: searx/templates/oscar/preferences.html:33
+#: searx/templates/oscar/preferences.html:35
+#: searx/templates/simple/preferences.html:34
+msgid "Default categories"
+msgstr "預設分類"
+
+#: searx/templates/courgette/preferences.html:13
+#: searx/templates/legacy/preferences.html:14
+#: searx/templates/oscar/preferences.html:41
+#: searx/templates/pix-art/preferences.html:9
+#: searx/templates/simple/preferences.html:39
+#: searx/templates/simple/preferences.html:163
+msgid "Search language"
+msgstr "搜尋語言"
+
+#: searx/templates/courgette/preferences.html:16
+#: searx/templates/legacy/preferences.html:17
+#: searx/templates/oscar/languages.html:6
+#: searx/templates/pix-art/preferences.html:12
+#: searx/templates/simple/languages.html:2
+#: searx/templates/simple/preferences.html:42
+msgid "Default language"
+msgstr "預設語言"
+
+#: searx/templates/courgette/preferences.html:24
+#: searx/templates/legacy/preferences.html:25
+#: searx/templates/oscar/preferences.html:47
+#: searx/templates/pix-art/preferences.html:20
+#: searx/templates/simple/preferences.html:120
+msgid "Interface language"
+msgstr "介面語言"
+
+#: searx/templates/courgette/preferences.html:34
+#: searx/templates/legacy/preferences.html:35
+#: searx/templates/oscar/preferences.html:57
+#: searx/templates/simple/preferences.html:51
+msgid "Autocomplete"
+msgstr "自動完成"
+
+#: searx/templates/courgette/preferences.html:45
+#: searx/templates/legacy/preferences.html:46
+#: searx/templates/oscar/preferences.html:68
+#: searx/templates/simple/preferences.html:166
+msgid "Image proxy"
+msgstr "圖片代理伺服器"
+
+#: searx/templates/courgette/preferences.html:48
+#: searx/templates/legacy/preferences.html:49
+#: searx/templates/oscar/preferences.html:72
+#: searx/templates/simple/preferences.html:169
+msgid "Enabled"
+msgstr "已啟用"
+
+#: searx/templates/courgette/preferences.html:49
+#: searx/templates/legacy/preferences.html:50
+#: searx/templates/oscar/preferences.html:73
+#: searx/templates/simple/preferences.html:170
+msgid "Disabled"
+msgstr "已停用"
+
+#: searx/templates/courgette/preferences.html:54
+#: searx/templates/legacy/preferences.html:55
+#: searx/templates/oscar/preferences.html:77
+#: searx/templates/pix-art/preferences.html:30
+#: searx/templates/simple/preferences.html:156
+msgid "Method"
+msgstr "方法"
+
+#: searx/templates/courgette/preferences.html:63
+#: searx/templates/legacy/preferences.html:64
+#: searx/templates/oscar/preferences.html:86
+#: searx/templates/oscar/preferences.html:165
+#: searx/templates/oscar/preferences.html:173
+#: searx/templates/simple/preferences.html:63
+#: searx/templates/simple/preferences.html:90
+msgid "SafeSearch"
+msgstr "安全搜尋"
+
+#: searx/templates/courgette/preferences.html:66
+#: searx/templates/legacy/preferences.html:67
+#: searx/templates/oscar/preferences.html:90
+#: searx/templates/simple/preferences.html:66
+msgid "Strict"
+msgstr "嚴格"
+
+#: searx/templates/courgette/preferences.html:67
+#: searx/templates/legacy/preferences.html:68
+#: searx/templates/oscar/preferences.html:91
+#: searx/templates/simple/preferences.html:67
+msgid "Moderate"
+msgstr "適中"
+
+#: searx/templates/courgette/preferences.html:68
+#: searx/templates/legacy/preferences.html:69
+#: searx/templates/oscar/preferences.html:92
+#: searx/templates/simple/preferences.html:68
+msgid "None"
+msgstr "無"
+
+#: searx/templates/courgette/preferences.html:73
+#: searx/templates/legacy/preferences.html:74
+#: searx/templates/oscar/preferences.html:96
+#: searx/templates/pix-art/preferences.html:39
+#: searx/templates/simple/preferences.html:131
+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/legacy/preferences.html:93
+#: searx/templates/pix-art/preferences.html:49
+#: searx/templates/simple/preferences.html:77
+msgid "Currently used search engines"
+msgstr "目前使用的搜尋引擎"
+
+#: searx/templates/courgette/preferences.html:100
+#: searx/templates/legacy/preferences.html:97
+#: searx/templates/oscar/preferences.html:162
+#: searx/templates/oscar/preferences.html:176
+#: searx/templates/pix-art/preferences.html:53
+#: searx/templates/simple/preferences.html:87
+msgid "Engine name"
+msgstr "引擎名稱"
+
+#: searx/templates/courgette/preferences.html:101
+#: searx/templates/legacy/preferences.html:98
+msgid "Category"
+msgstr "分類"
+
+#: searx/templates/courgette/preferences.html:102
+#: searx/templates/courgette/preferences.html:113
+#: searx/templates/legacy/preferences.html:99
+#: searx/templates/legacy/preferences.html:110
+#: searx/templates/oscar/preferences.html:161
+#: searx/templates/oscar/preferences.html:177
+#: searx/templates/pix-art/preferences.html:54
+#: searx/templates/pix-art/preferences.html:64
+#: searx/templates/simple/preferences.html:86
+msgid "Allow"
+msgstr "允許"
+
+#: searx/templates/courgette/preferences.html:102
+#: searx/templates/courgette/preferences.html:114
+#: searx/templates/legacy/preferences.html:99
+#: searx/templates/legacy/preferences.html:111
+#: 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/legacy/preferences.html:119
+#: searx/templates/oscar/preferences.html:297
+#: searx/templates/pix-art/preferences.html:73
+#: searx/templates/simple/preferences.html:180
+msgid ""
+"These settings are stored in your cookies, this allows us not to store this "
+"data about you."
+msgstr "這些設定只會儲存在您的 cookies 中,我們會儲存關於您的資訊。"
+
+#: searx/templates/courgette/preferences.html:124
+#: searx/templates/legacy/preferences.html:121
+#: searx/templates/oscar/preferences.html:299
+#: searx/templates/pix-art/preferences.html:75
+#: searx/templates/simple/preferences.html:182
+msgid ""
+"These cookies serve your sole convenience, we don't use these cookies to "
+"track you."
+msgstr "這些 cookies 僅做為提供您方便之用,我們不會使用這些 cookies 來追蹤您。"
+
+#: searx/templates/courgette/preferences.html:127
+#: searx/templates/legacy/preferences.html:124
+#: searx/templates/oscar/preferences.html:305
+#: searx/templates/pix-art/preferences.html:78
+#: searx/templates/simple/preferences.html:185
+msgid "save"
+msgstr "儲存"
+
+#: searx/templates/courgette/preferences.html:128
+#: searx/templates/legacy/preferences.html:125
+#: searx/templates/oscar/preferences.html:307
+#: searx/templates/simple/preferences.html:186
+msgid "Reset defaults"
+msgstr "重設為預設值"
+
+#: searx/templates/courgette/preferences.html:129
+#: searx/templates/legacy/preferences.html:126
+#: searx/templates/oscar/preferences.html:306
+#: searx/templates/pix-art/preferences.html:79
+#: searx/templates/simple/preferences.html:187
+msgid "back"
+msgstr "返回"
+
+#: searx/templates/courgette/results.html:12
+#: searx/templates/legacy/results.html:13
+#: searx/templates/oscar/results.html:136
+#: searx/templates/simple/results.html:58
+msgid "Search URL"
+msgstr "搜尋網址"
+
+#: searx/templates/courgette/results.html:16
+#: searx/templates/legacy/results.html:17
+#: searx/templates/oscar/results.html:141
+#: searx/templates/simple/results.html:62
+msgid "Download results"
+msgstr "下載結果"
+
+#: searx/templates/courgette/results.html:34
+#: searx/templates/legacy/results.html:35
+#: searx/templates/simple/results.html:10
+msgid "Answers"
+msgstr "答案"
+
+#: searx/templates/courgette/results.html:42
+#: searx/templates/legacy/results.html:43
+#: searx/templates/oscar/results.html:116
+#: searx/templates/simple/results.html:42
+msgid "Suggestions"
+msgstr "建議"
+
+#: searx/templates/courgette/results.html:70
+#: searx/templates/legacy/results.html:81
+#: searx/templates/oscar/results.html:68 searx/templates/oscar/results.html:78
+#: searx/templates/simple/results.html:130
+msgid "previous page"
+msgstr "上一頁"
+
+#: searx/templates/courgette/results.html:81
+#: searx/templates/legacy/results.html:92
+#: searx/templates/oscar/results.html:62 searx/templates/oscar/results.html:84
+#: searx/templates/simple/results.html:145
+msgid "next page"
+msgstr "下一頁"
+
+#: searx/templates/courgette/search.html:3
+#: searx/templates/legacy/search.html:3 searx/templates/oscar/search.html:6
+#: searx/templates/oscar/search_full.html:9
+#: searx/templates/pix-art/search.html:3 searx/templates/simple/search.html:4
+msgid "Search for..."
+msgstr "搜尋……"
+
+#: searx/templates/courgette/stats.html:4 searx/templates/legacy/stats.html:4
+#: searx/templates/oscar/stats.html:5 searx/templates/pix-art/stats.html:4
+#: searx/templates/simple/stats.html:7
+msgid "Engine stats"
+msgstr "引擎統計"
+
+#: searx/templates/courgette/result_templates/images.html:4
+#: searx/templates/legacy/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/legacy/result_templates/torrent.html:11
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/simple/result_templates/torrent.html:9
+msgid "Seeder"
+msgstr "播種者"
+
+#: searx/templates/courgette/result_templates/torrent.html:7
+#: searx/templates/legacy/result_templates/torrent.html:11
+#: searx/templates/oscar/result_templates/torrent.html:6
+#: searx/templates/simple/result_templates/torrent.html:9
+msgid "Leecher"
+msgstr "接收者"
+
+#: searx/templates/courgette/result_templates/torrent.html:9
+#: searx/templates/legacy/result_templates/torrent.html:9
+#: searx/templates/oscar/macros.html:23
+#: searx/templates/simple/result_templates/torrent.html:6
+msgid "magnet link"
+msgstr "磁力連結"
+
+#: searx/templates/courgette/result_templates/torrent.html:10
+#: searx/templates/legacy/result_templates/torrent.html:10
+#: searx/templates/oscar/macros.html:24
+#: searx/templates/simple/result_templates/torrent.html:7
+msgid "torrent file"
+msgstr "torrent 檔案"
+
+#: searx/templates/legacy/categories.html:8
+#: searx/templates/simple/categories.html:6
+msgid "Click on the magnifier to perform search"
+msgstr "在磁鐵上點選以執行搜尋"
+
+#: searx/templates/legacy/preferences.html:84
+#: searx/templates/oscar/preferences.html:113
+#: searx/templates/simple/preferences.html:142
+msgid "Results on new tabs"
+msgstr "在新分頁開啟結果"
+
+#: searx/templates/legacy/preferences.html:87
+#: searx/templates/oscar/preferences.html:117
+#: searx/templates/simple/preferences.html:145
+msgid "On"
+msgstr "開啟"
+
+#: searx/templates/legacy/preferences.html:88
+#: searx/templates/oscar/preferences.html:118
+#: searx/templates/simple/preferences.html:146
+msgid "Off"
+msgstr "關閉"
+
+#: searx/templates/legacy/result_templates/code.html:3
+#: searx/templates/legacy/result_templates/default.html:3
+#: searx/templates/legacy/result_templates/map.html:9
+#: searx/templates/oscar/macros.html:34 searx/templates/oscar/macros.html:48
+#: searx/templates/simple/macros.html:43
+msgid "cached"
+msgstr "已快取"
+
+#: searx/templates/oscar/advanced.html:4
+msgid "Advanced settings"
+msgstr "進階設定"
+
+#: searx/templates/oscar/base.html:62
+#: searx/templates/oscar/messages/first_time.html:4
+#: searx/templates/oscar/messages/save_settings_successfull.html:5
+#: searx/templates/oscar/messages/unknow_error.html:5
+msgid "Close"
+msgstr "關閉"
+
+#: searx/templates/oscar/base.html:64
+#: searx/templates/oscar/messages/no_results.html:4
+#: searx/templates/simple/messages/no_results.html:4
+#: searx/templates/simple/results.html:25
+msgid "Error!"
+msgstr "錯誤!"
+
+#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:55
+msgid "Powered by"
+msgstr "技術支援"
+
+#: searx/templates/oscar/base.html:90 searx/templates/simple/base.html:55
+msgid "a privacy-respecting, hackable metasearch engine"
+msgstr "一個尊重隱私,可再開發的集合式搜尋引擎"
+
+#: searx/templates/oscar/macros.html:36 searx/templates/oscar/macros.html:50
+#: searx/templates/simple/macros.html:43
+msgid "proxied"
+msgstr "已代理"
+
+#: searx/templates/oscar/macros.html:92
+msgid "supported"
+msgstr "支援"
+
+#: searx/templates/oscar/macros.html:96
+msgid "not supported"
+msgstr "不支援"
+
+#: searx/templates/oscar/preferences.html:13
+#: searx/templates/oscar/preferences.html:22
+#: searx/templates/simple/preferences.html:32
+msgid "General"
+msgstr "一般"
+
+#: searx/templates/oscar/preferences.html:14
+#: searx/templates/oscar/preferences.html:146
+#: searx/templates/simple/preferences.html:76
+msgid "Engines"
+msgstr "引擎"
+
+#: searx/templates/oscar/preferences.html:15
+#: searx/templates/oscar/preferences.html:219
+msgid "Plugins"
+msgstr "外掛程式"
+
+#: searx/templates/oscar/preferences.html:16
+#: searx/templates/oscar/preferences.html:245
+msgid "Answerers"
+msgstr "答案"
+
+#: searx/templates/oscar/preferences.html:17
+#: searx/templates/oscar/preferences.html:272
+msgid "Cookies"
+msgstr "Cookies"
+
+#: searx/templates/oscar/preferences.html:42
+#: searx/templates/simple/preferences.html:48
+msgid "What language do you prefer for search?"
+msgstr "您偏好用哪種語言搜尋?"
+
+#: searx/templates/oscar/preferences.html:48
+#: searx/templates/simple/preferences.html:128
+msgid "Change the language of the layout"
+msgstr "變更佈局的語言"
+
+#: searx/templates/oscar/preferences.html:58
+#: searx/templates/simple/preferences.html:60
+msgid "Find stuff as you type"
+msgstr "隨打即找"
+
+#: searx/templates/oscar/preferences.html:69
+#: searx/templates/simple/preferences.html:173
+msgid "Proxying image results through searx"
+msgstr "透過 searx 代理圖片結果"
+
+#: searx/templates/oscar/preferences.html:78
+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=\"https://zh.wikipedia.org/wiki/%%E8%%B6%%85%%E6%%96%%87%%E6%%9C%%AC%%E4%%BC%%A0%%E8%%BE%%93%%E5%%8D%%8F%%E8%%AE%%AE#%%E8%%AF%%B7%%E6%%B1%%82%%E6%%96%%B9%%E6%%B3%%95\" rel=\"external\">看看更多關於請求方法的介紹</a>"
+
+#: searx/templates/oscar/preferences.html:87
+#: searx/templates/simple/preferences.html:71
+msgid "Filter content"
+msgstr "過濾內容"
+
+#: searx/templates/oscar/preferences.html:97
+#: searx/templates/simple/preferences.html:139
+msgid "Change searx layout"
+msgstr "變更 searx 佈局"
+
+#: searx/templates/oscar/preferences.html:106
+#: searx/templates/oscar/preferences.html:111
+msgid "Choose style for this theme"
+msgstr "選擇這個主題的樣式"
+
+#: searx/templates/oscar/preferences.html:106
+#: searx/templates/oscar/preferences.html:111
+msgid "Style"
+msgstr "樣式"
+
+#: searx/templates/oscar/preferences.html:122
+msgid "Open Access DOI resolver"
+msgstr "開放存取 DOI 解析器"
+
+#: searx/templates/oscar/preferences.html:123
+msgid ""
+"Redirect to open-access versions of publications when available (plugin "
+"required)"
+msgstr "盡可能重新導向至出版品的開放存取版本(需要外掛程式)"
+
+#: searx/templates/oscar/preferences.html:163
+#: searx/templates/oscar/preferences.html:175
+#: searx/templates/simple/preferences.html:88
+msgid "Shortcut"
+msgstr "快捷鍵"
+
+#: searx/templates/oscar/preferences.html:164
+#: searx/templates/oscar/preferences.html:174
+msgid "Selected language"
+msgstr "已選取的語言"
+
+#: searx/templates/oscar/preferences.html:166
+#: searx/templates/oscar/preferences.html:172
+#: searx/templates/simple/preferences.html:91
+msgid "Time range"
+msgstr "時間範圍"
+
+#: searx/templates/oscar/preferences.html:167
+#: searx/templates/oscar/preferences.html:171
+#: searx/templates/simple/preferences.html:92
+msgid "Avg. time"
+msgstr "平均時間"
+
+#: searx/templates/oscar/preferences.html:168
+#: searx/templates/oscar/preferences.html:170
+#: searx/templates/simple/preferences.html:93
+msgid "Max time"
+msgstr "最大時間"
+
+#: searx/templates/oscar/preferences.html:248
+msgid "This is the list of searx's instant answering modules."
+msgstr "這是 searx 的即時回覆模組清單。"
+
+#: searx/templates/oscar/preferences.html:252
+msgid "Name"
+msgstr "名稱"
+
+#: searx/templates/oscar/preferences.html:253
+msgid "Keywords"
+msgstr "關鍵字"
+
+#: searx/templates/oscar/preferences.html:254
+msgid "Description"
+msgstr "描述"
+
+#: searx/templates/oscar/preferences.html:255
+msgid "Examples"
+msgstr "範例"
+
+#: searx/templates/oscar/preferences.html:275
+msgid ""
+"This is the list of cookies and their values searx is storing on your "
+"computer."
+msgstr "這是 searx 儲存在您電腦上的 cookies 與它們的值的清單。"
+
+#: searx/templates/oscar/preferences.html:276
+msgid "With that list, you can assess searx transparency."
+msgstr "有了這份清單,您就可以評估 searx 的透明度。"
+
+#: searx/templates/oscar/preferences.html:281
+msgid "Cookie name"
+msgstr "Cookie 名稱"
+
+#: searx/templates/oscar/preferences.html:282
+msgid "Value"
+msgstr "值"
+
+#: searx/templates/oscar/preferences.html:301
+msgid "Search URL of the currently saved preferences"
+msgstr "目前偏好設定的搜尋 URL"
+
+#: searx/templates/oscar/preferences.html:301
+msgid ""
+"Note: specifying custom settings in the search URL can reduce privacy by "
+"leaking data to the clicked result sites."
+msgstr "注意:在搜尋 URL 中指定自訂的設定可能會降低隱私,因為會洩漏資料給點選的結果頁面。"
+
+#: searx/templates/oscar/results.html:17
+msgid "Search results"
+msgstr "搜尋結果"
+
+#: searx/templates/oscar/results.html:21
+#: searx/templates/simple/results.html:84
+msgid "Try searching for:"
+msgstr "嘗試搜尋:"
+
+#: searx/templates/oscar/results.html:100
+#: searx/templates/simple/results.html:25
+msgid "Engines cannot retrieve results"
+msgstr "引擎無法擷取結果"
+
+#: searx/templates/oscar/results.html:131
+msgid "Links"
+msgstr "連結"
+
+#: searx/templates/oscar/search.html:8
+#: searx/templates/oscar/search_full.html:11
+#: searx/templates/simple/search.html:5
+msgid "Start search"
+msgstr "開始搜尋"
+
+#: searx/templates/oscar/stats.html:2
+msgid "stats"
+msgstr "統計"
+
+#: searx/templates/oscar/time-range.html:3
+#: searx/templates/simple/time-range.html:3
+msgid "Anytime"
+msgstr "任何時間"
+
+#: searx/templates/oscar/time-range.html:6
+#: searx/templates/simple/time-range.html:6
+msgid "Last day"
+msgstr "一天內"
+
+#: searx/templates/oscar/time-range.html:9
+#: searx/templates/simple/time-range.html:9
+msgid "Last week"
+msgstr "一週內"
+
+#: searx/templates/oscar/time-range.html:12
+#: searx/templates/simple/time-range.html:12
+msgid "Last month"
+msgstr "一個月內"
+
+#: searx/templates/oscar/time-range.html:15
+#: searx/templates/simple/time-range.html:15
+msgid "Last year"
+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/no_cookies.html:3
+msgid "Information!"
+msgstr "資訊!"
+
+#: searx/templates/oscar/messages/no_cookies.html:4
+msgid "currently, there are no cookies defined."
+msgstr "目前未有已定義的 cookies。"
+
+#: searx/templates/oscar/messages/no_data_available.html:4
+msgid "There is currently no data available. "
+msgstr "目前無可用資料。"
+
+#: searx/templates/oscar/messages/no_results.html:4
+#: searx/templates/simple/messages/no_results.html:4
+msgid "Engines cannot retrieve results."
+msgstr "引擎無法擷取結果。"
+
+#: searx/templates/oscar/messages/no_results.html:10
+#: searx/templates/simple/messages/no_results.html:10
+msgid "Please, try again later or find another searx instance."
+msgstr "請再試一次或是使用其他 searx 實體搜尋。"
+
+#: searx/templates/oscar/messages/no_results.html:14
+#: searx/templates/simple/messages/no_results.html:14
+msgid "Sorry!"
+msgstr "抱歉!"
+
+#: searx/templates/oscar/messages/no_results.html:15
+#: searx/templates/simple/messages/no_results.html:15
+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
+#: searx/templates/simple/result_templates/default.html:6
+msgid "show media"
+msgstr "顯示媒體"
+
+#: searx/templates/oscar/result_templates/default.html:7
+#: searx/templates/simple/result_templates/default.html:6
+msgid "hide media"
+msgstr "隱藏媒體"
+
+#: searx/templates/oscar/result_templates/images.html:30
+msgid "Get image"
+msgstr "取得圖片"
+
+#: searx/templates/oscar/result_templates/images.html:33
+msgid "View source"
+msgstr "檢視來源"
+
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/simple/result_templates/map.html:7
+msgid "show map"
+msgstr "顯示地圖"
+
+#: searx/templates/oscar/result_templates/map.html:7
+#: searx/templates/simple/result_templates/map.html:7
+msgid "hide map"
+msgstr "隱藏地圖"
+
+#: searx/templates/oscar/result_templates/map.html:11
+#: searx/templates/simple/result_templates/map.html:11
+msgid "show details"
+msgstr "顯示詳情"
+
+#: searx/templates/oscar/result_templates/map.html:11
+#: searx/templates/simple/result_templates/map.html:11
+msgid "hide details"
+msgstr "隱藏詳情"
+
+#: searx/templates/oscar/result_templates/torrent.html:7
+#: searx/templates/simple/result_templates/torrent.html:11
+msgid "Filesize"
+msgstr "檔案大小"
+
+#: searx/templates/oscar/result_templates/torrent.html:9
+#: searx/templates/simple/result_templates/torrent.html:12
+msgid "Bytes"
+msgstr "位元組"
+
+#: searx/templates/oscar/result_templates/torrent.html:10
+#: searx/templates/simple/result_templates/torrent.html:13
+msgid "kiB"
+msgstr "kiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:11
+#: searx/templates/simple/result_templates/torrent.html:14
+msgid "MiB"
+msgstr "MiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:12
+#: searx/templates/simple/result_templates/torrent.html:15
+msgid "GiB"
+msgstr "GiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:13
+#: searx/templates/simple/result_templates/torrent.html:16
+msgid "TiB"
+msgstr "TiB"
+
+#: searx/templates/oscar/result_templates/torrent.html:15
+#: searx/templates/simple/result_templates/torrent.html:20
+msgid "Number of Files"
+msgstr "檔案數量"
+
+#: searx/templates/oscar/result_templates/videos.html:7
+#: searx/templates/simple/result_templates/videos.html:6
+msgid "show video"
+msgstr "顯示影片"
+
+#: searx/templates/oscar/result_templates/videos.html:7
+#: searx/templates/simple/result_templates/videos.html:6
+msgid "hide video"
+msgstr "隱藏影片"
+
+#: searx/templates/pix-art/results.html:28
+msgid "Load more..."
+msgstr "載入更多……"
+
+#: searx/templates/simple/base.html:31
+msgid "No item found"
+msgstr "找不到項目"
+
+#: searx/templates/simple/preferences.html:89
+msgid "Supports selected language"
+msgstr "支援選定的語言"
+
+#: searx/templates/simple/preferences.html:118
+msgid "User interface"
+msgstr "使用者介面"
+
+#: searx/templates/simple/preferences.html:154
+msgid "Privacy"
+msgstr "隱私"
diff --git a/searx/utils.py b/searx/utils.py
index 9494bdf..8f095f3 100644
--- a/searx/utils.py
+++ b/searx/utils.py
@@ -7,6 +7,7 @@ import re
from babel.dates import format_date
from codecs import getincrementalencoder
from imp import load_source
+from numbers import Number
from os.path import splitext, join
from random import choice
import sys
@@ -336,3 +337,14 @@ def new_hmac(secret_key, url):
return hmac.new(bytes(secret_key), url, hashlib.sha256).hexdigest()
else:
return hmac.new(bytes(secret_key, 'utf-8'), url, hashlib.sha256).hexdigest()
+
+
+def to_string(obj):
+ if isinstance(obj, basestring):
+ return obj
+ if isinstance(obj, Number):
+ return unicode(obj)
+ if hasattr(obj, '__str__'):
+ return obj.__str__()
+ if hasattr(obj, '__repr__'):
+ return obj.__repr__()
diff --git a/searx/version.py b/searx/version.py
index 5414033..11dfb1e 100644
--- a/searx/version.py
+++ b/searx/version.py
@@ -18,8 +18,8 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
# version of searx
VERSION_MAJOR = 0
-VERSION_MINOR = 13
-VERSION_BUILD = 1
+VERSION_MINOR = 14
+VERSION_BUILD = 0
VERSION_STRING = "{0}.{1}.{2}".format(VERSION_MAJOR,
VERSION_MINOR,
diff --git a/searx/webapp.py b/searx/webapp.py
index abbbce9..ca83f56 100644
--- a/searx/webapp.py
+++ b/searx/webapp.py
@@ -165,6 +165,9 @@ def get_locale():
and request.form['locale'] in settings['locales']:
locale = request.form['locale']
+ if locale == 'zh_TW':
+ locale = 'zh_Hant_TW'
+
return locale
@@ -376,6 +379,8 @@ def render(template_name, override_theme=None, **kwargs):
kwargs['unicode'] = unicode
+ kwargs['preferences'] = request.preferences
+
kwargs['scripts'] = set()
for plugin in request.user_plugins:
for script in plugin.js_dependencies:
@@ -628,8 +633,8 @@ def autocompleter():
if len(raw_results) <= 3 and completer:
# get language from cookie
language = request.preferences.get_value('language')
- if not language or language == 'all':
- language = 'en'
+ if not language:
+ language = settings['search']['language']
else:
language = language.split('-')[0]
# run autocompletion
diff --git a/setup.py b/setup.py
index 1b0ae30..6466d1f 100644
--- a/setup.py
+++ b/setup.py
@@ -51,9 +51,23 @@ setup(
},
package_data={
'searx': [
+ 'settings.yml',
+ '../README.rst',
+ '../requirements.txt',
+ '../requirements-dev.txt',
'data/*',
'plugins/*/*',
- 'translations/*/*/*.mo'
+ 'static/*.*',
+ 'static/*/*.*',
+ 'static/*/*/*.*',
+ 'static/*/*/*/*.*',
+ 'static/*/*/*/*/*.*',
+ 'templates/*/*.*',
+ 'templates/*/*/*.*',
+ 'tests/*',
+ 'tests/*/*',
+ 'tests/*/*/*',
+ 'translations/*/*/*'
],
},
diff --git a/tests/unit/engines/test_archlinux.py b/tests/unit/engines/test_archlinux.py
index e4ee033..f9e536f 100644
--- a/tests/unit/engines/test_archlinux.py
+++ b/tests/unit/engines/test_archlinux.py
@@ -4,7 +4,7 @@ from searx.engines import archlinux
from searx.testing import SearxTestCase
domains = {
- 'all': 'https://wiki.archlinux.org',
+ 'en': 'https://wiki.archlinux.org',
'de': 'https://wiki.archlinux.de',
'fr': 'https://wiki.archlinux.fr',
'ja': 'https://wiki.archlinuxjp.org',
diff --git a/tests/unit/engines/test_bing.py b/tests/unit/engines/test_bing.py
index 523ec57..2528dd8 100644
--- a/tests/unit/engines/test_bing.py
+++ b/tests/unit/engines/test_bing.py
@@ -10,17 +10,13 @@ class TestBingEngine(SearxTestCase):
query = u'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 0
- dicto['language'] = 'fr_FR'
+ dicto['language'] = 'fr-FR'
params = bing.request(query.encode('utf-8'), dicto)
self.assertTrue('url' in params)
self.assertTrue(query in params['url'])
self.assertTrue('language%3AFR' in params['url'])
self.assertTrue('bing.com' in params['url'])
- dicto['language'] = 'all'
- params = bing.request(query.encode('utf-8'), dicto)
- self.assertTrue('language' in params['url'])
-
def test_response(self):
self.assertRaises(AttributeError, bing.response, None)
self.assertRaises(AttributeError, bing.response, [])
diff --git a/tests/unit/engines/test_bing_news.py b/tests/unit/engines/test_bing_news.py
index 1f1aeca..3af19fd 100644
--- a/tests/unit/engines/test_bing_news.py
+++ b/tests/unit/engines/test_bing_news.py
@@ -19,10 +19,6 @@ class TestBingNewsEngine(SearxTestCase):
self.assertIn('bing.com', params['url'])
self.assertIn('fr', params['url'])
- dicto['language'] = 'all'
- params = bing_news.request(query, dicto)
- self.assertIn('en', params['url'])
-
def test_no_url_in_request_year_time_range(self):
dicto = defaultdict(dict)
query = 'test_query'
diff --git a/tests/unit/engines/test_bing_videos.py b/tests/unit/engines/test_bing_videos.py
index 118754b..8b303d6 100644
--- a/tests/unit/engines/test_bing_videos.py
+++ b/tests/unit/engines/test_bing_videos.py
@@ -47,87 +47,54 @@ class TestBingVideosEngine(SearxTestCase):
self.assertEqual(bing_videos.response(response), [])
html = """
- <div>
- <div class="dg_u">
- <a class="dv_i" href="/videos/search?abcde">
- <div class="vthblock">
- <div class="vthumb">
+ <div class="dg_u">
+ <div id="mc_vtvc_1" class="mc_vtvc">
+ <a class="mc_vtvc_link" href="/video">
+ <div class="mc_vtvc_th">
+ <div class="cico">
<img src="thumb_1.jpg" />
</div>
- <div>
- <div class="tl">
- Title 1
+ <div class="mc_vtvc_ban_lo">
+ <div class="vtbc">
+ <div class="mc_bc_w b_smText">
+ <div class="mc_bc pivot bpi_2">
+ <span title="">
+ <span class="mv_vtvc_play cipg "></span>
+ </span>
+ </div>
+ <div class="mc_bc items">10:06</div>
+ </div>
</div>
</div>
- </div>
- <div class="videoInfoPanel">
- <div class="pubInfo">
- <div>Content 1</div>
</div>
- </div>
- </a>
- <div class="sa_wrapper"
- data-eventpayload="{&quot;purl&quot;: &quot;https://url.com/1&quot;}">
- </div>
- </div>
- </div>
- """
- response = mock.Mock(text=html)
- results = bing_videos.response(response)
- self.assertEqual(type(results), list)
- self.assertEqual(len(results), 1)
- self.assertEqual(results[0]['title'], 'Title 1')
- self.assertEqual(results[0]['url'], 'https://url.com/1')
- self.assertEqual(results[0]['content'], 'Content 1')
- self.assertEqual(results[0]['thumbnail'], 'thumb_1.jpg')
-
- html = """
- <div>
- <div class="dg_u">
- <a class="dv_i" href="https://url.com/1">
- <div class="vthblock">
- <div class="vthumb">
- <img src="thumb_1.jpg" />
- </div>
- <div>
- <div class="tl">
- Title 1
- </div>
- </div>
- </div>
- <div class="videoInfoPanel">
- <div class="pubInfo">
- <div>Content 1</div>
- </div>
- </div>
- </a>
- </div>
- <div class="dg_u">
- <a class="dv_i" href="/videos/search?abcde">
- <div class="vthblock">
- <div class="vthumb">
- <img src="thumb_2.jpg" />
- </div>
- <div>
- <div class="tl">
- Title 2
+ <div class="mc_vtvc_meta">
+ <div class="mc_vtvc_title" title="Title 1"></div>
+ <div class="mc_vtvc_meta_block_area">
+ <div class="mc_vtvc_meta_block">
+ <div class="mc_vtvc_meta_row">
+ <span>65,696,000+ views</span>
+ <span>1 year ago</span>
</div>
+ <div class="mc_vtvc_meta_row mc_vtvc_meta_row_channel">Content 1</div>
+ <div class="mc_vtvc_meta_row"><span>
+ <div class="cico mc_vtvc_src_ico">
+ <div></div>
+ </div>
+ <span>YouTube</span>
+ </span></div>
</div>
- </div>
- <div class="videoInfoPanel">
- <div class="pubInfo">
- <div>Content 2</div>
</div>
</div>
- </a>
+ <div class="vrhdata"></div>
+ </a>
+ </div>
</div>
- </div>
"""
response = mock.Mock(text=html)
results = bing_videos.response(response)
self.assertEqual(type(results), list)
self.assertEqual(len(results), 1)
self.assertEqual(results[0]['title'], 'Title 1')
- self.assertEqual(results[0]['url'], 'https://url.com/1')
+ self.assertEqual(results[0]['url'], 'https://bing.com/video')
self.assertEqual(results[0]['content'], 'Content 1')
self.assertEqual(results[0]['thumbnail'], 'thumb_1.jpg')
diff --git a/tests/unit/engines/test_dailymotion.py b/tests/unit/engines/test_dailymotion.py
index 72071af..2009c0e 100644
--- a/tests/unit/engines/test_dailymotion.py
+++ b/tests/unit/engines/test_dailymotion.py
@@ -18,10 +18,6 @@ class TestDailymotionEngine(SearxTestCase):
self.assertTrue('dailymotion.com' in params['url'])
self.assertTrue('fr' in params['url'])
- dicto['language'] = 'all'
- params = dailymotion.request(query, dicto)
- self.assertTrue('en' in params['url'])
-
def test_response(self):
self.assertRaises(AttributeError, dailymotion.response, None)
self.assertRaises(AttributeError, dailymotion.response, [])
diff --git a/tests/unit/engines/test_duckduckgo_images.py b/tests/unit/engines/test_duckduckgo_images.py
index a8a57c7..5821631 100644
--- a/tests/unit/engines/test_duckduckgo_images.py
+++ b/tests/unit/engines/test_duckduckgo_images.py
@@ -15,7 +15,7 @@ class TestDuckduckgoImagesEngine(SearxTestCase):
dicto['is_test'] = True
dicto['pageno'] = 1
dicto['safesearch'] = 0
- dicto['language'] = 'all'
+ dicto['language'] = 'en-US'
params = duckduckgo_images.request(query, dicto)
self.assertIn('url', params)
self.assertIn(query, params['url'])
diff --git a/tests/unit/engines/test_faroo.py b/tests/unit/engines/test_faroo.py
index ebcde39..0cc8bc3 100644
--- a/tests/unit/engines/test_faroo.py
+++ b/tests/unit/engines/test_faroo.py
@@ -11,7 +11,7 @@ class TestFarooEngine(SearxTestCase):
query = 'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 1
- dicto['language'] = 'fr_FR'
+ dicto['language'] = 'fr-FR'
dicto['category'] = 'general'
params = faroo.request(query, dicto)
self.assertIn('url', params)
@@ -20,11 +20,7 @@ class TestFarooEngine(SearxTestCase):
self.assertIn('en', params['url'])
self.assertIn('web', params['url'])
- dicto['language'] = 'all'
- params = faroo.request(query, dicto)
- self.assertIn('en', params['url'])
-
- dicto['language'] = 'de_DE'
+ dicto['language'] = 'de-DE'
params = faroo.request(query, dicto)
self.assertIn('de', params['url'])
diff --git a/tests/unit/engines/test_gigablast.py b/tests/unit/engines/test_gigablast.py
index 6b2d264..f0ddb63 100644
--- a/tests/unit/engines/test_gigablast.py
+++ b/tests/unit/engines/test_gigablast.py
@@ -11,16 +11,11 @@ class TestGigablastEngine(SearxTestCase):
dicto = defaultdict(dict)
dicto['pageno'] = 0
dicto['safesearch'] = 0
- dicto['language'] = 'all'
+ dicto['language'] = 'en-US'
params = gigablast.request(query, dicto)
self.assertTrue('url' in params)
self.assertTrue(query in params['url'])
self.assertTrue('gigablast.com' in params['url'])
- self.assertTrue('xx' in params['url'])
-
- dicto['language'] = 'en-US'
- params = gigablast.request(query, dicto)
- self.assertTrue('en' in params['url'])
self.assertFalse('en-US' in params['url'])
def test_response(self):
diff --git a/tests/unit/engines/test_google.py b/tests/unit/engines/test_google.py
index 0498d49..ecd1ed4 100644
--- a/tests/unit/engines/test_google.py
+++ b/tests/unit/engines/test_google.py
@@ -26,7 +26,7 @@ class TestGoogleEngine(SearxTestCase):
self.assertIn('google.fr', params['url'])
self.assertIn('fr', params['headers']['Accept-Language'])
- dicto['language'] = 'all'
+ dicto['language'] = 'en-US'
params = google.request(query, dicto)
self.assertIn('google.co', params['url'])
self.assertIn('en', params['headers']['Accept-Language'])
diff --git a/tests/unit/engines/test_google_news.py b/tests/unit/engines/test_google_news.py
index 20a75af..3769e3b 100644
--- a/tests/unit/engines/test_google_news.py
+++ b/tests/unit/engines/test_google_news.py
@@ -12,18 +12,13 @@ class TestGoogleNewsEngine(SearxTestCase):
query = 'test_query'
dicto = defaultdict(dict)
dicto['pageno'] = 1
- dicto['language'] = 'fr_FR'
+ dicto['language'] = 'fr-FR'
dicto['time_range'] = 'w'
params = google_news.request(query, dicto)
self.assertIn('url', params)
self.assertIn(query, params['url'])
self.assertIn('fr', params['url'])
- dicto['language'] = 'all'
- params = google_news.request(query, dicto)
- self.assertIn('url', params)
- self.assertNotIn('fr', params['url'])
-
def test_response(self):
self.assertRaises(AttributeError, google_news.response, None)
self.assertRaises(AttributeError, google_news.response, [])
diff --git a/tests/unit/engines/test_mediawiki.py b/tests/unit/engines/test_mediawiki.py
index b863727..1b07dd8 100644
--- a/tests/unit/engines/test_mediawiki.py
+++ b/tests/unit/engines/test_mediawiki.py
@@ -18,10 +18,6 @@ class TestMediawikiEngine(SearxTestCase):
self.assertIn('wikipedia.org', params['url'])
self.assertIn('fr', params['url'])
- dicto['language'] = 'all'
- params = mediawiki.request(query, dicto)
- self.assertIn('en', params['url'])
-
mediawiki.base_url = "http://test.url/"
mediawiki.search_url = mediawiki.base_url +\
'w/api.php?action=query'\
diff --git a/tests/unit/engines/test_pdbe.py b/tests/unit/engines/test_pdbe.py
index 7aa8e26..ea5adf9 100644
--- a/tests/unit/engines/test_pdbe.py
+++ b/tests/unit/engines/test_pdbe.py
@@ -105,5 +105,5 @@ class TestPdbeEngine(SearxTestCase):
results = pdbe.response(response)
self.assertEqual(type(results), list)
self.assertEqual(len(results), 1)
- self.assertEqual(results[0]['title'], 'OBSOLETE ENTRY TEST&nbsp;(OBSOLETE)')
- self.assertTrue(results[0]['content'].startswith('<em>This entry has been superseded by'))
+ self.assertEqual(results[0]['title'], 'OBSOLETE ENTRY TEST (OBSOLETE)')
+ self.assertTrue(results[0]['content'].startswith('This entry has been superseded by'))
diff --git a/tests/unit/engines/test_qwant.py b/tests/unit/engines/test_qwant.py
index b7133c0..4669498 100644
--- a/tests/unit/engines/test_qwant.py
+++ b/tests/unit/engines/test_qwant.py
@@ -19,10 +19,11 @@ class TestQwantEngine(SearxTestCase):
self.assertIn('qwant.com', params['url'])
self.assertIn('fr_fr', params['url'])
- dicto['language'] = 'all'
+ dicto['language'] = 'en-US'
qwant.categories = ['news']
params = qwant.request(query, dicto)
self.assertFalse('fr' in params['url'])
+ self.assertIn('en_us', params['url'])
self.assertIn('news', params['url'])
qwant.supported_languages = ['en', 'fr-FR', 'fr-CA']
diff --git a/tests/unit/engines/test_startpage.py b/tests/unit/engines/test_startpage.py
index a7a9778..bdb3356 100644
--- a/tests/unit/engines/test_startpage.py
+++ b/tests/unit/engines/test_startpage.py
@@ -21,10 +21,6 @@ class TestStartpageEngine(SearxTestCase):
self.assertIn('with_language', params['data'])
self.assertIn('lang_fr', params['data']['with_language'])
- dicto['language'] = 'all'
- params = startpage.request(query, dicto)
- self.assertNotIn('with_language', params['data'])
-
def test_response(self):
self.assertRaises(AttributeError, startpage.response, None)
self.assertRaises(AttributeError, startpage.response, [])
diff --git a/tests/unit/engines/test_subtitleseeker.py b/tests/unit/engines/test_subtitleseeker.py
index a22ee74..96b2539 100644
--- a/tests/unit/engines/test_subtitleseeker.py
+++ b/tests/unit/engines/test_subtitleseeker.py
@@ -99,42 +99,6 @@ class TestSubtitleseekerEngine(SearxTestCase):
<div class="clear"></div>
</div>
"""
- dicto['language'] = 'all'
- response = mock.Mock(text=html, search_params=dicto)
- results = subtitleseeker.response(response)
- 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.is.the.url/')
- self.assertIn('1998', results[0]['content'])
- self.assertIn('1039 Subs', results[0]['content'])
-
- html = """
- <div class="boxRows">
- <div class="boxRowsInner" style="width:600px;">
- <img src="http://static.subtitleseeker.com/images/movie.gif"
- style="width:16px; height:16px;" class="icon">
- <a href="http://this.is.the.url/"
- class="blue" title="Title subtitle" >
- This is the Title
- </a>
- </div>
- <div class="boxRowsInner f12b red" style="width:70px;">
- 1998
- </div>
- <div class="boxRowsInner grey-web f12" style="width:120px;">
- <img src="http://static.subtitleseeker.com/images/basket_put.png"
- style="width:16px; height:16px;" class="icon">
- 1039 Subs
- </div>
- <div class="boxRowsInner grey-web f10" style="width:130px;">
- <img src="http://static.subtitleseeker.com/images/arrow_refresh_small.png"
- style="width:16px; height:16px;" class="icon">
- 1 hours ago
- </div>
- <div class="clear"></div>
- </div>
- """
subtitleseeker.language = 'English'
response = mock.Mock(text=html, search_params=dicto)
results = subtitleseeker.response(response)
diff --git a/tests/unit/engines/test_swisscows.py b/tests/unit/engines/test_swisscows.py
index 492526f..2715ef5 100644
--- a/tests/unit/engines/test_swisscows.py
+++ b/tests/unit/engines/test_swisscows.py
@@ -18,11 +18,6 @@ class TestSwisscowsEngine(SearxTestCase):
self.assertTrue('uiLanguage=de' in params['url'])
self.assertTrue('region=de-DE' in params['url'])
- dicto['language'] = 'all'
- params = swisscows.request(query, dicto)
- self.assertTrue('uiLanguage=browser' in params['url'])
- self.assertTrue('region=browser' in params['url'])
-
dicto['category'] = 'images'
params = swisscows.request(query, dicto)
self.assertIn('image', params['url'])
diff --git a/tests/unit/engines/test_twitter.py b/tests/unit/engines/test_twitter.py
index b444b48..10e4a0b 100644
--- a/tests/unit/engines/test_twitter.py
+++ b/tests/unit/engines/test_twitter.py
@@ -20,12 +20,6 @@ class TestTwitterEngine(SearxTestCase):
self.assertIn('lang', params['cookies'])
self.assertIn('fr', params['cookies']['lang'])
- dicto['language'] = 'all'
- params = twitter.request(query, dicto)
- self.assertIn('cookies', params)
- self.assertIn('lang', params['cookies'])
- self.assertIn('en', params['cookies']['lang'])
-
def test_response(self):
self.assertRaises(AttributeError, twitter.response, None)
self.assertRaises(AttributeError, twitter.response, [])
diff --git a/tests/unit/engines/test_wikidata.py b/tests/unit/engines/test_wikidata.py
index aa69f11..453133b 100644
--- a/tests/unit/engines/test_wikidata.py
+++ b/tests/unit/engines/test_wikidata.py
@@ -11,14 +11,14 @@ class TestWikidataEngine(SearxTestCase):
def test_request(self):
query = 'test_query'
dicto = defaultdict(dict)
- dicto['language'] = 'all'
+ dicto['language'] = 'en-US'
params = wikidata.request(query, dicto)
self.assertIn('url', params)
self.assertIn(query, params['url'])
self.assertIn('wikidata.org', params['url'])
self.assertIn('en', params['url'])
- dicto['language'] = 'es_ES'
+ dicto['language'] = 'es-ES'
params = wikidata.request(query, dicto)
self.assertIn(query, params['url'])
self.assertIn('es', params['url'])
@@ -30,7 +30,7 @@ class TestWikidataEngine(SearxTestCase):
self.assertRaises(AttributeError, wikidata.response, '')
self.assertRaises(AttributeError, wikidata.response, '[]')
- response = mock.Mock(text='<html></html>', search_params={"language": "all"})
+ response = mock.Mock(text='<html></html>', search_params={"language": "en"})
self.assertEqual(wikidata.response(response), [])
def test_getDetail(self):
diff --git a/tests/unit/engines/test_wikipedia.py b/tests/unit/engines/test_wikipedia.py
index 7a86514..21d0225 100644
--- a/tests/unit/engines/test_wikipedia.py
+++ b/tests/unit/engines/test_wikipedia.py
@@ -25,10 +25,6 @@ class TestWikipediaEngine(SearxTestCase):
self.assertIn('Test_Query', params['url'])
self.assertNotIn('test_query', params['url'])
- dicto['language'] = 'all'
- params = wikipedia.request(query, dicto)
- self.assertIn('en', params['url'])
-
dicto['language'] = 'xx'
params = wikipedia.request(query, dicto)
self.assertIn('en', params['url'])
diff --git a/tests/unit/engines/test_yacy.py b/tests/unit/engines/test_yacy.py
index f49532c..a60614d 100644
--- a/tests/unit/engines/test_yacy.py
+++ b/tests/unit/engines/test_yacy.py
@@ -17,11 +17,6 @@ class TestYacyEngine(SearxTestCase):
self.assertIn('localhost', params['url'])
self.assertIn('fr', params['url'])
- dicto['language'] = 'all'
- params = yacy.request(query, dicto)
- self.assertIn('url', params)
- self.assertNotIn('lr=lang_', params['url'])
-
def test_response(self):
self.assertRaises(AttributeError, yacy.response, None)
self.assertRaises(AttributeError, yacy.response, [])
diff --git a/tests/unit/engines/test_yahoo.py b/tests/unit/engines/test_yahoo.py
index 82c4d99..921d3e8 100644
--- a/tests/unit/engines/test_yahoo.py
+++ b/tests/unit/engines/test_yahoo.py
@@ -39,13 +39,6 @@ class TestYahooEngine(SearxTestCase):
self.assertIn('sB', params['cookies'])
self.assertIn('fr', params['cookies']['sB'])
- dicto['language'] = 'all'
- params = yahoo.request(query, dicto)
- self.assertIn('cookies', params)
- self.assertIn('sB', params['cookies'])
- self.assertIn('en', params['cookies']['sB'])
- self.assertIn('en', params['url'])
-
def test_no_url_in_request_year_time_range(self):
dicto = defaultdict(dict)
query = 'test_query'
diff --git a/tests/unit/engines/test_yahoo_news.py b/tests/unit/engines/test_yahoo_news.py
index 4d7fc0a..bc87ec0 100644
--- a/tests/unit/engines/test_yahoo_news.py
+++ b/tests/unit/engines/test_yahoo_news.py
@@ -22,13 +22,6 @@ class TestYahooNewsEngine(SearxTestCase):
self.assertIn('sB', params['cookies'])
self.assertIn('fr', params['cookies']['sB'])
- dicto['language'] = 'all'
- params = yahoo_news.request(query, dicto)
- self.assertIn('cookies', params)
- self.assertIn('sB', params['cookies'])
- self.assertIn('en', params['cookies']['sB'])
- self.assertIn('en', params['url'])
-
def test_sanitize_url(self):
url = "test.url"
self.assertEqual(url, yahoo_news.sanitize_url(url))
diff --git a/tests/unit/test_preferences.py b/tests/unit/test_preferences.py
index 885c515..c8f2a44 100644
--- a/tests/unit/test_preferences.py
+++ b/tests/unit/test_preferences.py
@@ -90,25 +90,30 @@ class TestSettings(SearxTestCase):
# search language settings
def test_lang_setting_valid_choice(self):
- setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
+ setting = SearchLanguageSetting('en', choices=['de', 'en'])
setting.parse('de')
self.assertEquals(setting.get_value(), 'de')
def test_lang_setting_invalid_choice(self):
- setting = SearchLanguageSetting('all', choices=['all', 'de', 'en'])
+ setting = SearchLanguageSetting('en', choices=['de', 'en'])
setting.parse('xx')
- self.assertEquals(setting.get_value(), 'all')
+ self.assertEquals(setting.get_value(), 'en')
def test_lang_setting_old_cookie_choice(self):
- setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
+ setting = SearchLanguageSetting('en', choices=['en', 'es', 'es-ES'])
setting.parse('es_XA')
self.assertEquals(setting.get_value(), 'es')
def test_lang_setting_old_cookie_format(self):
- setting = SearchLanguageSetting('all', choices=['all', 'es', 'es-ES'])
+ setting = SearchLanguageSetting('en', choices=['en', 'es', 'es-ES'])
setting.parse('es_ES')
self.assertEquals(setting.get_value(), 'es-ES')
+ def test_lang_setting_old_default(self):
+ setting = SearchLanguageSetting('en', choices=['en', 'es', 'de'])
+ setting.parse('all')
+ self.assertEquals(setting.get_value(), 'en')
+
# plugins settings
def test_plugins_setting_all_default_enabled(self):
plugin1 = PluginStub('plugin1', True)
diff --git a/tests/unit/test_query.py b/tests/unit/test_query.py
new file mode 100644
index 0000000..49ccb60
--- /dev/null
+++ b/tests/unit/test_query.py
@@ -0,0 +1,64 @@
+from searx.query import RawTextQuery
+from searx.testing import SearxTestCase
+
+
+class TestQuery(SearxTestCase):
+
+ def test_simple_query(self):
+ query_text = 'the query'
+ query = RawTextQuery(query_text, [])
+ query.parse_query()
+
+ self.assertEquals(query.getFullQuery(), query_text)
+ self.assertEquals(len(query.query_parts), 1)
+ self.assertEquals(len(query.languages), 0)
+ self.assertFalse(query.specific)
+
+ def test_language_code(self):
+ language = 'es-ES'
+ query_text = 'the query'
+ full_query = ':' + language + ' ' + query_text
+ query = RawTextQuery(full_query, [])
+ query.parse_query()
+
+ self.assertEquals(query.getFullQuery(), full_query)
+ self.assertEquals(len(query.query_parts), 3)
+ self.assertEquals(len(query.languages), 1)
+ self.assertIn(language, query.languages)
+ self.assertFalse(query.specific)
+
+ def test_language_name(self):
+ language = 'english'
+ query_text = 'the query'
+ full_query = ':' + language + ' ' + query_text
+ query = RawTextQuery(full_query, [])
+ query.parse_query()
+
+ self.assertEquals(query.getFullQuery(), full_query)
+ self.assertEquals(len(query.query_parts), 3)
+ self.assertIn('en', query.languages)
+ self.assertFalse(query.specific)
+
+ def test_unlisted_language_code(self):
+ language = 'all'
+ query_text = 'the query'
+ full_query = ':' + language + ' ' + query_text
+ query = RawTextQuery(full_query, [])
+ query.parse_query()
+
+ self.assertEquals(query.getFullQuery(), full_query)
+ self.assertEquals(len(query.query_parts), 3)
+ self.assertIn('all', query.languages)
+ self.assertFalse(query.specific)
+
+ def test_invalid_language_code(self):
+ language = 'not_a_language'
+ query_text = 'the query'
+ full_query = ':' + language + ' ' + query_text
+ query = RawTextQuery(full_query, [])
+ query.parse_query()
+
+ self.assertEquals(query.getFullQuery(), full_query)
+ self.assertEquals(len(query.query_parts), 1)
+ self.assertEquals(len(query.languages), 0)
+ self.assertFalse(query.specific)