├── .gitea └── issue_template │ ├── bug.md │ └── feature.md ├── .github ├── FUNDING.yml └── workflows │ ├── codeql-analysis.yml │ └── test.yml ├── .gitignore ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .vscode └── launch.json ├── LICENSE ├── Privacy-Policy.md ├── README.md ├── SECURITY.md ├── img ├── badge-amo.png ├── badge-chromium.png ├── chromium-badge.svg ├── libredirect-cover-photo.png ├── libredirect-cover-photo.svg ├── libredirect_full.svg └── weblate.svg ├── package.json ├── rollup.config.js ├── src ├── _locales │ ├── ar │ │ └── messages.json │ ├── bn │ │ └── messages.json │ ├── bs │ │ └── messages.json │ ├── cs │ │ └── messages.json │ ├── de │ │ └── messages.json │ ├── delete.py │ ├── en │ │ └── messages.json │ ├── eo │ │ └── messages.json │ ├── es │ │ └── messages.json │ ├── fa │ │ └── messages.json │ ├── fi │ │ └── messages.json │ ├── fil │ │ └── messages.json │ ├── filter.py │ ├── fr │ │ └── messages.json │ ├── gl │ │ └── messages.json │ ├── hi │ │ └── messages.json │ ├── hr │ │ └── messages.json │ ├── hu │ │ └── messages.json │ ├── id │ │ └── messages.json │ ├── it │ │ └── messages.json │ ├── ja │ │ └── messages.json │ ├── jv │ │ └── messages.json │ ├── ko │ │ └── messages.json │ ├── nb_NO │ │ └── messages.json │ ├── nl │ │ └── messages.json │ ├── pl │ │ └── messages.json │ ├── pt │ │ └── messages.json │ ├── pt_BR │ │ └── messages.json │ ├── ro │ │ └── messages.json │ ├── ru │ │ └── messages.json │ ├── sr │ │ └── messages.json │ ├── ta │ │ └── messages.json │ ├── tr │ │ └── messages.json │ ├── uk │ │ └── messages.json │ ├── vi │ │ └── messages.json │ ├── zh_Hans │ │ └── messages.json │ └── zh_Hant │ │ └── messages.json ├── assets │ ├── images │ │ ├── about-icon-light.svg │ │ ├── about-icon.svg │ │ ├── baiduTieba-icon.svg │ │ ├── bandcamp-icon.svg │ │ ├── bilibili-icon-light.svg │ │ ├── bilibili-icon.svg │ │ ├── bluesky-icon.svg │ │ ├── chatGpt-icon-light.svg │ │ ├── chatGpt-icon.svg │ │ ├── chefkoch-icon.svg │ │ ├── coub-icon.svg │ │ ├── deviantArt-icon.svg │ │ ├── fandom-icon.svg │ │ ├── geeksForGeeks-icon.svg │ │ ├── general-icon-light.svg │ │ ├── general-icon.svg │ │ ├── genius-icon.svg │ │ ├── github-icon-light.svg │ │ ├── github-icon.svg │ │ ├── gitlab-icon.svg │ │ ├── goodreads-icon-light.svg │ │ ├── goodreads-icon.svg │ │ ├── ifunny-icon.svg │ │ ├── imdb-icon.svg │ │ ├── imgur-icon.svg │ │ ├── instagram-icon.svg │ │ ├── instructables-icon.svg │ │ ├── knowyourmeme-icon.svg │ │ ├── libredirect-128.png │ │ ├── libredirect-16.png │ │ ├── libredirect-32.png │ │ ├── libredirect-48.png │ │ ├── libredirect-64.png │ │ ├── libredirect-96.png │ │ ├── libredirect.png │ │ ├── libredirect.svg │ │ ├── maps-icon-light.svg │ │ ├── maps-icon.svg │ │ ├── medium-icon.svg │ │ ├── meet-icon-light.svg │ │ ├── meet-icon.svg │ │ ├── mozhi-icon.svg │ │ ├── office-icon-light.svg │ │ ├── office-icon.svg │ │ ├── pastebin-icon-light.svg │ │ ├── pastebin-icon.svg │ │ ├── peertube-icon.svg │ │ ├── pinterest-icon.svg │ │ ├── pixiv-icon.svg │ │ ├── quora-icon.svg │ │ ├── reddit-icon.svg │ │ ├── reuters-icon.svg │ │ ├── search-icon-light.svg │ │ ├── search-icon.svg │ │ ├── sendFiles-icon-light.svg │ │ ├── sendFiles-icon.svg │ │ ├── snopes-icon.svg │ │ ├── soundcloud-icon.svg │ │ ├── stackOverflow-icon-light.svg │ │ ├── stackOverflow-icon.svg │ │ ├── tekstowo-icon.svg │ │ ├── tenor-icon.svg │ │ ├── textStorage-icon-light.svg │ │ ├── textStorage-icon.svg │ │ ├── threads-icon-light.svg │ │ ├── threads-icon.svg │ │ ├── tiktok-icon.svg │ │ ├── translate-icon-light.svg │ │ ├── translate-icon.svg │ │ ├── tumblr-icon.svg │ │ ├── twitch-icon.svg │ │ ├── twitter-icon.svg │ │ ├── ultimateGuitar-icon.svg │ │ ├── urbanDictionary-icon.svg │ │ ├── waybackMachine-icon-light.svg │ │ ├── waybackMachine-icon.svg │ │ ├── wikipedia-icon.svg │ │ ├── wolframAlpha-icon.svg │ │ ├── youtube-icon.svg │ │ └── youtubeMusic-icon.svg │ └── javascripts │ │ ├── services.js │ │ └── utils.js ├── config.json ├── manifest.json ├── pages │ ├── background │ │ ├── background.html │ │ └── background.js │ ├── components │ │ ├── Button.svelte │ │ ├── Checkbox.svelte │ │ ├── Input.svelte │ │ ├── Label.svelte │ │ ├── Row.svelte │ │ └── Select.svelte │ ├── fonts │ │ ├── Inter-VariableFont_slnt,wght.ttf │ │ ├── Vazirmatn-VariableFont_wght.ttf │ │ └── styles.css │ ├── icons │ │ ├── AboutIcon.svelte │ │ ├── AddIcon.svelte │ │ ├── AutoPickIcon.svelte │ │ ├── CloseIcon.svelte │ │ ├── CopyIcon.svelte │ │ ├── ExportIcon.svelte │ │ ├── GeneralIcon.svelte │ │ ├── ImportIcon.svelte │ │ ├── PingIcon.svelte │ │ ├── RedirectIcon.svelte │ │ ├── RedirectToOriginalIcon.svelte │ │ ├── ResetIcon.svelte │ │ ├── ServicesIcon.svelte │ │ ├── SettingsIcon.svelte │ │ └── SwitchInstanceIcon.svelte │ ├── messages │ │ └── index.html │ ├── messages_src │ │ ├── App.svelte │ │ ├── main.js │ │ └── stores.js │ ├── options │ │ └── index.html │ ├── options_src │ │ ├── App.svelte │ │ ├── General │ │ │ ├── Exceptions.svelte │ │ │ ├── General.svelte │ │ │ └── SettingsButtons.svelte │ │ ├── Services │ │ │ ├── FrontendIcon.svelte │ │ │ ├── Instances.svelte │ │ │ ├── RedirectType.svelte │ │ │ ├── ServiceIcon.svelte │ │ │ └── Services.svelte │ │ ├── Sidebar.svelte │ │ ├── main.js │ │ ├── stores.js │ │ └── url.js │ ├── popup │ │ └── index.html │ └── popup_src │ │ ├── App.svelte │ │ ├── Buttons.svelte │ │ ├── components │ │ ├── Row.svelte │ │ ├── ServiceIcon.svelte │ │ └── Switch.svelte │ │ ├── main.js │ │ └── stores.js └── updates │ └── updates.xml └── test-conditions.md /.gitea/issue_template/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Report a bug" 3 | about: "Is libredirect not behaving as expected? Report a bug so that it can be fixed as soon as possible." 4 | labels: 5 | - "Kind: Bug" 6 | --- 7 | 8 | ## What happened? 9 | 10 | ## What did you expect to happen? 11 | 12 | ## Steps to reproduce: 13 | 14 | 1. 15 | 2. 16 | 3. 17 | 18 | 19 | 20 | ## Debug information: 21 | 22 | Browser and version number: 23 | Libredirect version: 24 | 25 | ## Screenshots/Videos 26 | 27 | 28 | 29 |
30 | 31 | 32 | - [ ] I have checked on codeberg and github and can confirm this issue is not a duplicate. 33 | -------------------------------------------------------------------------------- /.gitea/issue_template/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Suggest a new feature" 3 | about: "Is there something missing that you want to see in libredirect? Suggest a feature so it will exist in a future release." 4 | labels: 5 | - "Kind: Feature" 6 | --- 7 | 8 | ## Describe your current issue/inconvenience 9 | 10 | ## Explain how this new feature will solve this 11 | 12 |
13 | 14 | 15 | - [ ] I have checked on codeberg and github and can confirm this issue is not a duplicate. 16 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: libredirect 2 | open_collective: libredirect 3 | patreon: libredirect 4 | liberapay: libredirect 5 | custom: https://www.buymeacoffee.com/libredirect 6 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [master] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [master] 20 | schedule: 21 | - cron: "43 18 * * 3" 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: ["javascript"] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v2 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v1 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 52 | 53 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 54 | # If this step fails, then you should remove it and run the build manually (see below) 55 | - name: Autobuild 56 | uses: github/codeql-action/autobuild@v1 57 | 58 | # ℹ️ Command-line programs to run using the OS shell. 59 | # 📚 https://git.io/JvXDl 60 | 61 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 62 | # and modify them (or add more) to build your code if your project 63 | # uses a compiled language 64 | 65 | #- run: | 66 | # make bootstrap 67 | # make release 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v1 71 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: test 2 | on: [push, pull_request] 3 | 4 | jobs: 5 | test: 6 | runs-on: ubuntu-latest 7 | 8 | steps: 9 | - uses: actions/checkout@v2 10 | - uses: actions/setup-node@v2 11 | - run: npm install 12 | - run: npm test 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | web-ext-artifacts/ 2 | .DS_Store 3 | nod 4 | node_modules 5 | package-lock.json 6 | .vscode 7 | pnpm-lock.yaml 8 | src/pages/options/build 9 | src/pages/popup/build 10 | src/pages/messages/build -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | ## require defined engine 2 | engine-strict=true 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | lts/* 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | src/_locales/ 2 | .github/ 3 | .gitea/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 120, 3 | "semi": false, 4 | "singleQuote": false, 5 | "trailingComma": "es5", 6 | "arrowParens": "avoid" 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "name": "Launch server.js via nodemon", 6 | "type": "node", 7 | "request": "run", 8 | "cwd": "${workspaceRoot}", 9 | "runtimeExecutable": "start", 10 | "runtimeArgs": [ 11 | "--debug=5858" 12 | ] 13 | } -------------------------------------------------------------------------------- /Privacy-Policy.md: -------------------------------------------------------------------------------- 1 | ## Data collected 2 | 3 | - Nothing 4 | - All url redirections work locally, except for OpenStreetMap reverse geocoding, done via the [OSM Nomantim API](https://nominatim.org/release-docs/develop/api/Overview/) 5 | - The Libredirect search engine icon displayed in Firefox at about:preferences#search and in the address bar is fetched from GitHub. 6 | - By default, the list of instances if fetched from GitHub. Alternatively, it may be fetched from Codeberg or not at all. 7 | 8 | ## Future Changes 9 | 10 | If we decide to change our privacy policy, we will post those changes here. 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | A browser extension that redirects YouTube, Twitter, TikTok... requests to alternative privacy friendly frontends and backends. 4 | 5 | 6 | 7 | 8 |   9 | 10 | 11 | 12 | 13 | ## Translate 14 | 15 | 16 | 17 | 18 | 19 | ## Development 20 | 21 | Install [Node.js](https://nodejs.org/) 22 | 23 | ```bash 24 | git clone https://github.com/libredirect/browser_extension 25 | cd browser_extension 26 | npm install 27 | npm run html # Generates html using Pug 28 | ``` 29 | 30 | #### Run on Firefox 31 | 32 | ```bash 33 | npm run start 34 | ``` 35 | 36 | #### Build a zip package for Firefox 37 | 38 | ```bash 39 | npm run build 40 | ``` 41 | 42 | #### Install the zip package on Firefox (temporarily) 43 | 44 | 1. Type in the address bar: `about:debugging#/runtime/this-firefox` 45 | 2. Press `Load Temporary Add-on...` 46 | 3. Select `libredirect-VERSION.zip` from `web-ext-artifacts` folder 47 | 48 | #### Install the zip package on Firefox ESR, Developer Edition, Nightly 49 | 50 | 1. Type in the address bar: `about:config` 51 | 2. Set `xpinstall.signatures.required` to `false` 52 | 3. Type in the address bar: `about:addons` 53 | 4. Click on the gear shaped `settings` button and select `Install Add-on From File...` 54 | 5. Select `libredirect-VERSION.zip` from `web-ext-artifacts` folder 55 | 56 | #### Run on Chromium 57 | 58 | 1. Open `chrome://extensions` 59 | 2. Enable `dev mode` 60 | 3. Select `load unpacked extension` 61 | 4. Select `src` folder 62 | 63 | --- 64 | 65 | Test conditions to check new functions and changes after building - [please refer here](./test-conditions.md) 66 | 67 | --- 68 | 69 | Forked from [Privacy Redirect](https://github.com/SimonBrazell/privacy-redirect) 70 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | We only support the latest versions and older versions are no longer supported by us. Support ends for the existing version as soon as a new release is done. 6 | 7 | ## Reporting a Vulnerability 8 | 9 | - The Version affected 10 | - The commit which knowingly or unknowingly brings the vulnerability 11 | - How to reproduce it - Either a detailed write up or Video as the reporter prefers but details are important. 12 | - Possible or full scale solutions that the reporter as come up with to fix them and shouldn't affect other functions for a long term. 13 | - The time you have taken to find the vulnerability 14 | 15 | - Depending the level of it, you can choose to make an immediate PR or being high, recommeneded to send them privately to us. 16 | 17 | We prefer this in the format of PDF, write in an editor of your choice. For referrencing files, please zip all the files. And reference mark them like on wikipedia for sources. 18 | 19 | If the vulnerability is too high, it is suggested to report it to us privately in the matrix network (preferred for faster response) directly to developers or mail to official contact email and ping the team members on Matrix channel. 20 | 21 | We will assess and after accepting your vulnerability report we will work on it and release the fix provided by you, if not, made by us. If it is declined, you will get a detailed report back from us on why. 22 | 23 | If vulnerability is high, and reported privately, we will tell about them in a later release publicly so that users are updated and secure by then. Even if incase we forget, we will disclose if another person what was this commit about or something. Even if not, then, We will disclose it in our annual vulnerability transparency report. 24 | 25 | No software is secure and could be hacked. We try the best to write good code with safety. It would be great if you help us. 26 | 27 | And there is bounty, If severity is too high, the team will consider awarding a amount from the donations it had received depending on your report. It's a community project, you do this as your wish. However, awarding the amount and how much amount is totally the decisions of the libredirect maintainers. So, don't get your hopes too high. We strive on community's donations that motivates us to better build the extension further. 28 | 29 | Thanks for reporting vulnerabilities if any, Happy Hunting ! 30 | -------------------------------------------------------------------------------- /img/badge-amo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/img/badge-amo.png -------------------------------------------------------------------------------- /img/badge-chromium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/img/badge-chromium.png -------------------------------------------------------------------------------- /img/libredirect-cover-photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/img/libredirect-cover-photo.png -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "libredirect", 3 | "type": "module", 4 | "description": "Redirects YouTube, Twitter, TikTok and more to privacy friendly frontends.", 5 | "engines": { 6 | "node": ">=18.20.4", 7 | "npm": ">=10.7.0" 8 | }, 9 | "scripts": { 10 | "start": "web-ext run", 11 | "firefox": "web-ext run --firefox=/home/manerakai/software/firefox/firefox", 12 | "start_ar": "web-ext run --firefox=/home/manerakai/software/firefox_ar/firefox", 13 | "android": "web-ext run -t firefox-android --adb-device emulator-5554 --firefox-apk org.mozilla.firefox --adb-remove-old-artifacts", 14 | "build": "web-ext build -i pages/options_src -i pages/popup_src pages/icons -i pages/popup_src -i pages/components", 15 | "build_chromium": "brave-browser --pack-extension=src/ --pack-extension-key=src.pem", 16 | "test": "web-ext lint", 17 | "html": "rollup -c --config-popup && rollup -c --config-options && rollup -c --config-messages" 18 | }, 19 | "repository": { 20 | "type": "git", 21 | "url": "git+https://github.com/libredirect/libredirect.git" 22 | }, 23 | "author": "LibRedirect", 24 | "license": "GPL-3.0-only", 25 | "bugs": { 26 | "url": "https://github.com/libredirect/libredirect/issues" 27 | }, 28 | "homepage": "https://libredirect.github.io", 29 | "devDependencies": { 30 | "prettier": "3.3.3" 31 | }, 32 | "webExt": { 33 | "sourceDir": "./src/", 34 | "run": { 35 | "browserConsole": true 36 | }, 37 | "build": { 38 | "overwriteDest": true 39 | } 40 | }, 41 | "dependencies": { 42 | "svelte-select": "^5.8.3", 43 | "pug-cli": "^1.0.0-alpha6", 44 | "rollup": "^3.15.0", 45 | "rollup-plugin-css-only": "^4.3.0", 46 | "rollup-plugin-svelte": "^7.1.2", 47 | "svelte": "^3.55.0", 48 | "web-ext": "^7.2.0", 49 | "@rollup/plugin-commonjs": "^24.0.0", 50 | "@rollup/plugin-node-resolve": "^15.0.0", 51 | "@rollup/plugin-terser": "^0.4.0" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from "rollup-plugin-svelte" 2 | import commonjs from "@rollup/plugin-commonjs" 3 | import terser from "@rollup/plugin-terser" 4 | import resolve from "@rollup/plugin-node-resolve" 5 | import css from "rollup-plugin-css-only" 6 | 7 | const production = !process.env.ROLLUP_WATCH 8 | let input 9 | let output 10 | if (process.argv.includes("--config-options")) { 11 | input = "src/pages/options_src/main.js" 12 | output = "src/pages/options/build/bundle.js" 13 | } else if (process.argv.includes("--config-popup")) { 14 | input = "src/pages/popup_src/main.js" 15 | output = "src/pages/popup/build/bundle.js" 16 | } 17 | else if (process.argv.includes("--config-messages")) { 18 | input = "src/pages/messages_src/main.js" 19 | output = "src/pages/messages/build/bundle.js" 20 | } 21 | 22 | export default { 23 | input, 24 | output: { 25 | sourcemap: true, 26 | format: "iife", 27 | name: "app", 28 | file: output, 29 | }, 30 | plugins: [ 31 | svelte({ 32 | compilerOptions: { 33 | dev: !production, 34 | }, 35 | }), 36 | css({ output: "bundle.css" }), 37 | resolve({ 38 | browser: true, 39 | dedupe: ["svelte"], 40 | exportConditions: ["svelte"], 41 | }), 42 | commonjs(), 43 | production && terser(), 44 | ], 45 | watch: { 46 | clearScreen: false, 47 | }, 48 | } 49 | -------------------------------------------------------------------------------- /src/_locales/delete.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | 4 | # langs = ['bs', 'cs', 'de', 'es', 'fr', 'gl', 'hr', 'id', 'it', 'ja', 'ko', 5 | # 'nb_NO', 'nl', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'sr', 'tr', 'uk', 'vi', 'zh_Hans'] 6 | en_json = {} 7 | 8 | with open('./en/messages.json') as data: 9 | en_json = json.load(data) 10 | 11 | keys = ['extensionName', 12 | 'extensionDescription', 13 | 'general', 14 | 'services', 15 | 'service', 16 | 'theme', 17 | 'auto', 18 | 'light', 19 | 'dark', 20 | 'excludeFromRedirecting', 21 | 'fetchPublicInstances', 22 | 'importSettings', 23 | 'exportSettings', 24 | 'exportSettingsToSync', 25 | 'importSettingsFromSync', 26 | 'resetSettings', 27 | 'enable', 28 | 'disable', 29 | 'showInPopup', 30 | 'frontend', 31 | 'redirectType', 32 | 'both', 33 | 'onlyEmbedded', 34 | 'onlyNotEmbedded', 35 | 'addYourFavoriteInstances', 36 | 'switchInstance', 37 | 'copyOriginal', 38 | 'copied', 39 | 'settings', 40 | 'about', 41 | 'redirectToOriginal', 42 | 'redirectLink', 43 | 'redirectOnlyInIncognito', 44 | 'bookmarksMenu', 45 | 'showInPopup', 46 | 'unsupportedIframesHandling', 47 | 'bypass', 48 | 'block', 49 | 'searchHint', 50 | 'excludeFromRedirecting', 51 | 'pingInstances', 52 | 'redirect', 53 | 'autoPickInstance', 54 | 'redirectGoogle', 55 | 'search_frontend', 56 | 'searchService', 57 | 'embedFrontend', 58 | ] 59 | 60 | tmp = {} 61 | 62 | for key in en_json: 63 | if key in keys: 64 | tmp[key] = en_json[key] 65 | 66 | en_json = tmp 67 | 68 | with open('en/messages.json', 'w') as outfile: 69 | outfile.write( 70 | json.dumps( 71 | en_json, 72 | ensure_ascii=False, 73 | indent=4 74 | ) 75 | ) 76 | -------------------------------------------------------------------------------- /src/_locales/eo/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "Switch Instance", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "Settings", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "General", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "Theme", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "Light", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "Dark", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "Auto", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "Excluded from redirecting", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "Import Settings", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "Export Settings", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "Reset Settings", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "Enable", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "Show in popup", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "Frontend", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "Redirect Type", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "both", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "only embedded", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "only not embedded", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "Add your favorite instances", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "Copy Original" 88 | }, 89 | "copied": { 90 | "message": "Copied" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "Redirect to original", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "Attempt to redirect", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "About" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "Unsupported embeds handling" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "Fetch public instances" 108 | }, 109 | "disable": { 110 | "message": "Disable" 111 | }, 112 | "pingInstances": { 113 | "message": "Ping Instances" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "Export Settings to Sync" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "Import Settings from Sync" 120 | }, 121 | "services": { 122 | "message": "Services" 123 | }, 124 | "service": { 125 | "message": "Service" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "Bookmarks menu" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "Redirect Only in Incognito" 132 | }, 133 | "bypass": { 134 | "message": "Bypass" 135 | }, 136 | "block": { 137 | "message": "Block" 138 | }, 139 | "searchHint": { 140 | "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." 141 | }, 142 | "redirect": { 143 | "message": "Redirect" 144 | } 145 | } -------------------------------------------------------------------------------- /src/_locales/fa/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "both": { 3 | "message": "هر دو" 4 | }, 5 | "exportSettings": { 6 | "message": "خروجی گرفتن از تنظیمات" 7 | }, 8 | "extensionName": { 9 | "message": "LibRedirect" 10 | }, 11 | "settings": { 12 | "message": "تنظیمات" 13 | }, 14 | "switchInstance": { 15 | "message": "جایگزینی نمونه" 16 | }, 17 | "general": { 18 | "message": "عمومی" 19 | }, 20 | "theme": { 21 | "message": "پوسته" 22 | }, 23 | "auto": { 24 | "message": "خودکار" 25 | }, 26 | "excludeFromRedirecting": { 27 | "message": "چشم‌پوشی از هدایت کردن" 28 | }, 29 | "importSettings": { 30 | "message": "واردکردن تنظیمات" 31 | }, 32 | "resetSettings": { 33 | "message": "بازنشانی تنظیمات" 34 | }, 35 | "enable": { 36 | "message": "فعال‌کردن" 37 | }, 38 | "frontend": { 39 | "message": "پیشگاه" 40 | }, 41 | "redirectType": { 42 | "message": "نوع هدایت" 43 | }, 44 | "onlyEmbedded": { 45 | "message": "تنها جاسازی شده" 46 | }, 47 | "onlyNotEmbedded": { 48 | "message": "تنها جاسازی نشده" 49 | }, 50 | "addYourFavoriteInstances": { 51 | "message": "افزودن نمونه‌های مورد پسند شما" 52 | }, 53 | "light": { 54 | "message": "روشن" 55 | }, 56 | "dark": { 57 | "message": "تیره" 58 | }, 59 | "showInPopup": { 60 | "message": "نمایش در بازشونده" 61 | }, 62 | "copyOriginal": { 63 | "message": "رونویسی اصلی" 64 | }, 65 | "copied": { 66 | "message": "رونویسی شد" 67 | }, 68 | "redirectToOriginal": { 69 | "message": "هدایت به اصلی" 70 | }, 71 | "about": { 72 | "message": "درباره" 73 | }, 74 | "unsupportedIframesHandling": { 75 | "message": "مدیریت جاسازی‌های پشتیبانی نشده" 76 | }, 77 | "disable": { 78 | "message": "غیر‌فعال کردن" 79 | }, 80 | "pingInstances": { 81 | "message": "پینگ گرفتن از نمونه‌ها" 82 | }, 83 | "exportSettingsToSync": { 84 | "message": "خروجی گرفتن از تنظیمات برای همگام‌سازی" 85 | }, 86 | "importSettingsFromSync": { 87 | "message": "واردکردن تنظیمات برای همگام‌سازی" 88 | }, 89 | "services": { 90 | "message": "سامانه‌ها" 91 | }, 92 | "service": { 93 | "message": "سامانه" 94 | }, 95 | "redirectOnlyInIncognito": { 96 | "message": "تنها هدایت کردن در حالت خصوصی" 97 | }, 98 | "bypass": { 99 | "message": "دور زدن" 100 | }, 101 | "block": { 102 | "message": "مسدود کردن" 103 | }, 104 | "redirect": { 105 | "message": "هدایت کردن" 106 | }, 107 | "autoPickInstance": { 108 | "message": "گزینش خودکار نمونه" 109 | }, 110 | "redirectGoogle": { 111 | "message": "هدایت کردن گوگل" 112 | }, 113 | "search_frontend": { 114 | "message": "جستجو پیشگاه" 115 | }, 116 | "searchService": { 117 | "message": "جستجو سامانه" 118 | }, 119 | "embedFrontend": { 120 | "message": "پیشگاه جاسازی‌شده" 121 | }, 122 | "extensionDescription": { 123 | "message": "یک افزونه مرورگر که وبگاه های محبوب را به نمونه‌های دوست‌دار حریم خصوصی هدایت میکند" 124 | }, 125 | "bookmarksMenu": { 126 | "message": "فهرست نشان شده‌ها" 127 | }, 128 | "redirectLink": { 129 | "message": "تلاش برای هدایت" 130 | }, 131 | "fetchPublicInstances": { 132 | "message": "دریافت نمونه‌های عمومی" 133 | }, 134 | "searchHint": { 135 | "message": "LIBREDIRECT را به عنوان موتور جستجوی پیش‌فرض تنظیم کنید. برای نحوه انجام در مرورگرهای کروم ، روی اینجا ضربه بزنید." 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /src/_locales/fil/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "resetSettings": { 3 | "message": "I-reset ang mga setting" 4 | }, 5 | "fetchPublicInstances": { 6 | "message": "Kunin ang mga publikong instansya" 7 | }, 8 | "searchHint": { 9 | "message": "Itakda ang LibRedirect bilang Default na Search Engine. Para sa kung paano gawin sa mga Chromium browser, mag-click dito." 10 | }, 11 | "unsupportedIframesHandling": { 12 | "message": "Pag-handle sa mga hindi sinusuportahang embed" 13 | }, 14 | "extensionDescription": { 15 | "message": "Isang web extension na nagre-redirect ng mga popular na site sa mga alternatibong privacy-friendly na frontend at backend" 16 | }, 17 | "service": { 18 | "message": "Serbisyo" 19 | }, 20 | "extensionName": { 21 | "message": "LibRedirect" 22 | }, 23 | "light": { 24 | "message": "Maliwanag" 25 | }, 26 | "switchInstance": { 27 | "message": "Palitan ang Instansya" 28 | }, 29 | "settings": { 30 | "message": "Mga Setting" 31 | }, 32 | "general": { 33 | "message": "General" 34 | }, 35 | "theme": { 36 | "message": "Tema" 37 | }, 38 | "dark": { 39 | "message": "Madilim" 40 | }, 41 | "auto": { 42 | "message": "Awto" 43 | }, 44 | "excludeFromRedirecting": { 45 | "message": "Hindi kasama mula sa pag-redirect" 46 | }, 47 | "importSettings": { 48 | "message": "I-import ang mga setting" 49 | }, 50 | "exportSettings": { 51 | "message": "I-export ang mga setting" 52 | }, 53 | "enable": { 54 | "message": "I-enable" 55 | }, 56 | "frontend": { 57 | "message": "Frontend" 58 | }, 59 | "redirectType": { 60 | "message": "Uri ng Redirect" 61 | }, 62 | "both": { 63 | "message": "pareho" 64 | }, 65 | "onlyEmbedded": { 66 | "message": "embedded lamang" 67 | }, 68 | "onlyNotEmbedded": { 69 | "message": "mga hindi embedded lamang" 70 | }, 71 | "addYourFavoriteInstances": { 72 | "message": "Idagdag ang iyong mga paboritong instansya" 73 | }, 74 | "copyOriginal": { 75 | "message": "Kopyahin ang Orihinal" 76 | }, 77 | "copied": { 78 | "message": "Kinopya" 79 | }, 80 | "redirectToOriginal": { 81 | "message": "Mag-redirect sa orihinal" 82 | }, 83 | "about": { 84 | "message": "Tungkol sa" 85 | }, 86 | "disable": { 87 | "message": "I-disable" 88 | }, 89 | "pingInstances": { 90 | "message": "I-ping ang Mga Instansya" 91 | }, 92 | "exportSettingsToSync": { 93 | "message": "I-export ang Mga Setting para Mag-sync" 94 | }, 95 | "importSettingsFromSync": { 96 | "message": "I-import ang Mga Setting mula sa Sync" 97 | }, 98 | "services": { 99 | "message": "Mga Serbisyo" 100 | }, 101 | "bookmarksMenu": { 102 | "message": "Menu ng mga bookmark" 103 | }, 104 | "redirectOnlyInIncognito": { 105 | "message": "Mag-redirect lamang sa Incognito" 106 | }, 107 | "bypass": { 108 | "message": "I-bypass" 109 | }, 110 | "block": { 111 | "message": "I-block" 112 | }, 113 | "redirect": { 114 | "message": "I-redirect" 115 | }, 116 | "autoPickInstance": { 117 | "message": "Awtomatikong piliin ang Instansya" 118 | }, 119 | "redirectGoogle": { 120 | "message": "I-redirect ang Google" 121 | }, 122 | "search_frontend": { 123 | "message": "Frontend ng Paghahanap" 124 | }, 125 | "searchService": { 126 | "message": "Serbisyo ng Paghahanap" 127 | }, 128 | "embedFrontend": { 129 | "message": "Frontend ng Embed" 130 | }, 131 | "showInPopup": { 132 | "message": "Ipakita sa popup" 133 | }, 134 | "redirectLink": { 135 | "message": "Subukang mag-redirect" 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /src/_locales/filter.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | 4 | langs = [ 5 | 'ar', 6 | 'bn', 7 | 'bs', 8 | 'cs', 9 | 'de', 10 | 'eo', 11 | 'es', 12 | 'fi', 13 | 'fr', 14 | 'gl', 15 | 'hi', 16 | 'hr', 17 | 'id', 18 | 'it', 19 | 'ja', 20 | 'jv', 21 | 'ko', 22 | 'nb_NO', 23 | 'nl', 24 | 'pl', 25 | 'pt', 26 | 'pt_BR', 27 | 'ro', 28 | 'ru', 29 | 'sr', 30 | 'tr', 31 | 'uk', 32 | 'vi', 33 | 'zh_Hans', 34 | 'zh_Hant', 35 | ] 36 | en_json = {} 37 | 38 | with open('src/_locales/en/messages.json') as data: 39 | en_json = json.load(data) 40 | 41 | 42 | 43 | for lang in langs: 44 | lang_json = {} 45 | with open('src/_locales/'+lang+'/messages.json') as data: 46 | lang_json = json.load(data) 47 | lang_json_new = {} 48 | for key in en_json: 49 | if key in lang_json: 50 | lang_json_new[key] = lang_json[key] 51 | else: 52 | lang_json_new[key] = en_json[key] 53 | with open('src/_locales/'+lang+'/messages.json', 'w') as outfile: 54 | outfile.write( 55 | json.dumps( 56 | lang_json_new, 57 | ensure_ascii=False, 58 | indent=4 59 | ) 60 | ) 61 | -------------------------------------------------------------------------------- /src/_locales/hi/messages.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /src/_locales/hu/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "message": "Beállítások" 4 | }, 5 | "extensionDescription": { 6 | "message": "Egy webes kiterjesztés, amely népszerű webhelyeket irányít át alternatív, adatvédelemet tiszteletben tartó elő- és háttérprogramokra" 7 | }, 8 | "general": { 9 | "message": "Általános" 10 | }, 11 | "theme": { 12 | "message": "Téma" 13 | }, 14 | "light": { 15 | "message": "Világos" 16 | }, 17 | "exportSettings": { 18 | "message": "Beállítások exportálása" 19 | }, 20 | "both": { 21 | "message": "mindkettő" 22 | }, 23 | "dark": { 24 | "message": "Sötét" 25 | }, 26 | "auto": { 27 | "message": "Automatikus" 28 | }, 29 | "excludeFromRedirecting": { 30 | "message": "Átirányításból kizárt" 31 | }, 32 | "importSettings": { 33 | "message": "Beállítások importálása" 34 | }, 35 | "resetSettings": { 36 | "message": "Beállítások visszaállítása" 37 | }, 38 | "onlyEmbedded": { 39 | "message": "csak beágyazott" 40 | }, 41 | "enable": { 42 | "message": "Engedélyezés" 43 | }, 44 | "showInPopup": { 45 | "message": "Megjelenítés felugró ablakban" 46 | }, 47 | "onlyNotEmbedded": { 48 | "message": "csak nem beágyazott" 49 | }, 50 | "copied": { 51 | "message": "Másolva" 52 | }, 53 | "redirectLink": { 54 | "message": "Kísérlet az átirányításra" 55 | }, 56 | "fetchPublicInstances": { 57 | "message": "Nyilvános példányok lekérése" 58 | }, 59 | "addYourFavoriteInstances": { 60 | "message": "Adja hozzá kedvenc példányait" 61 | }, 62 | "copyOriginal": { 63 | "message": "Eredeti másolása" 64 | }, 65 | "redirectToOriginal": { 66 | "message": "Átirányítás az eredetire" 67 | }, 68 | "about": { 69 | "message": "Névjegy" 70 | }, 71 | "unsupportedIframesHandling": { 72 | "message": "Nem támogatott beágyazások kezelése" 73 | }, 74 | "disable": { 75 | "message": "Tiltás" 76 | }, 77 | "services": { 78 | "message": "Szolgáltatások" 79 | }, 80 | "pingInstances": { 81 | "message": "Példányok pingelése" 82 | }, 83 | "exportSettingsToSync": { 84 | "message": "Beállítások exportálása a szinkronizáláshoz" 85 | }, 86 | "importSettingsFromSync": { 87 | "message": "Beállítások importálása a szinkronizációból" 88 | }, 89 | "service": { 90 | "message": "Szolgáltatás" 91 | }, 92 | "bookmarksMenu": { 93 | "message": "Könyvjelzők menü" 94 | }, 95 | "block": { 96 | "message": "Letiltás" 97 | }, 98 | "redirectOnlyInIncognito": { 99 | "message": "Átirányítás csak inkognitóban" 100 | }, 101 | "redirect": { 102 | "message": "Átirányítás" 103 | }, 104 | "switchInstance": { 105 | "message": "Példány váltása" 106 | }, 107 | "frontend": { 108 | "message": "Előtétprogram" 109 | }, 110 | "redirectType": { 111 | "message": "Átirányítás típusa" 112 | }, 113 | "autoPickInstance": { 114 | "message": "Példány automatikus kiválasztása" 115 | }, 116 | "redirectGoogle": { 117 | "message": "Google átirányítása" 118 | }, 119 | "search_frontend": { 120 | "message": "Előtétprogram keresése" 121 | }, 122 | "extensionName": { 123 | "message": "LibRedirect" 124 | }, 125 | "bypass": { 126 | "message": "Megkerülés" 127 | }, 128 | "searchHint": { 129 | "message": "LibRedirect beállítása alapértelmezett keresőmotornak. A Chromium böngészőkben történő művelethez kattintson ide." 130 | }, 131 | "searchService": { 132 | "message": "Szolgáltatás keresése" 133 | }, 134 | "embedFrontend": { 135 | "message": "Beágyazott előtétprogram" 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /src/_locales/ja/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "人気サイトを個人情報に配慮した代替のフロントエンド/バックエンドに転送するウェブ拡張機能", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "インスタンスを変更", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "設定", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "一般", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "テーマ", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "ライト", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "ダーク", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "自動", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "転送から除外", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "設定のインポート", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "設定のエクスポート", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "設定を初期化", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "有効化", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "ポップアップ内に表示", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "フロントエンド", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "転送の種類", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "両方", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "埋め込み型のみ", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "非埋め込み型のみ", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "独自のインスタンスを追加", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "元のサービスのURIをコピー" 88 | }, 89 | "copied": { 90 | "message": "コピーしました" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "元のサービスに転送", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "転送する", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "公式サイト" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "未対応の埋め込み動画の処理" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "公開インスタンスの一覧を取得" 108 | }, 109 | "disable": { 110 | "message": "無効" 111 | }, 112 | "pingInstances": { 113 | "message": "インスタンスの応答時間を確認" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "設定を同期にエクスポート" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "設定を同期からインポート" 120 | }, 121 | "services": { 122 | "message": "サービス" 123 | }, 124 | "service": { 125 | "message": "サービス" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "ブークマークのメニューに追加" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "シークレットモードでのみ転送" 132 | }, 133 | "bypass": { 134 | "message": "転送なし" 135 | }, 136 | "block": { 137 | "message": "表示しない" 138 | }, 139 | "searchHint": { 140 | "message": "LibRedirect を標準の検索エンジンに設定します。chromium ブラウザーでのやり方は、こちらをクリック。" 141 | }, 142 | "redirect": { 143 | "message": "転送する" 144 | }, 145 | "search_frontend": { 146 | "message": "検索フロントエンド" 147 | }, 148 | "embedFrontend": { 149 | "message": "埋め込みフロントエンド" 150 | }, 151 | "redirectGoogle": { 152 | "message": "Googleを転送する" 153 | }, 154 | "autoPickInstance": { 155 | "message": "インスタンスを自動で取得" 156 | }, 157 | "searchService": { 158 | "message": "検索サービス" 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /src/_locales/jv/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "Switch Instance", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "Settings", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "General", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "Téma", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "Terang", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "Peteng", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "Auto", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "Excluded from redirecting", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "Import Settings", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "Export Settings", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "Reset Settings", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "Enable", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "Show in popup", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "Frontend", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "Redirect Type", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "both", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "only embedded", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "only not embedded", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "Add your favorite instances", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "Copy Original" 88 | }, 89 | "copied": { 90 | "message": "Copied" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "Redirect to original", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "Attempt to redirect", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "About" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "Unsupported embeds handling" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "Fetch public instances" 108 | }, 109 | "disable": { 110 | "message": "Disable" 111 | }, 112 | "pingInstances": { 113 | "message": "Ping Instances" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "Export Settings to Sync" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "Import Settings from Sync" 120 | }, 121 | "services": { 122 | "message": "Services" 123 | }, 124 | "service": { 125 | "message": "Service" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "Bookmarks menu" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "Redirect Only in Incognito" 132 | }, 133 | "bypass": { 134 | "message": "Bypass" 135 | }, 136 | "block": { 137 | "message": "Block" 138 | }, 139 | "searchHint": { 140 | "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." 141 | }, 142 | "redirect": { 143 | "message": "Redirect" 144 | } 145 | } -------------------------------------------------------------------------------- /src/_locales/ko/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "A web extension that redirects popular sites to alternative privacy-friendly frontends and backends", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "인스턴스 바꾸기", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "설정", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "일반", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "테마", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "밝음", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "어두움", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "Auto", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "Excluded from redirecting", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "설정 불러오기", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "설정 내보내기", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "설정 초기화", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "활성화", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "Show in popup", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "프론트엔드", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "리다이렉트 종류", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "둘 다", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "임베디드 된 것만", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "임베디드 안된 것만", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "Add your favorite instances", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "Copy Original" 88 | }, 89 | "copied": { 90 | "message": "복사됨" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "Redirect to original", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "Attempt to redirect this hyperlink", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "About" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "Unsupported iframes handling" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "Fetch public instances" 108 | }, 109 | "disable": { 110 | "message": "Disable" 111 | }, 112 | "pingInstances": { 113 | "message": "Ping Instances" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "Export Settings to Sync" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "Import Settings from Sync" 120 | }, 121 | "services": { 122 | "message": "Services" 123 | }, 124 | "service": { 125 | "message": "Service" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "Bookmarks menu" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "Redirect Only in Incognito" 132 | }, 133 | "bypass": { 134 | "message": "Bypass" 135 | }, 136 | "block": { 137 | "message": "Block" 138 | }, 139 | "searchHint": { 140 | "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." 141 | }, 142 | "redirect": { 143 | "message": "Redirect" 144 | } 145 | } -------------------------------------------------------------------------------- /src/_locales/nb_NO/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "En vev-utvidelse som videresender populære sider til alternative personvernsrespekterende grenseflater og bakender", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "Bytt instans", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "Innstillinger", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "Generelt", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "Drakt", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "Lys", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "Mørk", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "Auto", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "Excluded from redirecting", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "Importer innstillinger", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "Eksporter innstillinger", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "Tilbakestill innstillinger", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "Skru på", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "Show in popup", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "Grenseflate", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "Videresendingstype", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "begge", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "kun innebygde", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "kun ikke-innebygde", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "Add your favorite instances", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "Copy Original" 88 | }, 89 | "copied": { 90 | "message": "Kopiert" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "Redirect to original", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "Attempt to redirect this hyperlink", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "About" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "Unsupported iframes handling" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "Fetch public instances" 108 | }, 109 | "disable": { 110 | "message": "Disable" 111 | }, 112 | "pingInstances": { 113 | "message": "Ping Instances" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "Export Settings to Sync" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "Import Settings from Sync" 120 | }, 121 | "services": { 122 | "message": "Services" 123 | }, 124 | "service": { 125 | "message": "Service" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "Bookmarks menu" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "Redirect Only in Incognito" 132 | }, 133 | "bypass": { 134 | "message": "Bypass" 135 | }, 136 | "block": { 137 | "message": "Block" 138 | }, 139 | "searchHint": { 140 | "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." 141 | }, 142 | "redirect": { 143 | "message": "Redirect" 144 | } 145 | } -------------------------------------------------------------------------------- /src/_locales/ta/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "லிப்ரெடிரிடர்" 4 | }, 5 | "switchInstance": { 6 | "message": "சான்று" 7 | }, 8 | "copyOriginal": { 9 | "message": "அசல் நகலெடுக்கவும்" 10 | }, 11 | "autoPickInstance": { 12 | "message": "ஆட்டோ-பிக் நிகழ்வு" 13 | }, 14 | "extensionDescription": { 15 | "message": "பிரபலமான தளங்களை மாற்று தனியுரிமை நட்பு முன்பக்கங்கள் மற்றும் பின்தளத்தில் திருப்பி விடும் ஒரு வலை நீட்டிப்பு" 16 | }, 17 | "settings": { 18 | "message": "அமைப்புகள்" 19 | }, 20 | "general": { 21 | "message": "பொது" 22 | }, 23 | "theme": { 24 | "message": "கருப்பொருள்" 25 | }, 26 | "light": { 27 | "message": "ஒளி" 28 | }, 29 | "dark": { 30 | "message": "இருண்ட" 31 | }, 32 | "auto": { 33 | "message": "தானி" 34 | }, 35 | "excludeFromRedirecting": { 36 | "message": "திருப்பிவிடுவதிலிருந்து விலக்கப்பட்டது" 37 | }, 38 | "importSettings": { 39 | "message": "அமைப்புகளை இறக்குமதி செய்யுங்கள்" 40 | }, 41 | "exportSettings": { 42 | "message": "ஏற்றுமதி அமைப்புகள்" 43 | }, 44 | "resetSettings": { 45 | "message": "அமைப்புகளை மீட்டமைக்கவும்" 46 | }, 47 | "enable": { 48 | "message": "இயக்கு" 49 | }, 50 | "showInPopup": { 51 | "message": "பாப்அப்பில் காட்டு" 52 | }, 53 | "frontend": { 54 | "message": "ஃபிரான்ட்" 55 | }, 56 | "redirectType": { 57 | "message": "திருப்பி வகை" 58 | }, 59 | "both": { 60 | "message": "இரண்டும்" 61 | }, 62 | "onlyEmbedded": { 63 | "message": "உட்பொதிக்கப்பட்டது" 64 | }, 65 | "onlyNotEmbedded": { 66 | "message": "உட்பொதிக்கப்படவில்லை" 67 | }, 68 | "addYourFavoriteInstances": { 69 | "message": "உங்களுக்கு பிடித்த நிகழ்வுகளைச் சேர்க்கவும்" 70 | }, 71 | "copied": { 72 | "message": "நகலெடுக்கப்பட்டது" 73 | }, 74 | "redirectToOriginal": { 75 | "message": "அசலுக்கு திருப்பி விடுங்கள்" 76 | }, 77 | "redirectLink": { 78 | "message": "திருப்பிவிட முயற்சி" 79 | }, 80 | "about": { 81 | "message": "பற்றி" 82 | }, 83 | "unsupportedIframesHandling": { 84 | "message": "ஆதரிக்கப்படாத உட்பொதிகள் கையாளுதல்" 85 | }, 86 | "fetchPublicInstances": { 87 | "message": "பொது நிகழ்வுகளைப் பெறுங்கள்" 88 | }, 89 | "disable": { 90 | "message": "முடக்கு" 91 | }, 92 | "pingInstances": { 93 | "message": "பிங் நிகழ்வுகள்" 94 | }, 95 | "exportSettingsToSync": { 96 | "message": "ஒத்திசைக்க அமைப்புகளை ஏற்றுமதி செய்யுங்கள்" 97 | }, 98 | "importSettingsFromSync": { 99 | "message": "ஒத்திசைவிலிருந்து அமைப்புகளை இறக்குமதி செய்யுங்கள்" 100 | }, 101 | "services": { 102 | "message": "சேவைகள்" 103 | }, 104 | "service": { 105 | "message": "பணி" 106 | }, 107 | "bookmarksMenu": { 108 | "message": "புக்மார்க்ச் பட்டியல்" 109 | }, 110 | "redirectOnlyInIncognito": { 111 | "message": "மறைமுகத்தில் மட்டுமே திருப்பி விடுங்கள்" 112 | }, 113 | "bypass": { 114 | "message": "பைபாச்" 115 | }, 116 | "block": { 117 | "message": "தொகுதி" 118 | }, 119 | "searchHint": { 120 | "message": "இயல்புநிலை தேடுபொறியாக Lirbredirect ஐ அமைக்கவும். குரோமியம் உலாவிகளில் எவ்வாறு செய்வது என்பதற்கு, இங்கே ." 121 | }, 122 | "redirect": { 123 | "message": "திருப்பி விடுங்கள்" 124 | }, 125 | "redirectGoogle": { 126 | "message": "Google ஐ திருப்பி விடுங்கள்" 127 | }, 128 | "search_frontend": { 129 | "message": "முன்பக்கத்தைத் தேடுங்கள்" 130 | }, 131 | "searchService": { 132 | "message": "தேடல் பணி" 133 | }, 134 | "embedFrontend": { 135 | "message": "ஃபிரான்டெண்ட் உட்பொதிக்கவும்" 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /src/_locales/vi/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "Một tiện ích mở rộng chuyển hướng một số trang web phổ biến đến các frontend và backend khác thân thiện với quyền riêng tư", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "Đổi Instance", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "Cài Đặt", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "Cài đặt chung", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "Giao diện", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "Sáng", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "Tối", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "Tự động", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "Không được chuyển hướng", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "Nhập vào cài đặt", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "Xuất ra cài đặt", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "Đặt lại cài đặt", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "Bật", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "Hiển thị trong cửa sổ bật lên", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "Frontend", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "Loại chuyển hướng", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "cả hai", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "chỉ các mã nhúng", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "chỉ những cái không phải là mã nhúng", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "Thêm những instance bạn yêu thích", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "Copy Original" 88 | }, 89 | "copied": { 90 | "message": "Đã Sao Chép" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "Chuyển hướng tới trang web gốc", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "Chuyển hướng liên kết này", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "Về tiện ích" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "Cách xử lý các iframe không được hỗ trợ" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "Tìm các instance công cộng" 108 | }, 109 | "disable": { 110 | "message": "Tắt" 111 | }, 112 | "pingInstances": { 113 | "message": "Ping Instances" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "Export Settings to Sync" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "Import Settings from Sync" 120 | }, 121 | "services": { 122 | "message": "Services" 123 | }, 124 | "service": { 125 | "message": "Service" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "Bookmarks menu" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "Redirect Only in Incognito" 132 | }, 133 | "bypass": { 134 | "message": "Bypass" 135 | }, 136 | "block": { 137 | "message": "Block" 138 | }, 139 | "searchHint": { 140 | "message": "Set LibRedirect as Default Search Engine. For how to do in chromium browsers, click here." 141 | }, 142 | "redirect": { 143 | "message": "Redirect" 144 | } 145 | } 146 | -------------------------------------------------------------------------------- /src/_locales/zh_Hans/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "将常用网站按需重定向到隐私友好的替代前端/后端的 Web 扩展程序", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "切换实例", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "设置", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "通用", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "主题", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "浅色", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "深色", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "自动", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "排除于重定向", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "导入设置", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "导出设置", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "重置设置", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "启用", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "显示在弹窗中", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "前端", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "重定向类型", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "所有页面", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "仅嵌入页面", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "仅常规页面", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "添加您喜欢的实例", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "复制原始链接" 88 | }, 89 | "copied": { 90 | "message": "已复制" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "重定向至原网址", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "尝试进行重定向", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "关于" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "处理未支持的嵌入页面的方式" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "获取公共实例" 108 | }, 109 | "disable": { 110 | "message": "禁用" 111 | }, 112 | "pingInstances": { 113 | "message": "对实例进行测速" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "导出设置到同步服务" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "从同步服务导入设置" 120 | }, 121 | "services": { 122 | "message": "服务" 123 | }, 124 | "service": { 125 | "message": "服务" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "书签菜单" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "仅在隐私模式下重定向" 132 | }, 133 | "bypass": { 134 | "message": "绕过" 135 | }, 136 | "block": { 137 | "message": "屏蔽" 138 | }, 139 | "searchHint": { 140 | "message": "请将 LibRedirect 设为默认搜索引擎。对于 Chromium 的操作方法,点击此处了解。" 141 | }, 142 | "redirect": { 143 | "message": "重定向" 144 | }, 145 | "embedFrontend": { 146 | "message": "嵌入页面前端" 147 | }, 148 | "autoPickInstance": { 149 | "message": "自动挑选实例" 150 | }, 151 | "redirectGoogle": { 152 | "message": "重定向 Google" 153 | }, 154 | "search_frontend": { 155 | "message": "搜索前端" 156 | }, 157 | "searchService": { 158 | "message": "搜索服务" 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /src/_locales/zh_Hant/messages.json: -------------------------------------------------------------------------------- 1 | { 2 | "extensionName": { 3 | "message": "LibRedirect", 4 | "description": "name of the extension" 5 | }, 6 | "extensionDescription": { 7 | "message": "一個網路擴充功能可以將熱門網站重新導向至隱私友好的替代服務", 8 | "description": "description of the extension" 9 | }, 10 | "switchInstance": { 11 | "message": "切換實例", 12 | "description": "used in manifest.json as shortcut description" 13 | }, 14 | "settings": { 15 | "message": "設定", 16 | "description": "used in the popup" 17 | }, 18 | "general": { 19 | "message": "一般", 20 | "description": "used in the settings page" 21 | }, 22 | "theme": { 23 | "message": "主題", 24 | "description": "used in the settings page" 25 | }, 26 | "light": { 27 | "message": "淺色", 28 | "description": "used in the settings page" 29 | }, 30 | "dark": { 31 | "message": "深色", 32 | "description": "used in the settings page" 33 | }, 34 | "auto": { 35 | "message": "自動", 36 | "description": "used in the settings page" 37 | }, 38 | "excludeFromRedirecting": { 39 | "message": "排除重新導向", 40 | "description": "used in the settings page" 41 | }, 42 | "importSettings": { 43 | "message": "匯入設定", 44 | "description": "used in the settings page" 45 | }, 46 | "exportSettings": { 47 | "message": "匯出設定", 48 | "description": "used in the settings page" 49 | }, 50 | "resetSettings": { 51 | "message": "重設設定", 52 | "description": "used in the settings page" 53 | }, 54 | "enable": { 55 | "message": "啟用", 56 | "description": "used in the settings page" 57 | }, 58 | "showInPopup": { 59 | "message": "在快顯視窗顯示", 60 | "description": "used in the settings page" 61 | }, 62 | "frontend": { 63 | "message": "前端", 64 | "description": "used in the settings page" 65 | }, 66 | "redirectType": { 67 | "message": "重新導向類型", 68 | "description": "used in the settings page" 69 | }, 70 | "both": { 71 | "message": "兩者", 72 | "description": "used in the settings page" 73 | }, 74 | "onlyEmbedded": { 75 | "message": "僅已內嵌", 76 | "description": "used in the settings page" 77 | }, 78 | "onlyNotEmbedded": { 79 | "message": "僅非已內嵌", 80 | "description": "used in the settings page" 81 | }, 82 | "addYourFavoriteInstances": { 83 | "message": "新增你喜歡的實例", 84 | "description": "used in the settings page" 85 | }, 86 | "copyOriginal": { 87 | "message": "複製原始的" 88 | }, 89 | "copied": { 90 | "message": "已複製" 91 | }, 92 | "redirectToOriginal": { 93 | "message": "重新導向至原始網址", 94 | "description": "Used in context menus when right clicking on a page/tab" 95 | }, 96 | "redirectLink": { 97 | "message": "嘗試重新導向", 98 | "description": "Used in context menus when right clicking on a hyperlink" 99 | }, 100 | "about": { 101 | "message": "關於" 102 | }, 103 | "unsupportedIframesHandling": { 104 | "message": "不支援的嵌入處理" 105 | }, 106 | "fetchPublicInstances": { 107 | "message": "取得公共實例" 108 | }, 109 | "disable": { 110 | "message": "停用" 111 | }, 112 | "pingInstances": { 113 | "message": "Ping 實例" 114 | }, 115 | "exportSettingsToSync": { 116 | "message": "匯出設定以同步" 117 | }, 118 | "importSettingsFromSync": { 119 | "message": "從同步匯入設定" 120 | }, 121 | "services": { 122 | "message": "服務" 123 | }, 124 | "service": { 125 | "message": "服務" 126 | }, 127 | "bookmarksMenu": { 128 | "message": "書籤選單" 129 | }, 130 | "redirectOnlyInIncognito": { 131 | "message": "僅在隱身模式下重新導向" 132 | }, 133 | "bypass": { 134 | "message": "繞行" 135 | }, 136 | "block": { 137 | "message": "封鎖" 138 | }, 139 | "searchHint": { 140 | "message": "設定 LibRedirect 為預設搜尋引擎。如要了解如何在 Chromium 瀏覽器中執行操作,請點擊此處。" 141 | }, 142 | "redirect": { 143 | "message": "重新導向" 144 | }, 145 | "autoPickInstance": { 146 | "message": "自動選擇實例" 147 | }, 148 | "embedFrontend": { 149 | "message": "嵌入前端" 150 | }, 151 | "redirectGoogle": { 152 | "message": "重新導向 Google" 153 | }, 154 | "search_frontend": { 155 | "message": "搜尋前端" 156 | }, 157 | "searchService": { 158 | "message": "搜尋服務" 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /src/assets/images/about-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/about-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/baiduTieba-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 23 | 45 | 46 | 47 | 51 | 56 | 61 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | -------------------------------------------------------------------------------- /src/assets/images/bandcamp-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/bilibili-icon-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/bilibili-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/bluesky-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/chatGpt-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/assets/images/chatGpt-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/chefkoch-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 44 | -------------------------------------------------------------------------------- /src/assets/images/fandom-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/geeksForGeeks-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 14 | 16 | 34 | 39 | 40 | -------------------------------------------------------------------------------- /src/assets/images/general-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/general-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/genius-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/github-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/github-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/gitlab-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/goodreads-icon-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/goodreads-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/ifunny-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/imdb-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/imgur-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/instagram-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/knowyourmeme-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/libredirect-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect-128.png -------------------------------------------------------------------------------- /src/assets/images/libredirect-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect-16.png -------------------------------------------------------------------------------- /src/assets/images/libredirect-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect-32.png -------------------------------------------------------------------------------- /src/assets/images/libredirect-48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect-48.png -------------------------------------------------------------------------------- /src/assets/images/libredirect-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect-64.png -------------------------------------------------------------------------------- /src/assets/images/libredirect-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect-96.png -------------------------------------------------------------------------------- /src/assets/images/libredirect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/assets/images/libredirect.png -------------------------------------------------------------------------------- /src/assets/images/libredirect.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/maps-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/maps-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/medium-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/meet-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/meet-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/office-icon-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/office-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/pastebin-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | Pastebin icon -------------------------------------------------------------------------------- /src/assets/images/peertube-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/pinterest-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/pixiv-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/quora-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/reddit-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/search-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/search-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/sendFiles-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/sendFiles-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/snopes-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/soundcloud-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/stackOverflow-icon-light.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/stackOverflow-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/tekstowo-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/tenor-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/textStorage-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/textStorage-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/threads-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/assets/images/threads-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/assets/images/tiktok-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/translate-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/translate-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/tumblr-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/twitch-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/twitter-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/ultimateGuitar-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/urbanDictionary-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/waybackMachine-icon-light.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/waybackMachine-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/wolframAlpha-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/youtube-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/youtubeMusic-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "__MSG_extensionName__", 3 | "description": "__MSG_extensionDescription__", 4 | "version": "3.1.0", 5 | "manifest_version": 2, 6 | "browser_specific_settings": { 7 | "gecko": { 8 | "id": "7esoorv3@alefvanoon.anonaddy.me", 9 | "strict_min_version": "89.0" 10 | }, 11 | "gecko_android": { 12 | "strict_min_version": "113.0" 13 | } 14 | }, 15 | "background": { 16 | "page": "pages/background/background.html", 17 | "persistent": true 18 | }, 19 | "icons": { 20 | "16": "assets/images/libredirect-16.png", 21 | "32": "assets/images/libredirect-32.png", 22 | "48": "assets/images/libredirect-48.png", 23 | "64": "assets/images/libredirect-64.png", 24 | "96": "assets/images/libredirect-96.png", 25 | "128": "assets/images/libredirect-128.png" 26 | }, 27 | "permissions": ["webRequest", "webRequestBlocking", "storage", "clipboardWrite", "contextMenus", ""], 28 | "optional_permissions": ["bookmarks"], 29 | "browser_action": { 30 | "default_title": "__MSG_extensionName__", 31 | "browser_style": false, 32 | "default_popup": "pages/popup/index.html", 33 | "default_icon": { 34 | "16": "assets/images/libredirect-16.png", 35 | "32": "assets/images/libredirect-32.png", 36 | "48": "assets/images/libredirect-48.png", 37 | "64": "assets/images/libredirect-64.png", 38 | "96": "assets/images/libredirect-96.png", 39 | "128": "assets/images/libredirect-128.png" 40 | } 41 | }, 42 | "options_ui": { 43 | "page": "pages/options/index.html", 44 | "browser_style": false, 45 | "open_in_tab": true 46 | }, 47 | "chrome_settings_overrides": { 48 | "search_provider": { 49 | "name": "__MSG_extensionName__", 50 | "keyword": "@libredirect", 51 | "favicon_url": "https://raw.githubusercontent.com/libredirect/browser_extension/master/src/assets/images/libredirect.svg", 52 | "search_url": "https://search.libredirect.invalid/?q={searchTerms}", 53 | "encoding": "UTF-8", 54 | "is_default": false 55 | } 56 | }, 57 | "commands": { 58 | "switchInstance": { 59 | "suggested_key": { 60 | "default": "Alt+Shift+L" 61 | }, 62 | "description": "__MSG_switchInstance__" 63 | }, 64 | "copyRaw": { 65 | "suggested_key": { 66 | "default": "Alt+Shift+C" 67 | }, 68 | "description": "Copies the original link. Ex: Copies the original twitter link while in the nitter website" 69 | }, 70 | "reverse": { 71 | "suggested_key": { 72 | "default": "Alt+Shift+O" 73 | }, 74 | "description": "Redirect to the original link. Ex: Redirects to the original twitter link while in the nitter website" 75 | }, 76 | "redirect": { 77 | "suggested_key": { 78 | "default": "Alt+Shift+R" 79 | }, 80 | "description": "Redirect link. Ex: Redirects original twitter link to nitter" 81 | } 82 | }, 83 | "default_locale": "en", 84 | "update_url": "https://raw.githubusercontent.com/libredirect/libredirect/master/src/updates/updates.xml", 85 | "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAroWDSoSRZ1scj+eJRrvnhJbrqXTKnhQuxs6+AJg16sqr0bsMdFV+MSY4i4xnK+K5WOYkBliWXgUyk/wzicoAjOnSJddrL/Md4FuWHI2NVIkrlsLOrYkygi5OLqGPajRH/w8Cdmg7KzEpXe/OnYV0/qS8li8huEdTzdeLdhfbiVl1j3DOr4OJALQ7mPeeNFHFo/oVQ+OkSezWLezA5jUGfhtzPYV6u1TXzX7lCi8E/BbDbwkvvXOMcjXCv08kjdLOY2djCA2a6zr0xAb3q8DlexAMZ8vMof7AQRFtBKhLc9n9VFoipMMdBOVQQj/eIcRILBrmkcZNnJxFKiHNJ+NcZQIDAQAB" 86 | } 87 | -------------------------------------------------------------------------------- /src/pages/background/background.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/pages/components/Button.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 36 | -------------------------------------------------------------------------------- /src/pages/components/Checkbox.svelte: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 53 | -------------------------------------------------------------------------------- /src/pages/components/Input.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 22 | 23 | 47 | -------------------------------------------------------------------------------- /src/pages/components/Label.svelte: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 19 | -------------------------------------------------------------------------------- /src/pages/components/Row.svelte: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 | 5 | 13 | -------------------------------------------------------------------------------- /src/pages/components/Select.svelte: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | 14 | 35 | -------------------------------------------------------------------------------- /src/pages/fonts/Inter-VariableFont_slnt,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/pages/fonts/Inter-VariableFont_slnt,wght.ttf -------------------------------------------------------------------------------- /src/pages/fonts/Vazirmatn-VariableFont_wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/libredirect/browser_extension/9e4ca2880eb95a091854d96fd717c77772b90988/src/pages/fonts/Vazirmatn-VariableFont_wght.ttf -------------------------------------------------------------------------------- /src/pages/fonts/styles.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "Inter"; 3 | src: url("Inter-VariableFont_slnt,wght.ttf"); 4 | font-weight: normal; 5 | font-style: normal; 6 | } 7 | 8 | @font-face { 9 | font-family: "Vazirmatn"; 10 | src: url("Vazirmatn-VariableFont_wght.ttf"); 11 | font-weight: normal; 12 | font-style: normal; 13 | } -------------------------------------------------------------------------------- /src/pages/icons/AboutIcon.svelte: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /src/pages/icons/AddIcon.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/pages/icons/AutoPickIcon.svelte: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /src/pages/icons/CloseIcon.svelte: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/pages/icons/CopyIcon.svelte: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /src/pages/icons/ExportIcon.svelte: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /src/pages/icons/GeneralIcon.svelte: -------------------------------------------------------------------------------- 1 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /src/pages/icons/ImportIcon.svelte: -------------------------------------------------------------------------------- 1 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /src/pages/icons/PingIcon.svelte: -------------------------------------------------------------------------------- 1 | 9 | 13 | -------------------------------------------------------------------------------- /src/pages/icons/RedirectIcon.svelte: -------------------------------------------------------------------------------- 1 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/pages/icons/RedirectToOriginalIcon.svelte: -------------------------------------------------------------------------------- 1 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /src/pages/icons/ResetIcon.svelte: -------------------------------------------------------------------------------- 1 | 10 | 13 | 16 | 17 | -------------------------------------------------------------------------------- /src/pages/icons/ServicesIcon.svelte: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /src/pages/icons/SettingsIcon.svelte: -------------------------------------------------------------------------------- 1 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /src/pages/icons/SwitchInstanceIcon.svelte: -------------------------------------------------------------------------------- 1 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /src/pages/messages/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Settings 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/pages/messages_src/App.svelte: -------------------------------------------------------------------------------- 1 | 66 | 67 | {#if _options && _config} 68 |
69 | {#if params.get("message") == "disabled"} 70 |
71 |

You disabled redirections for this service

72 | 82 |
83 | {:else if params.get("message") == "no_instance"} 84 |
85 |

You have no instance selected for this frontend

86 | 96 |
97 | {/if} 98 |
99 | {:else} 100 |

Loading...

101 | {/if} 102 | 103 | 135 | -------------------------------------------------------------------------------- /src/pages/messages_src/main.js: -------------------------------------------------------------------------------- 1 | import App from "./App.svelte" 2 | 3 | const app = new App({ 4 | target: document.body, 5 | }) 6 | 7 | export default app 8 | -------------------------------------------------------------------------------- /src/pages/messages_src/stores.js: -------------------------------------------------------------------------------- 1 | import { writable } from "svelte/store" 2 | 3 | export const options = writable(null) 4 | export const config = writable(null) 5 | export const page = writable("general") 6 | -------------------------------------------------------------------------------- /src/pages/options/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Settings 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /src/pages/options_src/App.svelte: -------------------------------------------------------------------------------- 1 | 46 | 47 | {#if _options && _config} 48 |
49 | 50 | {#if !$url.hash || $url.hash == "#general"} 51 | 52 | {:else if $url.hash.startsWith("#services")} 53 | 54 | {/if} 55 |
56 | {:else} 57 |

Loading...

58 | {/if} 59 | 60 | 102 | -------------------------------------------------------------------------------- /src/pages/options_src/General/Exceptions.svelte: -------------------------------------------------------------------------------- 1 | 58 | 59 | 60 | 61 | 62 |
63 | 64 |
65 | { 70 | if (e.key === "Enter") addException() 71 | }} 72 | /> 73 | { 55 | _options.theme = e.target.options[e.target.options.selectedIndex].value 56 | options.set(_options) 57 | }} 58 | /> 59 | 60 | 61 | 62 | 63 | 81 | 82 | 86 | 87 | 91 | 92 | 96 | 97 | 101 |
102 | 103 | 113 | -------------------------------------------------------------------------------- /src/pages/options_src/Services/FrontendIcon.svelte: -------------------------------------------------------------------------------- 1 | 30 | 31 | {#if imageType} 32 | {#if imageType == "svgMono"} 33 | {#if theme == "dark"} 34 | {details.label} 35 | {:else} 36 | {details.label} 37 | {/if} 38 | {:else} 39 | {details.label} 40 | {/if} 41 | {/if} 42 | -------------------------------------------------------------------------------- /src/pages/options_src/Services/RedirectType.svelte: -------------------------------------------------------------------------------- 1 | 66 | 67 | 68 | 69 |