about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--src/_locales/en/messages.json8
-rw-r--r--src/_locales/es/messages.json146
-rw-r--r--src/_locales/es/store.md33
-rw-r--r--src/assets/javascripts/helpers/google-search.js6
-rw-r--r--src/assets/javascripts/helpers/google-translate.js12
-rw-r--r--src/assets/javascripts/helpers/instagram.js6
-rw-r--r--src/assets/javascripts/helpers/reddit.js2
-rw-r--r--src/assets/javascripts/helpers/twitter.js2
-rw-r--r--src/assets/javascripts/helpers/youtube.js14
-rw-r--r--src/manifest.json13
-rw-r--r--src/pages/background/background.js28
-rw-r--r--src/pages/options/options.html29
-rw-r--r--src/pages/options/options.js22
-rw-r--r--src/pages/popup/popup.html26
-rw-r--r--src/pages/popup/popup.js7
16 files changed, 348 insertions, 8 deletions
diff --git a/README.md b/README.md
index 89cdc475..2c251b52 100644
--- a/README.md
+++ b/README.md
@@ -39,9 +39,11 @@ Privacy Redirect allows setting custom instances, instances can be found here:
   - [SearX](https://searx.github.io/searx/)
   - [DuckDuckGo](https://duckduckgo.com)
   - [Startpage](https://startpage.com)
+  - [Ecosia](https://www.ecosia.org)
   - [Qwant](https://www.qwant.com)
   - [Mojeek](https://www.mojeek.com)
   - [Presearch](https://www.presearch.org)
+  - [Whoogle](https://benbusby.com/projects/whoogle-search/)
 
 ## Development
 
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
index 1dce07bd..dd3c3a95 100644
--- a/src/_locales/en/messages.json
+++ b/src/_locales/en/messages.json
@@ -31,6 +31,10 @@
     "message": "Search Engine Instance",
     "description": "Label for Search Engine instance field option (options)."
   },
+  "simplyTranslateInstance": {
+    "message": "SimplyTranslate Instance",
+    "description": "Label for SimplyTranslate instance field option (options)."
+  },
   "disableNitter": {
     "message": "Nitter Redirects",
     "description": "Label for enable/disable Nitter redirects option (options & pop-up)."
@@ -55,6 +59,10 @@
     "message": "Search Engine Redirects",
     "description": "Label for enable/disable Search Engine redirects option (options & pop-up)."
   },
+  "disableSimplyTranslate": {
+    "message": "SimplyTranslate Redirects",
+    "description": "Label for enable/disable SimplyTranslate redirects option (options & pop-up)."
+  },
   "alwaysProxy": {
     "message": "Always proxy videos through Invidious",
     "description": "Label for 'Always proxy videos through Invidious' option (options)."
diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json
new file mode 100644
index 00000000..852c6ad4
--- /dev/null
+++ b/src/_locales/es/messages.json
@@ -0,0 +1,146 @@
+{
+  "extensionName": {
+    "message": "Privacy Redirect",
+    "description": "Nombre de la extensión."
+  },
+  "extensionDescription": {
+    "message": "Redirige las solicitudes de Twitter, Youtube, Instagram, Google Maps, Reddit y la Búsqueda de Google a alternativas que respetan su privacidad.",
+    "description": "Descripción de la extensión."
+  },
+  "nitterInstance": {
+    "message": "Instancia de Nitter",
+    "description": "Etiqueta del campo para la instancia de Nitter (opciones)."
+  },
+  "invidiousInstance": {
+    "message": "Instancia de Invidious",
+    "description": "Etiqueta del campo para la instancia de Invidious (opciones)."
+  },
+  "bibliogramInstance": {
+    "message": "Instancia de Bibliogram",
+    "description": "Etiqueta del campo para la instancia de Bibliogram (opciones)."
+  },
+  "osmInstance": {
+    "message": "Instancia de OpenStreetMap",
+    "description": "Etiqueta del campo para la instancia de OSM (opciones)."
+  },
+  "redditInstance": {
+    "message": "Instancia de Reddit",
+    "description": "Etiqueta del campo para la instancia de Reddit (opciones)."
+  },
+  "searchEngineInstance": {
+    "message": "Instancia de Buscador",
+    "description": "Etiqueta del campo para la instancia de Buscador (opciones)."
+  },
+  "disableNitter": {
+    "message": "Redirecciones de Nitter",
+    "description": "Etiqueta para activar/desactivar la opción de redirecciones de Nitter (opciones y pop-up)."
+  },
+  "disableInvidious": {
+    "message": "Redirecciones de Invidious",
+    "description": "Etiqueta para activar/desactivar la opción de redirecciones de Invidious (opciones y pop-up)."
+  },
+  "disableBibliogram": {
+    "message": "Redirecciones de Bibliogram",
+    "description": "Etiqueta para activar/desactivar la opción de redirecciones de Bibliogram (opciones y pop-up)."
+  },
+  "disableOsm": {
+    "message": "Redirecciones de OpenStreetMap",
+    "description": "Etiqueta para activar/desactivar la opción de redirecciones de OSM (opciones y pop-up)."
+  },
+  "disableReddit": {
+    "message": "Redirecciones de Reddit",
+    "description": "Etiqueta para activar/desactivar la opción de redirecciones de Reddit (opciones y pop-up)."
+  },
+  "disableSearchEngine": {
+    "message": "Redirecciones de Buscador",
+    "description": "Etiqueta para activar/desactivar la opción de redirecciones de Buscador (opciones y pop-up)."
+  },
+  "alwaysProxy": {
+    "message": "Siempre usar el proxy de Invidious para videos",
+    "description": "Etiqueta para la opción de 'Siempre usar el proxy de Invidious para videos' (opciones)."
+  },
+  "onlyEmbeddedVideo": {
+    "message": "Solo redirigir los videos incrustados a Invidious",
+    "description": "Etiqueta para la opción de 'Solo redirigir los videos incrustados a Invidious' (opciones)."
+  },
+  "videoQuality": {
+    "message": "Calidad de Video de Invidious",
+    "description": "Etiqueta para la opción de 'Calidad de Video de Invidious' (opciones)."
+  },
+  "removeTwitterSW": {
+    "message": "Eliminar proactivamente el service worker de Twitter",
+    "description": "Etiqueta para la opción de 'Eliminar proactivamente el service worker de Twitter' (opciones)."
+  },
+  "invidiousDarkMode": {
+    "message": "Modo oscuro de Invidious siempre activo",
+    "description": "Etiqueta para la opción de 'Modo oscuro de Invidious siempre activo' (opciones)."
+  },
+  "persistInvidiousPrefs": {
+    "message": "Preservar preferencias de Invidious (como cookie)",
+    "description": "Etiqueta para la opción de 'Preservar preferencias de Invidious (como cookie)' (opciones)."
+  },
+  "generalTab": {
+    "message": "General",
+    "description": "Pestaña general (opciones)."
+  },
+  "advancedTab": {
+    "message": "Avanzado",
+    "description": "Pestaña avanzado (opciones)."
+  },
+  "exceptionsTab": {
+    "message": "Excepciones",
+    "description": "Pestaña de excepciones (opciones)."
+  },
+  "exceptionsDescriptionP1": {
+    "message": "Ingrese la URL o la Expresión Regular a excluir de las redirecciones.",
+    "description": "Una descripción de la función 'Excepciones' párrafo 1 (opciones)."
+  },
+  "exceptionsDescriptionP2": {
+    "message": "Todas las solicitudes para o provenientes de una URL que coincida con la excepción serán excluidas de las redirecciones.",
+    "description": "Una descripción de la función 'Excepciones' párrafo 2 (opciones)."
+  },
+  "exceptionsDescriptionP3": {
+    "message": "Nota – Soporta expresiones regulares de JavaScript, excluyendo las barras oblicuas de cierre.",
+    "description": "Una descripción de la función 'Excepciones' párrafo 3 (opciones)."
+  },
+  "addException": {
+    "message": "Agregar Excepción",
+    "description": "Botón de 'Agregar Excepción' (opciones)."
+  },
+  "moreOptions": {
+    "message": "Más Opciones",
+    "description": "Botón de 'Más Opciones' (pop-up)."
+  },
+  "privacy": {
+    "message": "Privacy",
+    "description": "Título de la extensión - Privacy (pop-up)."
+  },
+  "redirect": {
+    "message": "Redirect",
+    "description": "Título de la extensión - Redirect (pop-up)."
+  },
+  "version": {
+    "message": "Versión",
+    "description": "Versión"
+  },
+  "useFreeTube": {
+    "message": "Usar FreeTube en vez de Invidious cuando sea posible",
+    "description": "Etiqueta para la opción de 'Usar FreeTube en vez de Invidious cuando sea posible' (opciones)."
+  },
+  "nitterRandomPool": {
+    "message": "Grupo de instancias aleatorias de Nitter (separadas por coma)",
+    "description": "Etiqueta para la opción de 'Grupo de instancias aleatorias de Nitter (separadas por coma)' (opciones)."
+  },
+  "invidiousRandomPool": {
+    "message": "Grupo de instancias aleatorias de Invidious (separadas por coma)",
+    "description": "Etiqueta para la opción de 'Grupo de instancias aleatorias de Invidious (separadas por coma)' (opciones)."
+  },
+  "bibliogramRandomPool": {
+    "message": "Grupo de instancias aleatorias de Bibliogram (separadas por coma)",
+    "description": "Etiqueta para la opción de 'Grupo de instancias aleatorias de Bibliogram (separadas por coma)' (opciones)."
+  },
+  "randomInstancePlaceholder": {
+    "message": "Instancia aleatoria (ninguna seleccionada)",
+    "description": "Entrada provisional en la configuración del proveedor de instancia que selecciona una instancia aleatoria del grupo cuando ninguna está seleccionada"
+  }
+}
diff --git a/src/_locales/es/store.md b/src/_locales/es/store.md
new file mode 100644
index 00000000..8c198de2
--- /dev/null
+++ b/src/_locales/es/store.md
@@ -0,0 +1,33 @@
+# Extension Store (AMO & Chrome Web Store) Listing
+
+## Summary:
+
+```
+Una extensión web simple que redirige las solicitudes de Twitter, Youtube, Instagram, Google Maps, Reddit y la Búsqueda de Google a alternativas que respetan su privacidad.
+```
+
+## Description:
+
+```
+Redirige las solicitudes de Twitter, Youtube, Instagram, Google Maps, Reddit y la Búsqueda de Google a alternativas que respetan su privacidad. - <a href='https://nitter.net/'>Nitter</a>, <a href='https://invidio.us/'>Invidious</a>, <a href='https://bibliogram.art/'>Bibliogram</a>, & <a href='https://www.openstreetmap.org'>OpenStreetMap</a>.
+
+Permite ingresar instancias personalizadas, activar/desactivar todas las redirecciones y más.
+
+<b>★ Más Información: ℹ️</b>
+<ul>
+  <li><a href='https://github.com/zedeus/nitter#nitter-wip'>Nitter</a></li>
+  <li><a href='https://github.com/omarroth/invidious#invidious'>Invidious</a></li>
+  <li><a href='https://github.com/cloudrac3r/bibliogram#bibliogram'>Bibliogram</a></li>
+  <li><a href='https://wiki.openstreetmap.org/'>OpenStreetMap</a></li>
+</ul>
+
+El código de esta extensión web está disponible en <a href='https://github.com/SimonBrazell/privacy-redirect'>Github</a>.
+
+<b>★ Dona: 👨🏻‍💻</b>
+Si te gusta esta extensión y tienes los recursos económicos, por favor considera <a href='https://www.buymeacoffee.com/SimonBrazell'>comprarme un café</a> ☕️ para mostrar tu aprecio y apoyo al desarrollo del proyecto.
+
+<b>★ Permisos: ℹ️</b>
+<ul>
+  <li>Por favor, tenga en cuenta que se requiere acceso a todos los eventos de navegación del sitio web (todas las URL), no solo a los dominios de destino, para permitir redireccionamientos de videos incrustados. En este momento no conozco ninguna otra manera de lograr redirecciones iframe; sin embargo, estaría feliz de escuchar algunas sugerencias al respecto 🙂</li>
+</ul>
+```
diff --git a/src/assets/javascripts/helpers/google-search.js b/src/assets/javascripts/helpers/google-search.js
index afa8198e..53f960dd 100644
--- a/src/assets/javascripts/helpers/google-search.js
+++ b/src/assets/javascripts/helpers/google-search.js
@@ -2,6 +2,7 @@ const targets = /https?:\/\/(((www|maps)\.)?(google\.).*(\/search)|search\.(goog
 const redirects = [
   { link: "https://duckduckgo.com", q: "/" },
   { link: "https://startpage.com", q: "/search/" },
+  { link: "https://www.ecosia.org", q: "/search" },
   { link: "https://www.qwant.com", q: "/" },
   { link: "https://www.mojeek.com", q: "/search" },
   { link: "https://search.snopyta.org", q: "/" },
@@ -12,6 +13,11 @@ const redirects = [
   { link: "https://searx.ninja", q: "/" },
   { link: "https://tromland.org/searx", q: "/search" },
   { link: "https://engine.presearch.org", q: "/search" },
+  { link: "https://searx.silkky.cloud", q: "/" },
+  { link: "https://search.trom.tf", q: "/" },
+  { link: "https://whoogle.sdf.org", q: "/search" },
+  { link: "https://whoogle.himiko.cloud", q: "/search" },
+  { link: "https://whoogle-search.zeet.app", q: "/search" },
 ];
 
 export default {
diff --git a/src/assets/javascripts/helpers/google-translate.js b/src/assets/javascripts/helpers/google-translate.js
new file mode 100644
index 00000000..e6f450da
--- /dev/null
+++ b/src/assets/javascripts/helpers/google-translate.js
@@ -0,0 +1,12 @@
+const targets = [
+  "translate.google.com"
+];
+
+const redirects = [
+  "https://translate.metalune.xyz"
+];
+
+export default {
+  targets,
+  redirects,
+}
diff --git a/src/assets/javascripts/helpers/instagram.js b/src/assets/javascripts/helpers/instagram.js
index cb0eae52..1d86773b 100644
--- a/src/assets/javascripts/helpers/instagram.js
+++ b/src/assets/javascripts/helpers/instagram.js
@@ -9,13 +9,11 @@ const redirects = [
   "https://bibliogram.snopyta.org",
   "https://bibliogram.pussthecat.org",
   "https://bibliogram.nixnet.services",
-  "https://bg.endl.site",
-  "https://bibliogram.13ad.de",
-  "https://bibliogram.pixelfed.uno",
   "https://bibliogram.ethibox.fr",
   "https://bibliogram.hamster.dance",
   "https://bibliogram.kavin.rocks",
-  "https://bibliogram.ggc-project.de",
+  "https://insta.trom.tf",
+  "https://bibliogram.hamster.dance"
 ];
 const reservedPaths = [
   "about",
diff --git a/src/assets/javascripts/helpers/reddit.js b/src/assets/javascripts/helpers/reddit.js
index 7edf0375..a21b3288 100644
--- a/src/assets/javascripts/helpers/reddit.js
+++ b/src/assets/javascripts/helpers/reddit.js
@@ -12,6 +12,8 @@ const redirects = [
   "https://libreddit.kavin.rocks",
   "https://libreddit.insanity.wtf",
   "https://libreddit.dothq.co",
+  "https://libreddit.silkky.cloud",
+  "https://libreddit.himiko.cloud",
   // teddit: privacy w/ old UI
   "https://teddit.net",
   "https://teddit.ggc-project.de",
diff --git a/src/assets/javascripts/helpers/twitter.js b/src/assets/javascripts/helpers/twitter.js
index 38f70423..c6f511d4 100644
--- a/src/assets/javascripts/helpers/twitter.js
+++ b/src/assets/javascripts/helpers/twitter.js
@@ -26,9 +26,9 @@ const redirects = [
   "https://nitter.kavin.rocks",
   "https://tweet.lambda.dance",
   "https://nitter.cc",
-  "https://nitter.weaponizedhumiliation.com",
   "https://nitter.vxempire.xyz",
   "https://nitter.unixfox.eu",
+  "https://bird.trom.tf",
   "http://3nzoldnxplag42gqjs23xvghtzf6t6yzssrtytnntc6ppc7xxuoneoad.onion",
   "http://nitter.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion",
   "http://nitterlgj3n5fgwesu3vxc5h67ruku33nqaoeoocae2mvlzhsu6k7fqd.onion",
diff --git a/src/assets/javascripts/helpers/youtube.js b/src/assets/javascripts/helpers/youtube.js
index 861c5af3..974b4933 100644
--- a/src/assets/javascripts/helpers/youtube.js
+++ b/src/assets/javascripts/helpers/youtube.js
@@ -10,8 +10,8 @@ const targets = [
   "music.youtube.com",
 ];
 /*
-    Please remember to also update the manifest.json file 
-    (content_scripts > matches, 'persist-invidious-prefs.js') 
+    Please remember to also update the manifest.json file
+    (content_scripts > matches, 'persist-invidious-prefs.js')
     when updating this list:
   */
 const redirects = [
@@ -25,6 +25,16 @@ const redirects = [
   "https://invidious.site",
   "https://yewtu.be",
   "https://invidious.tube",
+  "https://invidious.silkky.cloud",
+  "https://invidious.fdn.fr",
+  "https://invidious.himiko.cloud",
+  "https://inv.skyn3t.in",
+  "https://tube.incognet.io",
+  "https://invidious.tinfoil-hat.net",
+  "https://invidious.namazso.eu",
+  "https://vid.puffyan.us",
+  "https://dev.viewtube.io",
+  "https://invidious.048596.xyz",
   "http://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion",
   "http://qklhadlycap4cnod.onion",
   "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion",
diff --git a/src/manifest.json b/src/manifest.json
index b7ea090c..30c1ada6 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -49,6 +49,18 @@
         "*://invidious.site/*",
         "*://yewtu.be/*",
         "*://invidious.tube/*",
+        "*://invidious.silkky.cloud/*",
+        "*://invidious.fdn.fr/*",
+        "*://invidious.himiko.cloud/*",
+        "*://inv.skyn3t.in/*",
+        "*://tube.incognet.io/*",
+        "*://invidious.tinfoil-hat.net/*",
+        "*://invidious.namazso.eu/*",
+        "*://vid.puffyan.us/*",
+        "*://invidious.048596.xyz/*",
+        "*://dev.viewtube.io/*",
+	      "*://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion/*",
+        "*://invidious.048596.yxz/*",
         "*://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion/*",
         "*://qklhadlycap4cnod.onion/*",
         "*://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion/*",
@@ -65,7 +77,6 @@
   "web_accessible_resources": ["assets/javascripts/helpers/*"],
   "browser_specific_settings": {
     "gecko": {
-      "id": "{b7f9d2cd-d772-4302-8c3f-eb941af36f76}",
       "strict_min_version": "60.0"
     }
   }
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index 2047bfbe..fe426268 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -7,6 +7,7 @@ import instagramHelper from "../../assets/javascripts/helpers/instagram.js";
 import mapsHelper from "../../assets/javascripts/helpers/google-maps.js";
 import redditHelper from "../../assets/javascripts/helpers/reddit.js";
 import searchHelper from "../../assets/javascripts/helpers/google-search.js";
+import googleTranslateHelper from "../../assets/javascripts/helpers/google-translate.js";
 
 const nitterInstances = twitterHelper.redirects;
 const twitterDomains = twitterHelper.targets;
@@ -29,6 +30,9 @@ const redditBypassPaths = redditHelper.bypassPaths;
 const redditDefault = redditHelper.redirects[0];
 const googleSearchRegex = searchHelper.targets;
 const searchEngineInstances = searchHelper.redirects;
+const simplyTranslateInstances = googleTranslateHelper.redirects;
+const simplyTranslateDefault = simplyTranslateInstances[0];
+const googleTranslateDomains = googleTranslateHelper.targets;
 
 let disableNitter;
 let disableInvidious;
@@ -36,12 +40,14 @@ let disableBibliogram;
 let disableOsm;
 let disableReddit;
 let disableSearchEngine;
+let disableSimplyTranslate;
 let nitterInstance;
 let invidiousInstance;
 let bibliogramInstance;
 let osmInstance;
 let redditInstance;
 let searchEngineInstance;
+let simplyTranslateInstance;
 let alwaysProxy;
 let onlyEmbeddedVideo;
 let videoQuality;
@@ -66,12 +72,14 @@ browser.storage.sync.get(
     "osmInstance",
     "redditInstance",
     "searchEngineInstance",
+    "simplyTranslateInstance",
     "disableNitter",
     "disableInvidious",
     "disableBibliogram",
     "disableOsm",
     "disableReddit",
     "disableSearchEngine",
+    "disableSimplyTranslate",
     "alwaysProxy",
     "onlyEmbeddedVideo",
     "videoQuality",
@@ -93,12 +101,14 @@ browser.storage.sync.get(
     osmInstance = result.osmInstance || osmDefault;
     redditInstance = result.redditInstance || redditDefault;
     searchEngineInstance = result.searchEngineInstance;
+    simplyTranslateInstance = result.simplyTranslateInstance || simplyTranslateDefault;
     disableNitter = result.disableNitter;
     disableInvidious = result.disableInvidious;
     disableBibliogram = result.disableBibliogram;
     disableOsm = result.disableOsm;
     disableReddit = result.disableReddit;
     disableSearchEngine = result.disableSearchEngine;
+    disableSimplyTranslate = result.disableSimplyTranslate;
     alwaysProxy = result.alwaysProxy;
     onlyEmbeddedVideo = result.onlyEmbeddedVideo;
     videoQuality = result.videoQuality;
@@ -138,6 +148,9 @@ browser.storage.onChanged.addListener((changes) => {
   if ("osmInstance" in changes) {
     osmInstance = changes.osmInstance.newValue || osmDefault;
   }
+  if ("simplyTranslateInstance" in changes) {
+    simplyTranslateInstance = changes.simplyTranslateInstance.newValue || simplyTranslateDefault;
+  }
   if ("redditInstance" in changes) {
     redditInstance = changes.redditInstance.newValue || redditDefault;
   }
@@ -162,6 +175,9 @@ browser.storage.onChanged.addListener((changes) => {
   if ("disableSearchEngine" in changes) {
     disableSearchEngine = changes.disableSearchEngine.newValue;
   }
+  if ("disableSimplyTranslate" in changes) {
+    disableSimplyTranslate = changes.disableSimplyTranslate.newValue;
+  }
   if ("alwaysProxy" in changes) {
     alwaysProxy = changes.alwaysProxy.newValue;
   }
@@ -483,6 +499,14 @@ function redirectSearchEngine(url, initiator) {
   return `${searchEngine.link}${searchEngine.q}?${search}`;
 }
 
+function redirectGoogleTranslate(url, initiator) {
+  if (disableSimplyTranslate || isException(url, initiator)) {
+    return null;
+  }
+
+  return `${simplyTranslateInstance}/${url.search}`;
+}
+
 browser.webRequest.onBeforeRequest.addListener(
   (details) => {
     const url = new URL(details.url);
@@ -520,6 +544,10 @@ browser.webRequest.onBeforeRequest.addListener(
       redirect = {
         redirectUrl: redirectSearchEngine(url, initiator),
       };
+    } else if (googleTranslateDomains.includes(url.host)) {
+      redirect = {
+        redirectUrl: redirectGoogleTranslate(url, initiator),
+      }
     }
     if (redirect && redirect.redirectUrl) {
       console.info(
diff --git a/src/pages/options/options.html b/src/pages/options/options.html
index 8dc1eb72..27e9fe5d 100644
--- a/src/pages/options/options.html
+++ b/src/pages/options/options.html
@@ -165,6 +165,25 @@
         </table>
       </section>
       <section class="settings-block">
+        <table class="option" aria-label="Toggle SimplyTranslate redirects">
+          <tbody>
+            <tr>
+              <td>
+                <h1 data-localise="__MSG_disableSimplyTranslate__" class="new-badge" data-new-badge>SimplyTranslate Redirects</h1>
+              </td>
+              <td>
+                <input
+                  aria-hidden="true"
+                  id="disable-simply-translate"
+                  type="checkbox"
+                />&nbsp;
+                <label for="disable-simply-translate" class="checkbox-label"></label>
+              </td>
+            </tr>
+          </tbody>
+        </table>
+      </section>
+      <section class="settings-block">
         <h1 data-localise="__MSG_nitterInstance__">Nitter Instance</h1>
         <div class="autocomplete">
           <input
@@ -230,6 +249,16 @@
         </div>
       </section>
       <section class="settings-block">
+        <h1 data-localise="__MSG_simplyTranslateInstance__">SimplyTranslate Instance</h1>
+        <div class="autocomplete">
+          <input
+            id="simply-translate-instance"
+            type="url"
+            placeholder="https://translate.metalune.xyz"
+          />
+        </div>
+      </section>
+      <section class="settings-block">
         <h1 data-localise="__MSG_theme__">Theme</h1>
         <select id="theme">
           <option value="">System</option>
diff --git a/src/pages/options/options.js b/src/pages/options/options.js
index 0f785f6e..cfc51e81 100644
--- a/src/pages/options/options.js
+++ b/src/pages/options/options.js
@@ -7,6 +7,7 @@ import instagramHelper from "../../assets/javascripts/helpers/instagram.js";
 import mapsHelper from "../../assets/javascripts/helpers/google-maps.js";
 import redditHelper from "../../assets/javascripts/helpers/reddit.js";
 import searchHelper from "../../assets/javascripts/helpers/google-search.js";
+import googleTranslateHelper from "../../assets/javascripts/helpers/google-translate.js";
 
 const nitterInstances = twitterHelper.redirects;
 const invidiousInstances = youtubeHelper.redirects;
@@ -14,6 +15,7 @@ const bibliogramInstances = instagramHelper.redirects;
 const osmInstances = mapsHelper.redirects;
 const redditInstances = redditHelper.redirects;
 const searchEngineInstances = searchHelper.redirects;
+const simplyTranslateInstances = googleTranslateHelper.redirects;
 const autocompletes = [
   { id: "nitter-instance", instances: nitterInstances },
   { id: "invidious-instance", instances: invidiousInstances },
@@ -24,6 +26,7 @@ const autocompletes = [
     id: "search-engine-instance",
     instances: searchEngineInstances.map((instance) => instance.link),
   },
+  { id: "simply-translate-instance", instances: simplyTranslateInstances },
 ];
 const domparser = new DOMParser();
 
@@ -33,12 +36,14 @@ let bibliogramInstance = document.getElementById("bibliogram-instance");
 let osmInstance = document.getElementById("osm-instance");
 let redditInstance = document.getElementById("reddit-instance");
 let searchEngineInstance = document.getElementById("search-engine-instance");
+let simplyTranslateInstance = document.getElementById("simply-translate-instance");
 let disableNitter = document.getElementById("disable-nitter");
 let disableInvidious = document.getElementById("disable-invidious");
 let disableBibliogram = document.getElementById("disable-bibliogram");
 let disableOsm = document.getElementById("disable-osm");
 let disableReddit = document.getElementById("disable-reddit");
 let disableSearchEngine = document.getElementById("disable-search-engine");
+let disableSimplyTranslate = document.getElementById("disable-simply-translate");
 let alwaysProxy = document.getElementById("always-proxy");
 let onlyEmbeddedVideo = document.getElementById("only-embed");
 let videoQuality = document.getElementById("video-quality");
@@ -90,12 +95,14 @@ browser.storage.sync.get(
     "osmInstance",
     "redditInstance",
     "searchEngineInstance",
+    "simplyTranslateInstance",
     "disableNitter",
     "disableInvidious",
     "disableBibliogram",
     "disableOsm",
     "disableReddit",
     "disableSearchEngine",
+    "disableSimplyTranslate",
     "alwaysProxy",
     "onlyEmbeddedVideo",
     "videoQuality",
@@ -123,12 +130,14 @@ browser.storage.sync.get(
     redditInstance.value = result.redditInstance || "";
     searchEngineInstance.value =
       (result.searchEngineInstance && result.searchEngineInstance.link) || "";
+    simplyTranslateInstance.value = result.simplyTranslateInstance || "";
     disableNitter.checked = !result.disableNitter;
     disableInvidious.checked = !result.disableInvidious;
     disableBibliogram.checked = !result.disableBibliogram;
     disableOsm.checked = !result.disableOsm;
     disableReddit.checked = !result.disableReddit;
     disableSearchEngine.checked = !result.disableSearchEngine;
+    disableSimplyTranslate.checked = !result.disableSimplyTranslate;
     alwaysProxy.checked = result.alwaysProxy;
     onlyEmbeddedVideo.checked = result.onlyEmbeddedVideo;
     videoQuality.value = result.videoQuality || "";
@@ -303,6 +312,15 @@ const searchEngineInstanceChange = debounce(() => {
 }, 500);
 searchEngineInstance.addEventListener("input", searchEngineInstanceChange);
 
+const simplyTranslateInstanceChange = debounce(() => {
+  if (simplyTranslateInstance.checkValidity()) {
+    browser.storage.sync.set({
+      simplyTranslateInstance: parseURL(simplyTranslateInstance.value),
+    });
+  }
+}, 500);
+simplyTranslateInstance.addEventListener("input", simplyTranslateInstanceChange);
+
 disableNitter.addEventListener("change", (event) => {
   browser.storage.sync.set({ disableNitter: !event.target.checked });
 });
@@ -327,6 +345,10 @@ disableSearchEngine.addEventListener("change", (event) => {
   browser.storage.sync.set({ disableSearchEngine: !event.target.checked });
 });
 
+disableSimplyTranslate.addEventListener("change", (event) => {
+  browser.storage.sync.set({ disableSimplyTranslate: !event.target.checked });
+});
+
 alwaysProxy.addEventListener("change", (event) => {
   browser.storage.sync.set({ alwaysProxy: event.target.checked });
 });
diff --git a/src/pages/popup/popup.html b/src/pages/popup/popup.html
index b34f0c8e..4514cafe 100644
--- a/src/pages/popup/popup.html
+++ b/src/pages/popup/popup.html
@@ -164,6 +164,32 @@
       </table>
     </section>
 
+    <section class="settings-block">
+      <table class="option" aria-label="Toggle SimplyTranslate redirects">
+        <tbody>
+          <tr>
+            <td>
+              <h1
+                data-localise="__MSG_disableSimplyTranslate__"
+                class="new-badge"
+                data-new-badge
+              >
+                SimplyTranslate Redirects
+              </h1>
+            </td>
+            <td>
+              <input
+                aria-hidden="true"
+                id="disable-simplyTranslate"
+                type="checkbox"
+              />&nbsp;
+              <label for="disable-simplyTranslate" class="checkbox-label"></label>
+            </td>
+          </tr>
+        </tbody>
+      </table>
+    </section>
+
     <section class="settings-block"></section>
 
     <footer>
diff --git a/src/pages/popup/popup.js b/src/pages/popup/popup.js
index 0afb2f97..bf90c47e 100644
--- a/src/pages/popup/popup.js
+++ b/src/pages/popup/popup.js
@@ -6,6 +6,7 @@ let disableBibliogram = document.querySelector("#disable-bibliogram");
 let disableOsm = document.querySelector("#disable-osm");
 let disableReddit = document.querySelector("#disable-reddit");
 let disableSearchEngine = document.querySelector("#disable-searchEngine");
+let disableSimplyTranslate = document.querySelector("#disable-simplyTranslate");
 let version = document.querySelector("#version");
 
 window.browser = window.browser || window.chrome;
@@ -18,6 +19,7 @@ browser.storage.sync.get(
     "disableOsm",
     "disableReddit",
     "disableSearchEngine",
+    "disableSimplyTranslate",
     "theme",
   ],
   (result) => {
@@ -28,6 +30,7 @@ browser.storage.sync.get(
     disableOsm.checked = !result.disableOsm;
     disableReddit.checked = !result.disableReddit;
     disableSearchEngine.checked = !result.disableSearchEngine;
+    disableSimplyTranslate.checked = !result.disableSimplyTranslate;
   }
 );
 
@@ -57,6 +60,10 @@ disableSearchEngine.addEventListener("change", (event) => {
   browser.storage.sync.set({ disableSearchEngine: !event.target.checked });
 });
 
+disableSimplyTranslate.addEventListener("change", (event) => {
+  browser.storage.sync.set({ disableSimplyTranslate: !event.target.checked });
+});
+
 document.querySelector("#more-options").addEventListener("click", () => {
   browser.runtime.openOptionsPage();
 });