The arm/v7 builds have caused lots of problems due to the lack of
support from the cryptography library, and now issues related to
installing the latest version of cffi. As a result, this build variant
has been removed for now. It may or may not come back later, since the
amount of work just to figure out which library is broken and how to fix
it doesn't feel worth it anymore.
The redirects portion of the error page is only needed in scenarios
where the instance is rate limited, in which case the user's query is
provided to the error template. If this isn't provided, it should just
display the error and allow the user to redirect to the home page.
Fixes#1122
* Bump cryptography to 42.0.4
* Bump pyopenssl to 24.0.0
* Squashed commit of the following:
commit 2395bb7a6a
Author: Ben Busby <contact@benbusby.com>
Date: Wed Mar 6 09:35:48 2024 -0700
Remove version from DDG bangs url
Including the version portion of the URL now redirects to search results
for the name of the bang file, rather than returning the bang file
itself. Removing the version from the URL returns the correct bang file.
---------
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ben Busby <contact@benbusby.com>
Including the version portion of the URL now redirects to search results
for the name of the bang file, rather than returning the bang file
itself. Removing the version from the URL returns the correct bang file.
The error template previously only included the option to continue a
user's search via Farside (whoogle or searxng), and would only appear
when an instance was ratelimited. This has been updated to display
anytime an exception has occurred, and now includes other options for
continuing a search, such as Kagi, DDG, Brave, Ecosia, etc.
Closes#1099
- WHOOGLE_SHOW_FAVICONS: Default on, can be set to 0 to hide favicons
and skip the request for fetching them
- WHOOGLE_UPDATE_CHECK: Default on, can be set to 0 to disable the
daily check for new versions released on github
Closes#1098Closes#1059
The default unix socket permissions of 600 is too restrictive for many use
cases.
Added a new argument --unix-socket-perms which is passed to waitress to allow
for user configurable socket permissions
There are certain links (such as the age verification link mentioned in
issue #1083) that should trigger removal of the entire container div on
the results page, rather than just hiding the link itself.
This introduces a new `unsupported_g_divs` list that holds links that
will trigger a removal of the result div on the result page.
Fixes#1083
Since POST requests are now redirected to GET requests (with an
encrypted query string), POST searches are no longer the correct
approach to use for testing purposes.
This should fix the annoyance with browsers like Firefox not caching
POST request responses. By redirecting a POST search to be a GET request
instead (with an encrypted query string), the page can be cached and
successfully navigated back to after visiting a result.
DDG provides favicons using the url format
icons.duckduckgo.com/ip2/{site}.ico
This can be used to fetch favicons in the event that the default
"/favicon.ico" path does not work.
Scroller results (like the "latest from ___" or "top stories" results)
shouldn't have a site icon associated with them. This extracts the class
that those types of results have and skips over the process of inserting
an icon.
Audio controls are now always shown by default (mostly found in searches
that contain word pronunciation guides).
Site icons were moved to the left side of the results.
This improves the search result icon feature by "hiding" the site's icon
if one was not found. This happens in scenarios where a site doesn't
have a /favicon.ico due to having a unique path or using javascript to
load the icon.
This appends an icon element to each search result, using the result
domain's "/favicon.ico" path.
Note that some sites do not have a standard /favicon.ico, but have a
unique path to a specifically sized favicon instead. Worse still, some
sites use javascript to load their favicon, which would make it even
more difficult for Whoogle to figure out.
For now this approach is fine, but can be expanded upon in the future
if desired.
Domains were previously not validated before being handled, leading to a
potential scenario where someone could pass something like
"element_url=127.0.0.1:<port>/<resource>" to access other resources on a
machine running Whoogle. This change ensures that the resource used in
both endpoints is a valid domain.
This also includes validation of config names to prevent names from
including path values such as "../../(etc)".
When starting whoogle from another directory, the path to the calculator
widget was previously invalid. It now specifies the path relative to the widget
loader file.
The calculator was previously triggered for partial matches with words
like "calc", which meant searches containing the word "calcium" would
cause the calculator widget to appear.
Redirects to alternative frontends can now be defined using the
WHOOGLE_REDIRECTS environment variable. Usage is documented in the
readme, but is basically defined as <parent>:<new>.
Closes#988
This relates to an issue with an unknown cause (unable to reproduce on
my end) where the preferences string does not contain the correct amount
of padding on a base64 encoded value. This is mediated by appending
padding to the end of the encoded value, since any extra padding is
removed anyways.
Fixes#987
Defines separate environment variables for setting mobile vs desktop user
agents
Defines an environment variable for using the client's User-Agent
Co-authored-by: Ben Busby <contact@benbusby.com>
The .replit file gets autofilled with a ton of garbage when Whoogle is
imported, including a required "entrypoint" field that defaults to
"main.py" (even though the run and onBoot fields were already included
and should negate the need to specify an entrypoint, but whatever).
I'm not going to restructure Whoogle to fit what Replit wants, so I've
moved the startup commands to their own script (misc/replit.py) and
updated the "entrypoint" field in .replit.
More MarkupResemblesLocatorWarning warnings have been appearing. This
seems to be caused by parsing HTML content that contains a URL.
This new change suppresses the warning at the root level of the app
before any content has been parsed, so this error shouldn't appear
again.
Fixes#968
* Add translation for new strings from 7041b43db9
Use same terms as Google's zh-tw interface.
* Fix missing period
* Sync string order with en (easier for future updates)
Fix the exception `AttributeError: 'Filter' object has no attribute 'block_url'`
introduced in this commit [1].
`self.block_title` and `self.block_url` were members of the Filter
object[2], but not anymore after commit [1].
This bug can be reproduced with setting WHOOGLE_CONFIG_BLOCK_URL to a
non-empty string.
[1] 10a15e06e1
[2] 284a8102c8
An invalid parsing warning was being thrown by the latest version of the
bs4 library. This suppresses that warning from being shown in the
console.
A 404 handler was added to move logging from the console to the error
template, since a lot of users assumed that 404 errors from the result
page were problems with Whoogle itself.
Fixes#967
When a browser adds a search engine using the opensearch template, it
does not have the correct context necessary to autofill the
`preferences` arg with the user's session prefs. As a result, queries
made using the browser bar will have the instance's default preferences
filled into the template.
Removing this shouldn't have any side effects, since queries made on the
same machine will have the correct session associated with the user.
Fixes#929
Some distributions require manually installing Python 3.10, which makes
it less convenient than just using whatever version of Python3.X the
package manager supports. Since the only 3.10 feature being used was
"match", and it was a very small change, it's been replaced with an
if/else statement to ensure compatibility with older versions of Python
3.
Since including rust in the builder stage of the image didn't address
the issues with building the cryptography library on armv7, that
architecture will just use the last supported version of the affected
libraries. May want to revisit this later.
The python cryptography library isn't able to be built without the rust
compiler for some stages the cross-platform buildx workflow. This hasn't
been the case in the past, but for some reason since upgrading to the
latest cryptography version there are now errors with installing that
package. Since dependencies in the builder stage are not included in the
final build, we can safely include rust as a fallback to ensure this
doesn't happen without bloating the size of the final build.
Navigating between pages of results now includes the user's preferences
string, which allows them to retain their config for a particular
instance between result pages.
Fixes#960
This adds a simple calculator widget, somewhat similar to the one presented
when searching calculator on Google.
Also, it adds somewhat of a template for making the addition of new widgets
easier via the app/utils/widgets.py file. My eventual plan is to use this to
create more widgets that appear in Google, such as a color picker, timer, etc.
---------
Co-authored-by: Ben Busby <contact@benbusby.com>
Medium redirects needed further cleanup to account for instances where a
link contains a subdomain that would not make sense in a Farside
redirect link.
Fixes#947
The url prefix was not included when reconstructing the root url using
X-Forwarded-* headers, causing some elements to fail to load properly.
Fixes#937
Add a function to check if target_word contains CJK characters
If a search term contains Chinese, Japanese, or Korean characters,
the term is bolded in search results regardless of whitespace.
CJK characters: Chinese, Japanese (hiragana, katakana, kanji),
and Korean (hangul syllables, hangul jamo)
Co-authored-by: Ben Busby <contact@benbusby.com>
The whoogle.env file previously needed to be created and enabled using
the WHOOGLE_DOTENV var. This removes the second step and loads the env
file if it's found during app init.
The Dockerfile has also been updated to copy in whoogle.env if it
exists.
Fixes#909
Setting `WHOOGLE_TOR_FF` will attempt to modify the existing torrc file
with the "FascistFirewall 1" config, which restricts outbound ports to
reachable values.
Fixes#907
Moved the cleaner functions to app/utils/escaper.py
Removed unused import 're'
Moved the cleaner functionalities to the "search.py" and "routes.py"
Making sure escaped chars stay escaped during process
Replaced "<" and ">" with "andlt;" and "andgt;", respectively. This way,
when the 'response' object get loaded to bsoup (which happens several times
throughout the process between search.py and routes.py), bsoup will not
unescape them.
Introduces the ability to refine searches by time period:
- Past hour
- Past 24 hours
- Past week
- Past month
- Past year
Co-authored-by: Ben Busby <contact@benbusby.com>
Still a manual process, but better than updating the json line by line.
I'm undecided on automating this anytime the translation json gets
updated, since it could possibly ratelimit lingva instances.
Proxies that only support HTTP were causing request timeouts due to an
invalid upgrade to HTTPS when creating the request. This update restores
the ability to have an HTTP-only proxy for all requests.
Fixes#906
Parent sites using a 'www' subdomain or something similar were not
redirecting properly. This updates the hostname check to only validate
against the primary domain, except for Wikipedia since the subdomain is
used for interface translation in that case.
Fixes#901
Replacing result links and text when site alts are enabled is now part
of its own function, and handles replacement of link location and link
description separately.
Fixes#880
This can be updated later to allow users with cookies enabled to use a
key that is unique to their session (if they want, not mandatory), but
for now it makes more sense to just use a single key for all queries
from all users. This should eliminate a lot of issues that users have
reported where they are unable to decrypt queries or page elements due
to an expired/renewed session key.
The change made to whoogle-contrast-text in #873 wasn't the right
decision, since whoogle-contrast-text is meant to contrast with darker
UI elements. whoogle-text already contrasts with the default white
background.
* Sync setup.cfg with requirements.txt
* Include tests in PyPI tarballs
And exclude them from setuptools
* Set version number only once
Switch to PEP517 standard (pyproject.toml) for builds
2 years ago
51 changed files with 1999 additions and 458 deletions
Get Google search results, but without any ads, javascript, AMP links, cookies, or IP address tracking. Easily deployable in one click as a Docker app, and customizable with a single config file. Quick and simple to implement as a primary search engine replacement on both desktop and mobile.
Get Google search results, but without any ads, JavaScript, AMP links, cookies, or IP address tracking. Easily deployable in one click as a Docker app, and customizable with a single config file. Quick and simple to implement as a primary search engine replacement on both desktop and mobile.
- Sometimes has issues with auto-redirecting to `https`. Make sure to navigate to the `https` version of your app before adding as a default search engine.
### B) [Repl.it](https://repl.it)
___
### [Render](https://render.com)
Create an account on [render.com](https://render.com) and import the Whoogle repo with the following settings:
- Downtime after periods of inactivity \([solution 1](https://repl.it/talk/ask/use-this-pingmat1replco-just-enter/28821/101298), [solution 2](https://repl.it/talk/learn/How-to-use-and-setup-UptimeRobot/9003)\)
- Downtime after periods of inactivity ([solution](https://repl.it/talk/learn/How-to-use-and-setup-UptimeRobot/9003)\)
### C) [Fly.io](https://fly.io)
___
You will need a **PAID** [Fly.io](https://fly.io) account to deploy Whoogle.
### [Fly.io](https://fly.io)
You will need a [Fly.io](https://fly.io) account to deploy Whoogle. The [free allowances](https://fly.io/docs/about/pricing/#free-allowances) are enough for personal use.
#### Install the CLI: https://fly.io/docs/hands-on/installing/
@ -272,7 +308,9 @@ There are two authentication methods, password and cookie. You will need to make
- `WHOOGLE_CONFIG_TOR=1`
- `WHOOGLE_TOR_USE_PASS=1`
### G) Manual (Docker)
___
### Manual (Docker)
1. Ensure the Docker daemon is running, and is accessible by your user account
- To add user permissions, you can execute `sudo usermod -aG docker yourusername`
- Running `docker ps` should return something besides an error. If you encounter an error saying the daemon isn't running, try `sudo systemctl start docker` (Linux) or ensure the docker tool is running (Windows/macOS).
@ -333,16 +371,22 @@ heroku open
This series of commands can take a while, but once you run it once, you shouldn't have to run it again. The final command, `heroku open` will launch a tab in your web browser, where you can test out Whoogle and even [set it as your primary search engine](https://github.com/benbusby/whoogle#set-whoogle-as-your-primary-search-engine).
You may also edit environment variables from your app’s Settings tab in the Heroku Dashboard.
#### Arch Linux & Arch-based Distributions
___
### Arch Linux & Arch-based Distributions
There is an [AUR package available](https://aur.archlinux.org/packages/whoogle-git/), as well as a pre-built and daily updated package available at [Chaotic-AUR](https://chaotic.cx).
#### Helm chart for Kubernetes
___
### Helm chart for Kubernetes
To use the Kubernetes Helm Chart:
1. Ensure you have [Helm](https://helm.sh/docs/intro/install/) `>=3.0.0` installed
2. Clone this repository
3. Update [charts/whoogle/values.yaml](./charts/whoogle/values.yaml) as desired
4. Run `helm install whoogle ./charts/whoogle`
___
#### Using your own server, or alternative container deployment
There are other methods for deploying docker containers that are well outlined in [this article](https://rollout.io/blog/the-shortlist-of-docker-hosting/), but there are too many to describe set up for each here. Generally it should be about the same amount of effort as the Heroku deployment.
@ -369,16 +413,19 @@ There are a few optional environment variables available for customizing a Whoog
| WHOOGLE_PROXY_PASS | The password of the proxy server. |
| WHOOGLE_PROXY_TYPE | The type of the proxy server. Can be "socks5", "socks4", or "http". |
| WHOOGLE_PROXY_LOC | The location of the proxy server (host or ip). |
| WHOOGLE_USER_AGENT | The desktop user agent to use. Defaults to a randomly generated one. |
| WHOOGLE_USER_AGENT_MOBILE | The mobile user agent to use. Defaults to a randomly generated one. |
| WHOOGLE_USE_CLIENT_USER_AGENT | Enable to use your own user agent for all requests. Defaults to false. |
| WHOOGLE_REDIRECTS | Specify sites that should be redirected elsewhere. See [custom redirecting](#custom-redirecting). |
| EXPOSE_PORT | The port where Whoogle will be exposed. |
| HTTPS_ONLY | Enforce HTTPS. (See [here](https://github.com/benbusby/whoogle-search#https-enforcement)) |
| WHOOGLE_ALT_TW | The twitter.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_YT | The youtube.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_IG | The instagram.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_RD | The reddit.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_TL | The Google Translate alternative to use. This is used for all "translate ____" searches. Set to "" to disable. |
| WHOOGLE_ALT_MD | The medium.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_IMG | The imgur.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_WIKI | The wikipedia.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_WIKI | The wikipedia.org alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_IMDB | The imdb.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_ALT_QUORA | The quora.com alternative to use when site alternatives are enabled in the config. Set to "" to disable. |
| WHOOGLE_AUTOCOMPLETE | Controls visibility of autocomplete/search suggestions. Default on -- use '0' to disable. |
@ -388,6 +435,8 @@ There are a few optional environment variables available for customizing a Whoog
| WHOOGLE_TOR_SERVICE | Enable/disable the Tor service on startup. Default on -- use '0' to disable. |
| WHOOGLE_TOR_USE_PASS | Use password authentication for tor control port. |
| WHOOGLE_TOR_CONF | The absolute path to the config file containing the password for the tor control port. Default: ./misc/tor/control.conf WHOOGLE_TOR_PASS must be 1 for this to work.|
| WHOOGLE_SHOW_FAVICONS | Show/hide favicons next to search result URLs. Default on. |
| WHOOGLE_UPDATE_CHECK | Enable/disable the automatic daily check for new versions of Whoogle. Default on. |
### Config Environment Variables
These environment variables allow setting default config values, but can be overwritten manually by using the home page config menu. These allow a shortcut for destroying/rebuilding an instance to the same config state every time.
@ -399,6 +448,8 @@ These environment variables allow setting default config values, but can be over
| WHOOGLE_CONFIG_LANGUAGE | Set interface language |
| WHOOGLE_CONFIG_SEARCH_LANGUAGE | Set search result language |
| WHOOGLE_CONFIG_PREFERENCES_KEY | Key to encrypt preferences in URL (REQUIRED to show url) |
| WHOOGLE_CONFIG_ANON_VIEW | Include the "anonymous view" option for each search result |
## Usage
Same as most search engines, with the exception of filtering by time range.
@ -418,6 +470,7 @@ Same as most search engines, with the exception of filtering by time range.
To filter by a range of time, append ":past <time>" to the end of your search, where <time> can be `hour`, `day`, `month`, or `year`. Example: `coronavirus updates :past hour`
## Extra Steps
### Set Whoogle as your primary search engine
*Note: If you're using a reverse proxy to run Whoogle Search, make sure the "Root URL" config option on the home page is set to your URL before going through these steps.*
@ -462,6 +515,40 @@ Browser settings:
- Manual
- Under search engines > manage search engines > add, manually enter your Whoogle instance details with a `<whoogle url>/search?q=%s` formatted search URL.
### Custom Redirecting
You can set custom site redirects using the `WHOOGLE_REDIRECTS` environment
variable. A lot of sites, such as Twitter, Reddit, etc, have built-in redirects
to [Farside links](https://sr.ht/~benbusby/farside), but you may want to define
your own.
To do this, you can use the following syntax:
```
WHOOGLE_REDIRECTS="<parent_domain>:<new_domain>"
```
For example, if you want to redirect from "badsite.com" to "goodsite.com":
```
WHOOGLE_REDIRECTS="badsite.com:goodsite.com"
```
This can be used for multiple sites as well, with comma separation:
NOTE: Do not include "http(s)://" when defining your redirect.
### Custom Bangs
You can create your own custom bangs. By default, bangs are stored in
`app/static/bangs`. See [`00-whoogle.json`](https://github.com/benbusby/whoogle-search/blob/main/app/static/bangs/00-whoogle.json)
for an example. These are parsed in alphabetical order with later files
overriding bangs set in earlier files, with the exception that DDG bangs
(downloaded to `app/static/bangs/bangs.json`) are always parsed first. Thus,
any custom bangs will always override the DDG ones.
### Prevent Downtime (Heroku only)
Part of the deal with Heroku's free tier is that you're allocated 550 hours/month (meaning it can't stay active 24/7), and the app is temporarily shut down after 30 minutes of inactivity. Once it becomes inactive, any Whoogle searches will still work, but it'll take an extra 10-15 seconds for the app to come back online before displaying the result, which can be frustrating if you're in a hurry.
@ -538,7 +625,7 @@ Under the hood, Whoogle is a basic Flask app with the following structure:
- `opensearch.xml`: A template used for supporting [OpenSearch](https://developer.mozilla.org/en-US/docs/Web/OpenSearch).
- `imageresults.html`: An "experimental" template used for supporting the "Full Size" image feature on desktop.
- `static/<css|js>`
- CSS/Javascript files, should be self-explanatory
- CSS/JavaScript files, should be self-explanatory
- `static/settings`
- Key-value JSON files for establishing valid configuration values
@ -577,7 +664,7 @@ I'm a huge fan of Searx though and encourage anyone to use that instead if they
**Why does the image results page look different?**
A lot of the app currently piggybacks on Google's existing support for fetching results pages with Javascript disabled. To their credit, they've done an excellent job with styling pages, but it seems that the image results page - particularly on mobile - is a little rough. Moving forward, with enough interest, I'd like to transition to fetching the results and parsing them into a unique Whoogle-fied interface that I can style myself.
A lot of the app currently piggybacks on Google's existing support for fetching results pages with JavaScript disabled. To their credit, they've done an excellent job with styling pages, but it seems that the image results page - particularly on mobile - is a little rough. Moving forward, with enough interest, I'd like to transition to fetching the results and parsing them into a unique Whoogle-fied interface that I can style myself.
## Public Instances
@ -591,11 +678,21 @@ A lot of the app currently piggybacks on Google's existing support for fetching
| [https://s.tokhmi.xyz](https://s.tokhmi.xyz) | 🇺🇸 US | Multi-choice | ✅ |
| [https://search.sethforprivacy.com](https://search.sethforprivacy.com) | 🇩🇪 DE | English | |
| [https://whoogle.dcs0.hu](https://whoogle.dcs0.hu) | 🇭🇺 HU | Multi-choice | |
| [https://whoogle.esmailelbob.xyz](https://whoogle.esmailelbob.xyz) | 🇨🇦 CA | Multi-choice | |
| [https://gowogle.voring.me](https://gowogle.voring.me) | 🇺🇸 US | Multi-choice | |
| [https://whoogle.privacydev.net](https://whoogle.privacydev.net) | 🇺🇸 US | Multi-choice | |
| [https://whoogle.privacydev.net](https://whoogle.privacydev.net) | 🇫🇷 FR | English | |
| [https://wg.vern.cc](https://wg.vern.cc) | 🇺🇸 US | English | |
| [https://www.indexia.gq](https://www.indexia.gq) | 🇨🇦 CA | Multi-choice | ✅ |
| [https://whoogle.hxvy0.gq](https://whoogle.hxvy0.gq) | 🇨🇦 CA | Turkish Only | ✅ |
* A checkmark in the "Cloudflare" category here refers to the use of the reverse proxy, [Cloudflare](https://cloudflare.com). The checkmark will not be listed for a site which uses Cloudflare DNS but rather the proxying service which grants Cloudflare the ability to monitor traffic to the website.
@ -607,6 +704,8 @@ A lot of the app currently piggybacks on Google's existing support for fetching
| [http://whoglqjdkgt2an4tdepberwqz3hk7tjo4kqgdnuj77rt7nshw2xqhqad.onion](http://whoglqjdkgt2an4tdepberwqz3hk7tjo4kqgdnuj77rt7nshw2xqhqad.onion) | 🇺🇸 US | Multi-choice
| [http://nuifgsnbb2mcyza74o7illtqmuaqbwu4flam3cdmsrnudwcmkqur37qd.onion](http://nuifgsnbb2mcyza74o7illtqmuaqbwu4flam3cdmsrnudwcmkqur37qd.onion) | 🇩🇪 DE | English
| [http://whoogle.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion](http://whoogle.vernccvbvyi5qhfzyqengccj7lkove6bjot2xhh5kajhwvidqafczrad.onion/) | 🇺🇸 US | English |
| [http://whoogle.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion](http://whoogle.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion/) | 🇫🇷 FR | English |
| [http://whoogle.daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion](http://whoogle.daturab6drmkhyeia4ch5gvfc2f3wgo6bhjrv3pz6n7kxmvoznlkq4yd.onion/) | 🇩🇪 DE | Multi-choice | |
"description":"The site to use as a replacement for instagram.com when site alternatives are enabled in the config.",
"value":"farside.link/bibliogram/u",
"required":false
},
"WHOOGLE_ALT_RD":{
"description":"The site to use as a replacement for reddit.com when site alternatives are enabled in the config.",
"value":"farside.link/libreddit",
@ -110,6 +105,11 @@
"value":"",
"required":false
},
"WHOOGLE_CONFIG_TIME_PERIOD":{
"description":"[CONFIG] The time period to use for restricting search results",
"value":"",
"required":false
},
"WHOOGLE_CONFIG_LANGUAGE":{
"description":"[CONFIG] The language to use for the interface (use values from https://raw.githubusercontent.com/benbusby/whoogle-search/develop/app/static/settings/languages.json)",
"config-alts-help":"Replaces Twitter/YouTube/Instagram/etc links with privacy respecting alternatives.",
"config-alts-help":"Replaces Twitter/YouTube/etc links with privacy respecting alternatives.",
"config-new-tab":"Open Links in New Tab",
"config-images":"Full Size Image Search",
"config-images-help":"(Experimental) Adds the 'View Image' option to desktop image searches. This will cause image result thumbnails to be lower resolution.",
@ -30,6 +31,7 @@
"config-pref-encryption":"Encrypt Preferences",
"config-pref-help":"Requires WHOOGLE_CONFIG_PREFERENCES_KEY, otherwise this will be ignored.",
"config-css":"Custom CSS",
"config-time-period":"Time Period",
"load":"Load",
"apply":"Apply",
"save-as":"Save As...",
@ -46,7 +48,12 @@
"videos":"Videos",
"news":"News",
"books":"Books",
"anon-view":"Anonymous View"
"anon-view":"Anonymous View",
"qdr:h":"Past hour",
"qdr:d":"Past 24 hours",
"qdr:w":"Past week",
"qdr:m":"Past month",
"qdr:y":"Past year"
},
"lang_nl":{
"search":"Zoeken",
@ -68,7 +75,7 @@
"config-dark":"Donkere Modus",
"config-safe":"Veilig zoeken",
"config-alts":"Social Media Links Vervangen",
"config-alts-help":"Vervang Twitter/YouTube/Instagram/etc links met privacy gerespecteerde alternatieve.",
"config-alts-help":"Vervang Twitter/YouTube/etc links met privacy gerespecteerde alternatieve.",
"config-new-tab":"Open Links in New Tab",
"config-images":"Volledige Grote Afbeelding Zoeken",
"config-images-help":"(Expirimenteel) Voegt de optie 'View Image' toe aan desktop afbeeldingen zoeken. Dit zorgt ervoor dat de voorbeeld foto's kleiner zijn.",
@ -95,7 +102,14 @@
"videos":"Videos",
"news":"Nieuws",
"books":"Boeken",
"anon-view":"Anonieme Weergave"
"anon-view":"Anonieme Weergave",
"":"--",
"qdr:h":"Afgelopen uur",
"qdr:d":"Afgelopen 24 uur",
"qdr:w":"Vorige week",
"qdr:m":"Afgelopen maand",
"qdr:y":"Afgelopen jaar",
"config-time-period":"Tijdsperiode"
},
"lang_de":{
"search":"Suchen",
@ -117,7 +131,7 @@
"config-dark":"Dark Mode",
"config-safe":"Sicheres Suchen",
"config-alts":"Social-Media-Links ersetzen",
"config-alts-help":"Ersetzt Twitter/YouTube/Instagram/etc Links mit Alternativen, welche die Privatsphäre respektieren.",
"config-alts-help":"Ersetzt Twitter/YouTube/etc Links mit Alternativen, welche die Privatsphäre respektieren.",
"config-new-tab":"Links in neuen Tabs öffnen",
"config-images":"Bilder-Suche in Vollbild",
"config-images-help":"(Experimentell) Fügt 'View Image'-Einstellung zu Dekstop Bilder-Suchen hinzu. Dadurch werden Thumbnails in niedrigerer Auflösung angezeigt.",
@ -144,7 +158,14 @@
"videos":"Videos",
"news":"Nachrichten",
"books":"Bücher",
"anon-view":"Anonyme Ansicht"
"anon-view":"Anonyme Ansicht",
"":"--",
"qdr:h":"Letzte Stunde",
"qdr:d":"Vergangene 24 Stunden",
"qdr:w":"Letzte Woche",
"qdr:m":"Letzten Monat",
"qdr:y":"Vergangenes Jahr",
"config-time-period":"Zeitraum"
},
"lang_es":{
"search":"Buscar",
@ -166,7 +187,7 @@
"config-dark":"Modo Oscuro",
"config-safe":"Búsqueda Segura",
"config-alts":"Reemplazar Enlaces de Redes Sociales",
"config-alts-help":"Reemplaza los enlaces de Twitter/YouTube/Instagram/etc con alternativas que respetan la privacidad.",
"config-alts-help":"Reemplaza los enlaces de Twitter/YouTube/etc con alternativas que respetan la privacidad.",
"config-new-tab":"Abrir enlaces en una pestaña nueva",
"config-images":"Búsqueda de imágenes a tamaño completo",
"config-images-help":"(Experimental) Agrega la opción 'Ver imagen' a las búsquedas de imágenes de escritorio. Esto hará que las miniaturas de los resultados de la imagen aparezcan con una resolución más baja.",
@ -193,7 +214,70 @@
"videos":"Vídeos",
"news":"Noticias",
"books":"Libros",
"anon-view":"Vista Anónima"
"anon-view":"Vista Anónima",
"":"--",
"qdr:h":"Hora pasada",
"qdr:d":"últimas 24 horas",
"qdr:w":"Semana pasada",
"qdr:m":"El mes pasado",
"qdr:y":"Año pasado",
"config-time-period":"Periodo de tiempo"
},
"lang_id":{
"":"--",
"search":"Telusuri",
"config":"Konfigurasi",
"config-country":"Negara",
"config-lang":"Bahasa Antarmuka",
"config-lang-search":"Bahasa Penelusuran",
"config-near":"Dekat",
"config-near-help":"Nama Kota",
"config-block":"Blokir",
"config-block-help":"Daftar situs yang dipisahkan dengan koma",
"config-block-title":"Blokir berdasarkan Judul",
"config-block-title-help":"Gunakan regex",
"config-block-url":"Blokir berdasarkan URL",
"config-block-url-help":"Gunakan regex",
"config-theme":"Tema",
"config-nojs":"Hapus Javascript dalam Tampilan Anonim",
"config-alts-help":"Mengganti tautan Twitter/YouTube/dll dengan alternatif yang lebih menjaga privasi.",
"config-new-tab":"Buka Tautan dalam Tab Baru",
"config-images":"Pencarian Gambar Ukuran Penuh",
"config-images-help":"(Eksperimental) Menambahkan opsi 'Lihat Gambar' ke pencarian gambar desktop. Ini akan menyebabkan resolusi thumbnail hasil gambar menjadi lebih rendah.",
"config-tor":"Gunakan Tor",
"config-get-only":"Hanya Gunakan GET",
"config-url":"URL Dasar",
"config-pref-url":"URL Preferensi",
"config-pref-encryption":"Enkripsi Preferensi",
"config-pref-help":"Memerlukan WHOOGLE_CONFIG_PREFERENCES_KEY, jika tidak akan diabaikan.",
"config-css":"CSS Kustom",
"config-time-period":"Periode Waktu",
"load":"Muat",
"apply":"Terapkan",
"save-as":"Simpan Sebagai...",
"github-link":"Lihat di GitHub",
"translate":"terjemahkan",
"light":"terang",
"dark":"gelap",
"system":"sistem",
"ratelimit":"Instansi telah ratelimited",
"continue-search":"Lanjutkan penelusuran Anda dengan Farside",
"all":"Semua",
"images":"Gambar",
"maps":"Peta",
"videos":"Video",
"news":"Berita",
"books":"Buku",
"anon-view":"Tampilan Anonim",
"qdr:h":"1 jam yang lalu",
"qdr:d":"24 jam yang lalu",
"qdr:w":"1 minggu yang lalu",
"qdr:m":"1 bulan yang lalu",
"qdr:y":"1 tahun yang lalu"
},
"lang_it":{
"search":"Cerca",
@ -215,7 +299,7 @@
"config-dark":"Modalità Notte",
"config-safe":"Ricerca Sicura",
"config-alts":"Sostituisci link dei social",
"config-alts-help":"Sostituisci link di Twitter/YouTube/Instagram/etc con alternative che rispettano la privacy.",
"config-alts-help":"Sostituisci link di Twitter/YouTube/etc con alternative che rispettano la privacy.",
"config-new-tab":"Apri i link in una nuova scheda",
"config-images":"Ricerca Immagini",
"config-images-help":"(Sperimentale) Aggiunge la modalità 'Ricerca Immagini'. Questo ridurrà drasticamente la qualità delle miniature durante la ricerca.",
@ -242,7 +326,14 @@
"videos":"Video",
"news":"Notizie",
"books":"Libri",
"anon-view":"Vista Anonima"
"anon-view":"Vista Anonima",
"":"--",
"qdr:h":"Ultima ora",
"qdr:d":"Ultime 24 ore",
"qdr:w":"Settimana scorsa",
"qdr:m":"Mese scorso",
"qdr:y":"L'anno scorso",
"config-time-period":"Periodo di tempo"
},
"lang_pt":{
"search":"Pesquisar",
@ -264,7 +355,7 @@
"config-dark":"Modo Escuro",
"config-safe":"Pesquisa Segura",
"config-alts":"Substituir Links de Redes Sociais",
"config-alts-help":"Substitui os links do Twitter/YouTube/Instagram/etc. por alternativas que respeitam sua privacidade.",
"config-alts-help":"Substitui os links do Twitter/YouTube/etc. por alternativas que respeitam sua privacidade.",
"config-new-tab":"Abrir Links em Nova Aba",
"config-images":"Pesquisa de Imagem em Tamanho Real",
"config-images-help":"(Experimental) Adiciona a opção 'Mostrar Imagem' às pesquisas de imagens no modo 'para computador'. Isso fará com que as miniaturas do resultado da imagem sejam de menor resolução.",
@ -291,7 +382,14 @@
"videos":"Vídeos",
"news":"Notícias",
"books":"Livros",
"anon-view":"Visualização Anônima"
"anon-view":"Visualização Anônima",
"":"--",
"qdr:h":"Hora passada",
"qdr:d":"últimas 24 horas",
"qdr:w":"Semana passada",
"qdr:m":"Mês passado",
"qdr:y":"Ano passado",
"config-time-period":"Período de tempo"
},
"lang_ru":{
"search":"Поиск",
@ -313,7 +411,7 @@
"config-dark":"Тёмный режим",
"config-safe":"Безопасный поиск",
"config-alts":"Заменить ссылки на социальные сети",
"config-alts-help":"Замена ссылкок Twitter, YouTube, Instagram и т.д. на альтернативы, уважающие конфиденциальность.",
"config-alts-help":"Замена ссылкок Twitter, YouTube, и т.д. на альтернативы, уважающие конфиденциальность.",
"config-new-tab":"Открывать ссылки в новой вкладке",
"config-images-help":"(Эксперимент) Добавляет опцию 'Просмотр изображения' к поиску изображений в ПК-режиме. Это приведет к тому, что миниатюры изображений будут иметь более низкое разрешение.",
"config-alts":"Remplacer les liens des réseaux sociaux",
"config-alts-help":"Remplacer les liens Twitter/YouTube/Instagram/etc avec leurs alternatives respectueuses de la vie privée.",
"config-alts-help":"Remplacer les liens Twitter/YouTube/etc avec leurs alternatives respectueuses de la vie privée.",
"config-new-tab":"Ouvrir les Liens dans un Nouveau Onglet",
"config-images":"Recherche d'image en plein écran",
"config-images-help":"(Expérimental) Ajouter l'option 'Voir Image' aux recherches d'images sur ordinateur. Les vignettes des résultats d'image seront de plus faible résolution.",
@ -487,7 +606,14 @@
"videos":"Vidéos",
"news":"Actualités",
"books":"Livres",
"anon-view":"Vue anonyme"
"anon-view":"Vue anonyme",
"":"--",
"qdr:h":"Heure passée",
"qdr:d":"Dernières 24 heures",
"qdr:w":"La semaine dernière",
"qdr:m":"Mois passé",
"qdr:y":"L'année passée",
"config-time-period":"Période de temps"
},
"lang_fa":{
"search":"جستجو",
@ -536,7 +662,14 @@
"videos":"ویدئوها",
"news":"اخبار",
"books":"کتابها",
"anon-view":"نمای ناشناس"
"anon-view":"نمای ناشناس",
"":"--",
"qdr:h":"ساعت گذشته",
"qdr:d":"24 ساعت گذشته",
"qdr:w":"هفته گذشته",
"qdr:m":"ماه گذشته",
"qdr:y":"سال گذشته",
"config-time-period":"بازه زمانی"
},
"lang_cs":{
"search":"Hledat",
@ -558,7 +691,7 @@
"config-dark":"Tmavý motiv",
"config-safe":"Bezpečné vyhledávání",
"config-alts":"Nahradit odkazy na sociální média",
"config-alts-help":"Nahradí odkazy na Twitter, YouTube, Instagram atd. alternativami respektujícími soukromí.",
"config-alts-help":"Nahradí odkazy na Twitter, YouTube, atd. alternativami respektujícími soukromí.",
"config-new-tab":"Otevírat odkazy na novém listu",
"config-images":"Vyhledávání obrázků v plné velikosti",
"config-images-help":"(Experimentální) Přidá volbu ‚Zobrazit obrázek‘ do vyhledávání obrázků na ploše. Způsobí to, že náhledy výsledků vyhledávání obrázků budou mít nižší rozlišení.",
"config-alts":"Заменете връзките към социалните медии",
"config-alts-help":"Заменя връзките на Twitter/YouTube/Instagram и т.н. с защитени алтернативни поверителни връзки.",
"config-alts-help":"Заменя връзките на Twitter/YouTube и т.н. с защитени алтернативни поверителни връзки.",
"config-new-tab":"Отваряне на връзките в нов раздел",
"config-images":"Търсене на изображения в пълен размер",
"config-images-help":"(Експериментално) Добавя опцията „Преглед на изображение“ към резултатите от търсене на изображения през работния плот на компютъра. Това ще доведе до по-ниска разделителна способност на миниатюрите, в резултатите от търсене на изображения.",
"config-alts-help":"Twitter/YouTube/Instagram 등의 링크를 프라이버시를 존중하는 링크로 대체합니다",
"config-alts-help":"Twitter/YouTube 등의 링크를 프라이버시를 존중하는 링크로 대체합니다",
"config-new-tab":"새 탭에서 열기",
"config-images":"최대 크기 이미지 검색",
"config-images-help":"(실험적) 데스크톱 이미지 검색에 '이미지 보기' 옵션을 추가합니다. 이미지 결과 미리보기 썸네일이 낮은 해상도로 표시됩니다.",
@ -830,38 +998,45 @@
"videos":"동영상",
"news":"뉴스",
"books":"도서",
"anon-view":"익명 보기"
"anon-view":"익명 보기",
"":"--",
"qdr:h":"지난 시간",
"qdr:d":"지난 24시간",
"qdr:w":"지난 주",
"qdr:m":"지난달",
"qdr:y":"지난 해",
"config-time-period":"기간"
},
"lang_ku":{
"search":"Lêgerîn",
"config":"Pevsazî",
"search":"Bigere",
"config":"Sazkarî",
"config-country":"Welat",
"config-lang":"Zimanê Navrûyê",
"config-lang-search":"Zimanê Lêgerînê",
"config-near":"Nêzîk",
"config-near-help":"Navê Bajêr",
"config-block":"Astengkirin",
"config-block-help":"Lîsteya malperê ya ji hev veqetandî bi rêya bêhnok",
"config-block-help":"Rêzoka malperê ya ji hev veqetandî bi riya bêhnok",
"config-block-title":"Bi ya Sernavê Asteng bike",
"config-block-title-help":"regex bi kar bîne",
"config-block-url":"Bi ya URL asteng bike",
"config-block-url":"Bi ya Girêdanê asteng bike",
"config-block-url-help":"regex bi kar bîne",
"config-theme":"Rûkar",
"config-nojs":"Javascript Rake di Nîşandanên Nenenas de",
"config-anon-view":"Girêdanên Nenas Nîşan bide",
"config-dark":"Awaya Tarî",
"config-safe":"Lêgerîna Parastî",
"config-alts":"Girêdanên Medya Civakî Biguherîne",
"config-alts-help":"Girêdanên Twitter/YouTube/Instagram/hwd biguherîne bi alternatîvên ku ji taybetiyê re rêzê digrin.",
"config-alts":"Girêdanên Tora Civakî Biguherîne",
"config-alts-help":"Girêdanên Twitter/YouTube/hwd biguherîne bi alternatîvên ku ji taybetiyê re rêzê digrin.",
"config-new-tab":"Girêdanan di Rûgereke Nû de Veke",
"config-images":"Lêgerîna Wêne bi Mezinahiya Tevahî",
"config-images-help":"(Ezmûnî) Vebijêrka 'Wêneyê Nîşan bide' tevlî lêgerînên wêneyê yê sermaseyê bike. Ev ê bibe sedem ku encamê çareseriya wêneyn nîşanê kêmtir bibe.",
"config-images-help":"(Ezmûnî) Vebijêrka 'Wêneyê Nîşan bide' tevlî lêgerînên wêneyê yê sermaseyê bike. Ev ê bibe sedem ku çareseriya encamê wêneyên nîşanê kêmtir bibe.",
"config-alts":"Sosial Media Linklərini dəyişdirin",
"config-alts-help":"Twitter/YouTube/s. linkləri alternativlərə uyğun məxfiliklə əvəz edir.",
"config-new-tab":"Linkləri Yeni Tabda açın",
"config-images":"Tam ölçülü Şəkil Axtarışı",
"config-images-help":"(Eksperimental) Masaüstü şəkil axtarışlarına 'Şəkilə Bax' seçimini əlavə edir. Bu, şəkil nəticəsi miniatürlərinin daha aşağı ayırdetmə keyfiyyətinə səbəb olacaq.",
"config-tor":"Tor-dan istifadə edin",
"config-get-only":"Yalnız GET Sorğuları",
"config-url":"Kök URL",
"config-pref-url":"URL Tərcihləri",
"config-pref-encryption":"Encrypt Tərcihləri",
"config-pref-help":"WHOOGLE_CONFIG_PREFERENCES_KEY tələb edir, əks halda bu nəzərə alınmayacaq.",
"config-css":"Fərdi CSS",
"config-time-period":"Müddət",
"load":"Yüklə",
"apply":"Tətbiq edin",
"save-as":"Fərqli Saxla...",
"github-link":"GitHub-da baxın",
"translate":"tərcümə",
"light":"işıqlı",
"dark":"qaranlıq",
"system":"sistem",
"ratelimit":"Nümunə dərəcəsi məhdudlaşdırılıb",
"continue-search":"Axtarışınızı Farside ilə davam etdirin",
"all":"Hamısı",
"images":"Şəkillər",
"maps":"Xəritələr",
"videos":"Videolar",
"news":"Xəbərlər",
"books":"Kitablar",
"anon-view":"Anonim Baxış",
"qdr:h":"Keçən saat",
"qdr:d":"Keçən 24 saat",
"qdr:w":"Keçən həftə",
"qdr:m":"Keçən ay",
"qdr:y":"Keçən il"
},
"lang_el":{
"":"--",
"search":"Αναζήτηση",
"config":"Ρυθμήσεις",
"config-country":"Χώρα",
"config-lang":"Γλώσσα Περιβάλλοντος",
"config-lang-search":"Γλώσσα Αναζήτησης",
"config-near":"Κοντά",
"config-near-help":"Όνομα Πόλης",
"config-block":"Block",
"config-block-help":"Comma-separated site list",
"config-block-title":"Block by Title",
"config-block-title-help":"Use regex",
"config-block-url":"Block by URL",
"config-block-url-help":"Use regex",
"config-theme":"Θέμα",
"config-nojs":"Αφαίρεση Javascript σε ανώνυμη προβολή",
"config-anon-view":"Show Anonymous View Links",
"config-dark":"Dark Mode",
"config-safe":"Ασφαλής Αναζήτηση",
"config-alts":"Replace Social Media Links",
"config-alts-help":"Replaces Twitter/YouTube/etc links with privacy respecting alternatives.",
"config-new-tab":"Άνοιγμα συνδέσμου σε νέα καρτέλα",
"config-images":"Full Size Image Search",
"config-images-help":"(Experimental) Adds the 'View Image' option to desktop image searches. This will cause image result thumbnails to be lower resolution.",
"config-tor":"Χρήση Tor",
"config-get-only":"GET Requests Only",
"config-url":"Root URL",
"config-pref-url":"Preferences URL",
"config-pref-encryption":"Encrypt Preferences",
"config-pref-help":"Requires WHOOGLE_CONFIG_PREFERENCES_KEY, otherwise this will be ignored.",
"config-css":"Custom CSS",
"config-time-period":"Time Period",
"load":"Load",
"apply":"Apply",
"save-as":"Save As...",
"github-link":"View on GitHub",
"translate":"translate",
"light":"light",
"dark":"dark",
"system":"system",
"ratelimit":"Instance has been ratelimited",
"continue-search":"Continue your search with Farside",