mirror of
https://github.com/gorhill/uBlock.git
synced 2025-10-05 21:32:39 +02:00
Compare commits
116 Commits
1.65.1b7
...
2a2e223fd9
Author | SHA1 | Date | |
---|---|---|---|
|
2a2e223fd9 | ||
|
cdc5a4a0e7 | ||
|
be14670b76 | ||
|
4ee38a056e | ||
|
0d4f55ff30 | ||
|
a43d1d8c42 | ||
|
41a65315f9 | ||
|
5bcdf3731d | ||
|
cc30763c57 | ||
|
d376adaae8 | ||
|
d8ed2c2866 | ||
|
52bc354bce | ||
|
bf09ec0b99 | ||
|
a03de94729 | ||
|
f36d2b8496 | ||
|
2b8ef3ee8e | ||
|
9f8d74b60f | ||
|
0ee49bcc29 | ||
|
8d721f6a68 | ||
|
bbd12ec2f3 | ||
|
54326a350b | ||
|
dd4f764920 | ||
|
6623889920 | ||
|
4b1f87710c | ||
|
e91c47846b | ||
|
bb8e3d4d47 | ||
|
be1502feb3 | ||
|
80cf4d9286 | ||
|
f40dac91b9 | ||
|
575f018c69 | ||
|
6a9357e903 | ||
|
12418ae664 | ||
|
2581004e8f | ||
|
f89de42364 | ||
|
10e48d7ec5 | ||
|
f441773f30 | ||
|
3e5ea3b03f | ||
|
34d202f79d | ||
|
93c5c077a0 | ||
|
91d36749bb | ||
|
4598ef3edc | ||
|
8af80be5b2 | ||
|
4fb4aa1b25 | ||
|
e2325f5e79 | ||
|
9aa91ba111 | ||
|
705e6329eb | ||
|
8de47f250d | ||
|
5127e17573 | ||
|
511a59584d | ||
|
1209119206 | ||
|
87dddb7d78 | ||
|
836e04d110 | ||
|
b3b2142fb6 | ||
|
e9e1626f8e | ||
|
889c0eb208 | ||
|
cb767f4534 | ||
|
edd26d27eb | ||
|
9a5703fa0d | ||
|
b7f4c1f5d7 | ||
|
3609ea66ed | ||
|
087bef3837 | ||
|
2943ef5112 | ||
|
e016a63f7b | ||
|
126495d17a | ||
|
30e5e8c8ce | ||
|
23056514cc | ||
|
e1028c299f | ||
|
8ce7a8d1e4 | ||
|
50cb780107 | ||
|
52dba4116e | ||
|
5d88b72b47 | ||
|
f290d0a142 | ||
|
946a3d202c | ||
|
7eab358165 | ||
|
0936b9b8b7 | ||
|
abe144a79d | ||
|
80f7bd155a | ||
|
da9491c94e | ||
|
4fbcabbc66 | ||
|
8281eaba17 | ||
|
e86e1db87b | ||
|
a0a996916f | ||
|
d2bce26e7d | ||
|
8cdada4899 | ||
|
7cdd78b595 | ||
|
07056c2de5 | ||
|
64858e9b9e | ||
|
17c6334cbd | ||
|
d1a29d9899 | ||
|
bc05f31cc2 | ||
|
57557ea116 | ||
|
6f6724ce1a | ||
|
6327aae56c | ||
|
31cd8b3983 | ||
|
0d442f097f | ||
|
353e1bacc1 | ||
|
aab425719c | ||
|
30266e5107 | ||
|
69fa0c2e09 | ||
|
f9ee5e2a64 | ||
|
0e821284ab | ||
|
052c36aada | ||
|
cb62e38f50 | ||
|
23d51b80df | ||
|
e8f6b7cd00 | ||
|
c7e4ac48c3 | ||
|
9711039726 | ||
|
5d7e5ee3a0 | ||
|
bc4e829427 | ||
|
807d1b6cdb | ||
|
da025fef26 | ||
|
69b2fdf396 | ||
|
060442c636 | ||
|
4b33b7bd7a | ||
|
f5d3d776d5 | ||
|
4814992c54 |
4
.github/workflows/RELEASE.HEAD.md
vendored
4
.github/workflows/RELEASE.HEAD.md
vendored
@@ -2,8 +2,6 @@
|
||||
|
||||
#### How to Install the Developer Build:
|
||||
|
||||
- **Firefox**: Download the build from [uBlock0_%version%.firefox.signed.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.firefox.signed.xpi).
|
||||
- **Firefox**: Signing pending <!-- Download the build from [uBlock0_%version%.firefox.signed.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.firefox.signed.xpi). -->
|
||||
uBO works best on Gecko-based browsers, check out [why](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox).
|
||||
- **Chromium**: Install directly from the [Chrome Web Store](https://chromewebstore.google.com/detail/ublock-origin-development/cgbcahbpdhpcegmbfconppldiemgcoii).
|
||||
- **Thunderbird**: Download [uBlock0_%version%.thunderbird.xpi](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.thunderbird.xpi) and drag it into Thunderbird's _Add-ons Manager_ (requires Thunderbird 91+).
|
||||
- **Node.js**: You can import from [npm](https://www.npmjs.com/package/@gorhill/ubo-core) or download and unzip [uBlock0_%version%.npm.tgz](https://github.com/gorhill/uBlock/releases/download/%version%/uBlock0_%version%.npm.tgz).
|
||||
|
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@@ -29,7 +29,6 @@ jobs:
|
||||
run: |
|
||||
tools/make-chromium.sh ${{ env.VERSION }}
|
||||
tools/make-firefox.sh ${{ env.VERSION }}
|
||||
tools/make-thunderbird.sh ${{ env.VERSION }}
|
||||
- name: Assemble release notes
|
||||
run: |
|
||||
> release.body.txt
|
||||
@@ -49,4 +48,3 @@ jobs:
|
||||
files: |
|
||||
dist/build/uBlock0_${{ env.VERSION }}.chromium.zip
|
||||
dist/build/uBlock0_${{ env.VERSION }}.firefox.xpi
|
||||
dist/build/uBlock0_${{ env.VERSION }}.thunderbird.xpi
|
||||
|
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -1,3 +1,6 @@
|
||||
[submodule "platform/mv3/extension/lib/codemirror/codemirror-ubol"]
|
||||
path = platform/mv3/extension/lib/codemirror/codemirror-ubol
|
||||
url = https://github.com/gorhill/codemirror-ubol.git
|
||||
[submodule "publish-extension"]
|
||||
path = publish-extension
|
||||
url = https://github.com/gorhill/publish-extension.git
|
||||
|
30
CHANGELOG.md
30
CHANGELOG.md
@@ -1,3 +1,33 @@
|
||||
- [Improve `href-sanitizer` scriptlet](https://github.com/gorhill/uBlock/commit/a43d1d8c42)
|
||||
- [Fix `editInboundObjectFn` utility scriptlet](https://github.com/gorhill/uBlock/commit/d376adaae8)
|
||||
- [Improve `trusted-replace-argument` scriptlet](https://github.com/gorhill/uBlock/commit/52bc354bce)
|
||||
- [Add ability to test against regex in JSONPath expressions](https://github.com/gorhill/uBlock/commit/f36d2b8496)
|
||||
- [Improve `proxy-apply` utility scriptlet](https://github.com/gorhill/uBlock/commit/dd4f764920)
|
||||
- [Fix `removeparam` for multiple query parameters with same name](https://github.com/gorhill/uBlock/commit/3e5ea3b03f)
|
||||
- [Improve `trusted-click-element` scriptlet](https://github.com/gorhill/uBlock/commit/9aa91ba111)
|
||||
- [Improve `google-ima` shim](https://github.com/gorhill/uBlock/commit/8de47f250d)
|
||||
- [Add back a uBO-specific version of "CERT.PL's Warning List"](https://github.com/gorhill/uBlock/commit/87dddb7d78)
|
||||
|
||||
----------
|
||||
|
||||
# 1.66.4
|
||||
|
||||
- [Fix potential infinite loop when scanning for `$` anchor](https://github.com/gorhill/uBlock/commit/889c0eb208)
|
||||
- [Allow generic exception for `replace=` option](https://github.com/gorhill/uBlock/commit/52dba4116e)
|
||||
|
||||
----------
|
||||
|
||||
# 1.66.2
|
||||
|
||||
- [Fix version snafu](https://github.com/gorhill/uBlock/commit/50cb780107)
|
||||
|
||||
----------
|
||||
|
||||
# 1.66.0
|
||||
|
||||
- [Improve `prevent-fetch` scriptlet](https://github.com/gorhill/uBlock/commit/d2bce26e7d)
|
||||
- [Add support to strict-block from `ipaddress=` option](https://github.com/gorhill/uBlock/commit/6327aae56c)
|
||||
- [Improve rendering with high-contrast theme](https://github.com/gorhill/uBlock/commit/5d7e5ee3a0) (fix suggested by @emv33)
|
||||
- [Fix undue fetch from remote server at first install](https://github.com/gorhill/uBlock/commit/9327e19233)
|
||||
- [Improve compatibility of `uritransform=` with DNR syntax](https://github.com/gorhill/uBlock/commit/aaf35d9d71)
|
||||
- [Allow usage of `csp=`/`permissions=` with resource type object](https://github.com/gorhill/uBlock/commit/07e9f805bb)
|
||||
|
85
Makefile
85
Makefile
@@ -3,7 +3,10 @@ run_options := $(filter-out $@,$(MAKECMDGOALS))
|
||||
|
||||
.PHONY: all clean cleanassets test lint chromium opera firefox npm dig \
|
||||
mv3-chromium mv3-firefox mv3-edge mv3-safari ubol-codemirror \
|
||||
compare maxcost medcost mincost modifiers record wasm
|
||||
compare maxcost medcost mincost modifiers record wasm \
|
||||
publish-chromium publish-edge publish-firefox \
|
||||
publish-dev-chromium publish-dev-firefox \
|
||||
upload-firefox upload-dev-firefox
|
||||
|
||||
sources := ./dist/version $(shell find ./assets -type f) $(shell find ./src -type f)
|
||||
platform := $(wildcard platform/*/*)
|
||||
@@ -52,15 +55,6 @@ init: node_modules
|
||||
lint: init
|
||||
npm run lint
|
||||
|
||||
test: npm
|
||||
cd dist/build/uBlock0.npm && npm run test
|
||||
|
||||
test-full-battery: npm
|
||||
cd dist/build/uBlock0.npm && npm run test-full-battery
|
||||
|
||||
check-leaks: npm
|
||||
cd dist/build/uBlock0.npm && npm run check-leaks
|
||||
|
||||
dist/build/uBlock0.dig: tools/make-nodejs.sh $(sources) $(platform) $(assets)
|
||||
tools/make-dig.sh
|
||||
|
||||
@@ -105,6 +99,77 @@ clean:
|
||||
cleanassets:
|
||||
rm -rf dist/build/mv3-data dist/build/uAssets
|
||||
|
||||
# Usage: make publish-publish version=?
|
||||
publish-chromium:
|
||||
node publish-extension/publish-chromium.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=chromium \
|
||||
storeid=cjpalhdlnbpafiamejdnhcphjbkeiagm
|
||||
|
||||
# Usage: make publish-edge version=?
|
||||
publish-edge:
|
||||
node publish-extension/publish-edge.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=chromium \
|
||||
datebasedmajor=1 \
|
||||
storeid=odfafepnkmbhccpbejgmiehpchacaeak \
|
||||
productid=$(shell secret-tool lookup token ubo_edge_id)
|
||||
|
||||
# Usage: make publish-firefox version=?
|
||||
publish-firefox:
|
||||
node publish-extension/publish-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=listed
|
||||
|
||||
# Usage: make publish-dev-chromium version=?
|
||||
publish-dev-chromium:
|
||||
node publish-extension/publish-chromium.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=chromium \
|
||||
storeid=cgbcahbpdhpcegmbfconppldiemgcoii
|
||||
|
||||
# Usage: make publish-dev-firefox version=?
|
||||
publish-dev-firefox:
|
||||
node publish-extension/publish-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=unlisted \
|
||||
updatepath=./dist/firefox/updates.json
|
||||
|
||||
# Usage: make upload-firefox version=?
|
||||
upload-firefox:
|
||||
node publish-extension/upload-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=listed
|
||||
|
||||
# Usage: make upload-dev-firefox version=?
|
||||
upload-dev-firefox:
|
||||
node publish-extension/upload-firefox.js \
|
||||
ghowner=gorhill \
|
||||
ghrepo=uBlock \
|
||||
ghtag=$(version) \
|
||||
ghasset=firefox \
|
||||
storeid=uBlock0@raymondhill.net \
|
||||
channel=unlisted \
|
||||
updatepath=./dist/firefox/updates.json
|
||||
|
||||
# Not real targets, just convenient for auto-completion at shell prompt
|
||||
compare:
|
||||
@echo
|
||||
|
@@ -21,7 +21,7 @@ uBlock Origin (uBO)
|
||||
| <img src="https://github.com/user-attachments/assets/b0136512-56a5-4856-8c50-4971c957a24f" alt="Get uBlock Origin for Firefox"> | <a href="https://addons.mozilla.org/addon/ublock-origin/">Firefox Add-ons</a> | [uBO works best on Firefox](https://github.com/gorhill/uBlock/wiki/uBlock-Origin-works-best-on-Firefox) |
|
||||
| <img src="https://github.com/user-attachments/assets/3a7569f8-688b-4eb1-a643-8d0fe173aefe" alt="Get uBlock Origin for Microsoft Edge"> | <a href="https://microsoftedge.microsoft.com/addons/detail/ublock-origin/odfafepnkmbhccpbejgmiehpchacaeak">Edge Add-ons</a> |
|
||||
| <img src="https://github.com/user-attachments/assets/938f080c-fe64-4e48-8b89-4bfceabb56e6" alt="Get uBlock Origin for Opera"> | <a href="https://addons.opera.com/extensions/details/ublock/">Opera Add-ons</a> |
|
||||
| <img src="https://github.com/user-attachments/assets/5463ef88-873b-4516-8514-5277664cfde7" alt="Get uBlock Origin for Chromium"> | <a href="https://chromewebstore.google.com/detail/ublock-origin-lite/ddkjiahejlhfcafbddmgiahcphecmpfh">Chrome Web Store</a> | <a href="https://github.com/uBlockOrigin/uBlock-issues/wiki/About-Google-Chrome's-%22This-extension-may-soon-no-longer-be-supported%22">About Google Chrome's "This extension may soon no longer be supported"</a><br>End of support on Chrome 139 |
|
||||
| <img src="https://github.com/user-attachments/assets/5463ef88-873b-4516-8514-5277664cfde7" alt="Get uBlock Origin for Chromium"> | <a href="https://chromewebstore.google.com/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm">Chrome Web Store</a> | <a href="https://github.com/uBlockOrigin/uBlock-issues/wiki/About-Google-Chrome's-%22This-extension-may-soon-no-longer-be-supported%22">About Google Chrome's "This extension may soon no longer be supported"</a><br>End of support on Chrome 139 |
|
||||
| <img src="https://github.com/user-attachments/assets/2e9037c4-836d-44c1-a716-ba96e89daaff" alt="Get uBlock Origin for Thunderbird"> | <a href="https://addons.thunderbird.net/thunderbird/addon/ublock-origin/">Thunderbird Add-ons</a> | [No longer updated and stuck at 1.49.2.](https://github.com/uBlockOrigin/uBlock-issues/issues/2928) Later versions require "GitHub - Releases". |
|
||||
| <img src="https://upload.wikimedia.org/wikipedia/commons/c/c2/GitHub_Invertocat_Logo.svg" height="50" alt="Get uBlock Origin through GitHub"> | <a href="https://github.com/gorhill/uBlock/releases">GitHub - Releases</a> | Stable and development versions on Firefox, Chromium MV2, and Thunderbird. Must be placed manually into web browsers; the Chromium and Thunderbird versions usually won't auto-update.
|
||||
|
||||
|
@@ -822,7 +822,7 @@
|
||||
"POL-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": null,
|
||||
"parent": "🇵🇱pl: Oficjalne Polskie Filtry",
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin",
|
||||
"tags": "ads polish polski",
|
||||
@@ -830,6 +830,17 @@
|
||||
"contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"supportURL": "https://github.com/MajkiIT/polish-ads-filter"
|
||||
},
|
||||
"POL-3": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇵🇱pl: Oficjalne Polskie Filtry",
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: CERT.PL's Warning List",
|
||||
"tags": "malware polish polski",
|
||||
"lang": "szl pl",
|
||||
"contentURL": "https://hole.cert.pl/domains/v2/domains_ublock.txt",
|
||||
"supportURL": "https://cert.pl/lista-ostrzezen/"
|
||||
},
|
||||
"ROU-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
|
@@ -822,7 +822,7 @@
|
||||
"POL-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": null,
|
||||
"parent": "🇵🇱pl: Oficjalne Polskie Filtry",
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: Oficjalne Polskie Filtry do uBlocka Origin",
|
||||
"tags": "ads polish polski",
|
||||
@@ -830,6 +830,17 @@
|
||||
"contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"supportURL": "https://github.com/MajkiIT/polish-ads-filter"
|
||||
},
|
||||
"POL-3": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"parent": "🇵🇱pl: Oficjalne Polskie Filtry",
|
||||
"off": true,
|
||||
"title": "🇵🇱pl: CERT.PL's Warning List",
|
||||
"tags": "malware polish polski",
|
||||
"lang": "szl pl",
|
||||
"contentURL": "https://hole.cert.pl/domains/v2/domains_ublock.txt",
|
||||
"supportURL": "https://cert.pl/lista-ostrzezen/"
|
||||
},
|
||||
"ROU-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
|
190
dist/chromium/publish-beta.py
vendored
190
dist/chromium/publish-beta.py
vendored
@@ -1,190 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.chromium.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uBlock0.chromium.zip to Chrome store
|
||||
# - Publish uBlock0.chromium.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^\d+\.\d+\.\d+(b|rc)\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'cgbcahbpdhpcegmbfconppldiemgcoii'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = 'uBlock0_' + version + '.chromium.zip'
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The tmp directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.chromium.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == raw_zip_filename:
|
||||
raw_zip_url = asset['url']
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
160
dist/chromium/publish-stable.js
vendored
160
dist/chromium/publish-stable.js
vendored
@@ -1,160 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a comprehensive, efficient content blocker
|
||||
Copyright (C) 2025-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
import * as fs from 'node:fs/promises';
|
||||
import * as ghapi from '../github-api.js';
|
||||
import path from 'node:path';
|
||||
import process from 'node:process';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
const secrets = await ghapi.getSecrets();
|
||||
const githubAuth = `Bearer ${secrets.github_token}`;
|
||||
const commandLineArgs = ghapi.commandLineArgs;
|
||||
const githubOwner = commandLineArgs.ghowner;
|
||||
const githubRepo = commandLineArgs.ghrepo;
|
||||
const githubTag = commandLineArgs.ghtag;
|
||||
const cwsId = commandLineArgs.cwsid;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
async function publishToCWS(filePath) {
|
||||
// Prepare access token
|
||||
console.log('Generating access token...');
|
||||
const authURL = 'https://accounts.google.com/o/oauth2/token';
|
||||
const authRequest = new Request(authURL, {
|
||||
body: JSON.stringify({
|
||||
client_id: secrets.cs_id,
|
||||
client_secret: secrets.cs_secret,
|
||||
grant_type: 'refresh_token',
|
||||
refresh_token: secrets.cs_refresh,
|
||||
}),
|
||||
method: 'POST',
|
||||
});
|
||||
const authResponse = await fetch(authRequest);
|
||||
if ( authResponse.ok === false ) {
|
||||
console.error(`Error: Auth failed -- server error ${authResponse.statusText}`);
|
||||
process.exit(1);
|
||||
}
|
||||
const responseDict = await authResponse.json()
|
||||
if ( responseDict.access_token === undefined ) {
|
||||
console.error('Error: Auth failed -- no access token');
|
||||
console.error('Error: Auth failed --', JSON.stringify(responseDict, null, 2));
|
||||
process.exit(1);
|
||||
}
|
||||
const cwsAuth = `Bearer ${responseDict.access_token}`;
|
||||
if ( responseDict.refresh_token ) {
|
||||
secrets.cs_refresh = responseDict.refresh_token
|
||||
}
|
||||
|
||||
// Read package
|
||||
const data = await fs.readFile(filePath);
|
||||
|
||||
// Upload
|
||||
console.log('Uploading package...')
|
||||
const uploadURL = `https://www.googleapis.com/upload/chromewebstore/v1.1/items/${cwsId}`;
|
||||
const uploadRequest = new Request(uploadURL, {
|
||||
body: data,
|
||||
headers: {
|
||||
'Authorization': cwsAuth,
|
||||
'x-goog-api-version': '2',
|
||||
},
|
||||
method: 'PUT',
|
||||
});
|
||||
const uploadResponse = await fetch(uploadRequest);
|
||||
if ( uploadResponse.ok === false ) {
|
||||
console.error(`Upload failed -- server error ${uploadResponse.statusText}`);
|
||||
process.exit(1)
|
||||
}
|
||||
const uploadDict = await uploadResponse.json();
|
||||
if ( uploadDict.uploadState !== 'SUCCESS' ) {
|
||||
console.error(`Upload failed -- server error ${uploadDict['uploadState']}`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('Upload succeeded.')
|
||||
|
||||
// Publish
|
||||
console.log('Publishing package...')
|
||||
const publishURL = `https://www.googleapis.com/chromewebstore/v1.1/items/${cwsId}/publish`;
|
||||
const publishRequest = new Request(publishURL, {
|
||||
headers: {
|
||||
'Authorization': cwsAuth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
},
|
||||
method: 'POST',
|
||||
});
|
||||
const publishResponse = await fetch(publishRequest);
|
||||
if ( publishResponse.ok === false ) {
|
||||
console.error(`Error: Chrome store publishing failed -- server error ${publishResponse.statusText}`);
|
||||
process.exit(1);
|
||||
}
|
||||
const publishDict = await publishResponse.json();
|
||||
if (
|
||||
Array.isArray(publishDict.status) === false ||
|
||||
publishDict.status.includes('OK') === false
|
||||
) {
|
||||
console.error(`Publishing failed -- server error ${publishDict.status}`);
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('Publishing succeeded.')
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
async function main() {
|
||||
if ( secrets === undefined ) { return 'Need secrets'; }
|
||||
if ( githubOwner === '' ) { return 'Need GitHub owner'; }
|
||||
if ( githubRepo === '' ) { return 'Need GitHub repo'; }
|
||||
|
||||
ghapi.setGithubContext(githubOwner, githubRepo, githubTag, githubAuth);
|
||||
|
||||
const assetInfo = await ghapi.getAssetInfo('chromium');
|
||||
|
||||
console.log(`GitHub owner: "${githubOwner}"`);
|
||||
console.log(`GitHub repo: "${githubRepo}"`);
|
||||
console.log(`Release tag: "${githubTag}"`);
|
||||
console.log(`Release asset: "${assetInfo.name}"`);
|
||||
|
||||
// Fetch asset from GitHub repo
|
||||
const filePath = await ghapi.downloadAssetFromRelease(assetInfo);
|
||||
console.log('Asset saved at', filePath);
|
||||
|
||||
// Upload to Chrome Web Store
|
||||
await publishToCWS(filePath);
|
||||
|
||||
// Clean up
|
||||
if ( commandLineArgs.keep !== true ) {
|
||||
const tmpdir = path.dirname(filePath);
|
||||
console.log(`Removing ${tmpdir}`);
|
||||
ghapi.shellExec(`rm -rf "${tmpdir}"`);
|
||||
}
|
||||
|
||||
console.log('Done');
|
||||
}
|
||||
|
||||
main().then(result => {
|
||||
if ( result !== undefined ) {
|
||||
console.log(result);
|
||||
process.exit(1);
|
||||
}
|
||||
process.exit(0);
|
||||
});
|
190
dist/chromium/publish-stable.py
vendored
190
dist/chromium/publish-stable.py
vendored
@@ -1,190 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.chromium.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uBlock0.chromium.zip to Chrome store
|
||||
# - Publish uBlock0.chromium.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^\d+\.\d+\.\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'cjpalhdlnbpafiamejdnhcphjbkeiagm'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = 'uBlock0_' + version + '.chromium.zip'
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The tmp directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.chromium.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == raw_zip_filename:
|
||||
raw_zip_url = asset['url']
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
331
dist/firefox/publish-signed-beta.py
vendored
331
dist/firefox/publish-signed-beta.py
vendored
@@ -1,331 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign uBlock0.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as uBlock0.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload uBlock0.firefox.signed.xpi to GitHub
|
||||
# - Remove uBlock0.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
if match.group(2):
|
||||
revision = int(match.group(3))
|
||||
if match.group(2) == 'rc':
|
||||
revision += 100;
|
||||
ext_version += '.' + str(revision)
|
||||
|
||||
extension_id = 'uBlock0@raymondhill.net'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = 'uBlock0_' + tag_version + '.firefox.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBlock0.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = 'uBlock0_' + tag_version + '.firefox.signed.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The tmp directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw xpi package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_xpi_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
|
||||
|
||||
#
|
||||
# Convert the package to a self-hosted one: add `update_url` to the manifest
|
||||
#
|
||||
min_browser_version = '68';
|
||||
|
||||
print('Converting raw xpi package into self-hosted xpi package...')
|
||||
with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
||||
with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
|
||||
for item in zipin.infolist():
|
||||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version']
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
interval = 60 # check every 60 seconds
|
||||
countdown = 60 * 60 / interval # for at most 60 minutes
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
data = { 'channel': 'unlisted' }
|
||||
files = { 'upload': f, }
|
||||
signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('Request for signing self-hosted xpi package succeeded.')
|
||||
signing_request_response = response.json();
|
||||
f.close()
|
||||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
while True:
|
||||
time.sleep(interval)
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
countdown -= 1
|
||||
if countdown <= 0:
|
||||
print('Error: AMO signing timed out')
|
||||
exit(1)
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
response = requests.get(signing_check_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
signing_check_response = response.json()
|
||||
if not signing_check_response['processed']:
|
||||
continue
|
||||
if not signing_check_response['valid']:
|
||||
print('Error: AMO validation failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['signed']:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['download_url']:
|
||||
print('Error: AMO signing failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('\r')
|
||||
print('Self-hosted xpi package successfully signed.')
|
||||
download_url = signing_check_response['files'][0]['download_url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
break
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
# Be sure we are in sync with potentially modified files on remote
|
||||
r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
|
||||
def int_from_version(version):
|
||||
parts = version.split('.')
|
||||
if len(parts) == 3:
|
||||
parts.append('0')
|
||||
return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if int_from_version(ext_version) > int_from_version(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
24
dist/firefox/updates.json
vendored
24
dist/firefox/updates.json
vendored
@@ -1,13 +1,17 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBlock0@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.65.1.4",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "92.0" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/1.65.1b4/uBlock0_1.65.1b4.firefox.signed.xpi"
|
||||
"addons": {
|
||||
"uBlock0@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.66.5.1",
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
"strict_min_version": "92.0"
|
||||
}
|
||||
},
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/1.66.5b1/uBlock0_1.66.5b1.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
13
dist/firefox/updates.template.json
vendored
13
dist/firefox/updates.template.json
vendored
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBlock0@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/uBlock0_$tag_version.firefox.signed.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
257
dist/firefox/upload-signed-beta.py
vendored
257
dist/firefox/upload-signed-beta.py
vendored
@@ -1,257 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign uBlock0.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as uBlock0.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload uBlock0.firefox.signed.xpi to GitHub
|
||||
# - Remove uBlock0.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^(\d+\.\d+\.\d+)(?:(b|rc)(\d+))?$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
if match.group(2):
|
||||
revision = int(match.group(3))
|
||||
if match.group(2) == 'rc':
|
||||
revision += 100;
|
||||
ext_version += '.' + str(revision)
|
||||
|
||||
extension_id = 'uBlock0@raymondhill.net'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = 'uBlock0_' + tag_version + '.firefox.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBlock0.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = 'uBlock0_' + tag_version + '.firefox.signed.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The tmp directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
|
||||
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
version_details_url = 'https://addons.mozilla.org/api/v5/addons/addon/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Fetching package details...')
|
||||
version_details_response = requests.get(version_details_url, headers=headers)
|
||||
if version_details_response.status_code > 400:
|
||||
print('Error: Fetching derails failed -- server error {0}'.format(version_details_response.status_code))
|
||||
print(version_details_response.text)
|
||||
exit(1)
|
||||
print('Fetching version details succeeded.')
|
||||
version_details = version_details_response.json();
|
||||
if version_details['file']['status'] != 'public':
|
||||
print('Error: Version is not approved -- server error {0}'.format(version_details_response.status_code))
|
||||
print(version_details_response.text)
|
||||
exit(1)
|
||||
if not version_details['file']['url']:
|
||||
print('Error: No file URL')
|
||||
print(version_details_response.text)
|
||||
exit(1)
|
||||
download_url = version_details['file']['url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
# Be sure we are in sync with potentially modified files on remote
|
||||
r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
|
||||
def int_from_version(version):
|
||||
parts = version.split('.')
|
||||
if len(parts) == 3:
|
||||
parts.append('0')
|
||||
return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if int_from_version(ext_version) > int_from_version(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=version_details['compatibility']['firefox']['min'])
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
223
dist/github-api.js
vendored
223
dist/github-api.js
vendored
@@ -1,223 +0,0 @@
|
||||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a comprehensive, efficient content blocker
|
||||
Copyright (C) 2025-present Raymond Hill
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||
|
||||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
import * as fs from 'node:fs/promises';
|
||||
import { execSync } from 'node:child_process';
|
||||
import os from 'node:os';
|
||||
import path from 'node:path';
|
||||
import process from 'node:process';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
function voidFunc() {
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
let githubOwner = '';
|
||||
let githubRepo = '';
|
||||
let githubTag = '';
|
||||
let githubAuth = '';
|
||||
|
||||
export function setGithubContext(owner, repo, tag, auth) {
|
||||
githubOwner = owner;
|
||||
githubRepo = repo;
|
||||
githubTag = tag;
|
||||
githubAuth = auth;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
let pathToSecrets = '';
|
||||
|
||||
export async function getSecrets() {
|
||||
const homeDir = os.homedir();
|
||||
let currentDir = process.cwd();
|
||||
let fileName = '';
|
||||
for (;;) {
|
||||
fileName = `${currentDir}/ubo_secrets`;
|
||||
const stat = await fs.stat(fileName).catch(voidFunc);
|
||||
if ( stat !== undefined ) { break; }
|
||||
currentDir = path.resolve(currentDir, '..');
|
||||
if ( currentDir.startsWith(homeDir) === false ) {
|
||||
pathToSecrets = homeDir;
|
||||
return;
|
||||
}
|
||||
}
|
||||
console.log(`Found secrets in ${fileName}`);
|
||||
const text = await fs.readFile(fileName, { encoding: 'utf8' }).catch(voidFunc);
|
||||
if ( text === undefined ) { return {}; }
|
||||
const secrets = JSON.parse(text);
|
||||
pathToSecrets = fileName;
|
||||
return secrets;
|
||||
}
|
||||
|
||||
export async function saveSecrets(secrets) {
|
||||
if ( pathToSecrets === '' ) { return; }
|
||||
return fs.writeFile(pathToSecrets, JSON.stringify(secrets, null, 2));
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function getRepoRoot() {
|
||||
const homeDir = os.homedir();
|
||||
let currentDir = process.cwd();
|
||||
for (;;) {
|
||||
const fileName = `${currentDir}/.git`;
|
||||
const stat = await fs.stat(fileName).catch(voidFunc);
|
||||
if ( stat !== undefined ) { return currentDir; }
|
||||
currentDir = path.resolve(currentDir, '..');
|
||||
if ( currentDir.startsWith(homeDir) === false ) { return; }
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function getReleaseInfo() {
|
||||
console.log(`Fetching release info for ${githubOwner}/${githubRepo}/${githubTag} from GitHub`);
|
||||
const releaseInfoUrl = `https://api.github.com/repos/${githubOwner}/${githubRepo}/releases/tags/${githubTag}`;
|
||||
const request = new Request(releaseInfoUrl, {
|
||||
headers: {
|
||||
Authorization: githubAuth,
|
||||
},
|
||||
});
|
||||
const response = await fetch(request).catch(voidFunc);
|
||||
if ( response === undefined ) { return; }
|
||||
if ( response.ok !== true ) { return; }
|
||||
const releaseInfo = await response.json().catch(voidFunc);
|
||||
if ( releaseInfo === undefined ) { return; }
|
||||
return releaseInfo;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function getAssetInfo(assetName) {
|
||||
const releaseInfo = await getReleaseInfo();
|
||||
if ( releaseInfo === undefined ) { return; }
|
||||
if ( releaseInfo.assets === undefined ) { return; }
|
||||
for ( const asset of releaseInfo.assets ) {
|
||||
if ( asset.name.includes(assetName) ) { return asset; }
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function downloadAssetFromRelease(assetInfo) {
|
||||
const assetURL = assetInfo.url;
|
||||
console.log(`Fetching ${assetURL}`);
|
||||
const request = new Request(assetURL, {
|
||||
headers: {
|
||||
Authorization: githubAuth,
|
||||
Accept: 'application/octet-stream',
|
||||
},
|
||||
});
|
||||
const response = await fetch(request).catch(voidFunc);
|
||||
if ( response.ok !== true ) { return; }
|
||||
const data = await response.bytes().catch(voidFunc);
|
||||
if ( data === undefined ) { return; }
|
||||
const tempDir = await fs.mkdtemp('/tmp/github-asset-');
|
||||
const fileName = `${tempDir}/${assetInfo.name}`;
|
||||
await fs.writeFile(fileName, data);
|
||||
return fileName;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function uploadAssetToRelease(assetPath, mimeType) {
|
||||
console.log(`Uploading "${assetPath}" to GitHub...`);
|
||||
const data = await fs.readFile(assetPath).catch(( ) => { });
|
||||
if ( data === undefined ) { return; }
|
||||
const releaseInfo = await getReleaseInfo();
|
||||
if ( releaseInfo.upload_url === undefined ) { return; }
|
||||
const assetName = path.basename(assetPath);
|
||||
const uploadURL = releaseInfo.upload_url.replace('{?name,label}', `?name=${assetName}`);
|
||||
console.log('Upload URL:', uploadURL);
|
||||
const request = new Request(uploadURL, {
|
||||
body: new Int8Array(data.buffer, data.byteOffset, data.length),
|
||||
headers: {
|
||||
Authorization: githubAuth,
|
||||
'Content-Type': mimeType,
|
||||
},
|
||||
method: 'POST',
|
||||
});
|
||||
const response = await fetch(request).catch(( ) => { });
|
||||
if ( response === undefined ) { return; }
|
||||
const json = await response.json();
|
||||
console.log(json);
|
||||
return json;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function deleteAssetFromRelease(assetURL) {
|
||||
print(`Remove ${assetURL} from GitHub release ${githubTag}...`);
|
||||
const request = new Request(assetURL, {
|
||||
headers: {
|
||||
Authorization: githubAuth,
|
||||
},
|
||||
method: 'DELETE',
|
||||
});
|
||||
const response = await fetch(request);
|
||||
return response.ok;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function getManifest(path) {
|
||||
const text = await fs.readFile(path, { encoding: 'utf8' });
|
||||
return JSON.parse(text);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export async function shellExec(text) {
|
||||
let command = '';
|
||||
for ( const line of text.split(/[\n\r]+/) ) {
|
||||
command += line.trimEnd();
|
||||
if ( command.endsWith('\\') ) {
|
||||
command = command.slice(0, -1);
|
||||
continue;
|
||||
}
|
||||
command = command.trim();
|
||||
if ( command === '' ) { continue; }
|
||||
execSync(command);
|
||||
command = '';
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
export const commandLineArgs = (( ) => {
|
||||
const args = Object.create(null);
|
||||
let name, value;
|
||||
for ( const arg of process.argv.slice(2) ) {
|
||||
const pos = arg.indexOf('=');
|
||||
if ( pos === -1 ) {
|
||||
name = arg;
|
||||
value = true;
|
||||
} else {
|
||||
name = arg.slice(0, pos);
|
||||
value = arg.slice(pos+1);
|
||||
}
|
||||
args[name] = value;
|
||||
}
|
||||
return args;
|
||||
})();
|
195
dist/mv3/chromium/publish-beta.py
vendored
195
dist/mv3/chromium/publish-beta.py
vendored
@@ -1,195 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBOLite_*.chromium.mv3.zip from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Upload uBOLite_*.chromium.mv3.zip to Chrome store
|
||||
# - Publish uBOLite_*.chromium.mv3.zip to Chrome store
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
version = sys.argv[1]
|
||||
else:
|
||||
version = input('Github release version: ')
|
||||
version.strip()
|
||||
if not re.search('^uBOLite_\d+\.\d+\.\d+\.\d+$', version):
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
|
||||
cs_extension_id = 'ddkjiahejlhfcafbddmgiahcphecmpfh'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_zip_filename = ''
|
||||
raw_zip_filepath = ''
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The build directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'dist', 'build', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBOLite_*.chromium.mv3.zip
|
||||
raw_zip_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if re.search('uBOLite_\d+.\d+.\d+.\d+.chromium.mv3.zip', asset['name']):
|
||||
raw_zip_url = asset['url']
|
||||
raw_zip_filename = asset['name']
|
||||
raw_zip_filepath = os.path.join(tmpdir.name, raw_zip_filename)
|
||||
if len(raw_zip_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
if len(raw_zip_filepath) == 0:
|
||||
print('Error: Invalid release asset file not set')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw zip package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_zip_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_zip_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_zip_filepath))
|
||||
|
||||
#
|
||||
# Upload to Chrome store
|
||||
#
|
||||
|
||||
# Auth tokens
|
||||
cs_id = input_secret('Chrome store id', 'cs_id')
|
||||
cs_secret = input_secret('Chrome store secret', 'cs_secret')
|
||||
cs_refresh = input_secret('Chrome store refresh token', 'cs_refresh')
|
||||
|
||||
print('Uploading to Chrome store...')
|
||||
with open(raw_zip_filepath, 'rb') as f:
|
||||
print('Generating access token...')
|
||||
auth_url = 'https://accounts.google.com/o/oauth2/token'
|
||||
auth_payload = {
|
||||
'client_id': cs_id,
|
||||
'client_secret': cs_secret,
|
||||
'grant_type': 'refresh_token',
|
||||
'refresh_token': cs_refresh,
|
||||
}
|
||||
auth_response = requests.post(auth_url, data=auth_payload)
|
||||
if auth_response.status_code != 200:
|
||||
print('Error: Auth failed -- server error {0}'.format(auth_response.status_code))
|
||||
print(auth_response.text)
|
||||
exit(1)
|
||||
response_dict = auth_response.json()
|
||||
if 'access_token' not in response_dict:
|
||||
print('Error: Auth failed -- no access token')
|
||||
exit(1)
|
||||
# Prepare access token
|
||||
cs_auth = 'Bearer ' + response_dict['access_token']
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
}
|
||||
# Upload
|
||||
print('Uploading package...')
|
||||
upload_url = 'https://www.googleapis.com/upload/chromewebstore/v1.1/items/{0}'.format(cs_extension_id)
|
||||
upload_response = requests.put(upload_url, headers=headers, data=f)
|
||||
f.close()
|
||||
if upload_response.status_code != 200:
|
||||
print('Upload failed -- server error {0}'.format(upload_response.status_code))
|
||||
print(upload_response.text)
|
||||
exit(1)
|
||||
response_dict = upload_response.json();
|
||||
if 'uploadState' not in response_dict or response_dict['uploadState'] != 'SUCCESS':
|
||||
print('Upload failed -- server error {0}'.format(response_dict['uploadState']))
|
||||
exit(1)
|
||||
print('Upload succeeded.')
|
||||
# Publish
|
||||
print('Publishing package...')
|
||||
publish_url = 'https://www.googleapis.com/chromewebstore/v1.1/items/{0}/publish'.format(cs_extension_id)
|
||||
headers = {
|
||||
'Authorization': cs_auth,
|
||||
'x-goog-api-version': '2',
|
||||
'Content-Length': '0',
|
||||
}
|
||||
publish_response = requests.post(publish_url, headers=headers)
|
||||
if publish_response.status_code != 200:
|
||||
print('Error: Chrome store publishing failed -- server error {0}'.format(publish_response.status_code))
|
||||
exit(1)
|
||||
response_dict = publish_response.json();
|
||||
if 'status' not in response_dict or response_dict['status'][0] != 'OK':
|
||||
print('Publishing failed -- server error {0}'.format(response_dict['status']))
|
||||
exit(1)
|
||||
print('Publishing succeeded.')
|
||||
|
||||
print('All done.')
|
326
dist/mv3/firefox/publish-signed-beta.py
vendored
326
dist/mv3/firefox/publish-signed-beta.py
vendored
@@ -1,326 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import datetime
|
||||
import json
|
||||
import jwt
|
||||
import os
|
||||
import re
|
||||
import requests
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import time
|
||||
import zipfile
|
||||
|
||||
from string import Template
|
||||
|
||||
# - Download target (raw) uBlock0.firefox.xpi from GitHub
|
||||
# - This is referred to as "raw" package
|
||||
# - This will fail if not a dev build
|
||||
# - Modify raw package to make it self-hosted
|
||||
# - This is referred to as "unsigned" package
|
||||
# - Ask AMO to sign uBlock0.firefox.xpi
|
||||
# - Generate JWT to be used for communication with server
|
||||
# - Upload unsigned package to AMO
|
||||
# - Wait for a valid download URL for signed package
|
||||
# - Download signed package as uBlock0.firefox.signed.xpi
|
||||
# - This is referred to as "signed" package
|
||||
# - Upload uBlock0.firefox.signed.xpi to GitHub
|
||||
# - Remove uBlock0.firefox.xpi from GitHub
|
||||
# - Modify updates.json to point to new version
|
||||
# - Commit changes to repo
|
||||
|
||||
# Find path to project root
|
||||
projdir = os.path.split(os.path.abspath(__file__))[0]
|
||||
while not os.path.isdir(os.path.join(projdir, '.git')):
|
||||
projdir = os.path.normpath(os.path.join(projdir, '..'))
|
||||
# Check that found project root is valid
|
||||
version_filepath = os.path.join(projdir, 'dist', 'version')
|
||||
if not os.path.isfile(version_filepath):
|
||||
print('Version file not found.')
|
||||
exit(1)
|
||||
|
||||
# We need a version string to work with
|
||||
if len(sys.argv) >= 2 and sys.argv[1]:
|
||||
tag_version = sys.argv[1]
|
||||
else:
|
||||
tag_version = input('Github release version: ')
|
||||
tag_version.strip()
|
||||
match = re.search('^uBOLite_(\d+\.\d+\.\d+.\d+)$', tag_version)
|
||||
if not match:
|
||||
print('Error: Invalid version string.')
|
||||
exit(1)
|
||||
ext_version = match.group(1);
|
||||
|
||||
extension_id = 'uBOLite@raymondhill.net'
|
||||
tmpdir = tempfile.TemporaryDirectory()
|
||||
raw_xpi_filename = tag_version + '.firefox.mv3.xpi'
|
||||
raw_xpi_filepath = os.path.join(tmpdir.name, raw_xpi_filename)
|
||||
unsigned_xpi_filepath = os.path.join(tmpdir.name, 'uBOLite.firefox.unsigned.xpi')
|
||||
signed_xpi_filename = tag_version + '.firefox.signed.mv3.xpi'
|
||||
signed_xpi_filepath = os.path.join(tmpdir.name, signed_xpi_filename)
|
||||
github_owner = 'gorhill'
|
||||
github_repo = 'uBlock'
|
||||
|
||||
# Load/save auth secrets
|
||||
# The tmp directory is excluded from git
|
||||
ubo_secrets = dict()
|
||||
ubo_secrets_filename = os.path.join(projdir, 'tmp', 'ubo_secrets')
|
||||
if os.path.isfile(ubo_secrets_filename):
|
||||
with open(ubo_secrets_filename) as f:
|
||||
ubo_secrets = json.load(f)
|
||||
|
||||
def input_secret(prompt, token):
|
||||
if token in ubo_secrets:
|
||||
prompt += ' ✔'
|
||||
prompt += ': '
|
||||
value = input(prompt).strip()
|
||||
if len(value) == 0:
|
||||
if token not in ubo_secrets:
|
||||
print('Token error:', token)
|
||||
exit(1)
|
||||
value = ubo_secrets[token]
|
||||
elif token not in ubo_secrets or value != ubo_secrets[token]:
|
||||
ubo_secrets[token] = value
|
||||
exists = os.path.isfile(ubo_secrets_filename)
|
||||
with open(ubo_secrets_filename, 'w') as f:
|
||||
json.dump(ubo_secrets, f, indent=2)
|
||||
if not exists:
|
||||
os.chmod(ubo_secrets_filename, 0o600)
|
||||
return value
|
||||
|
||||
# GitHub API token
|
||||
github_token = input_secret('Github token', 'github_token')
|
||||
github_auth = 'token ' + github_token
|
||||
|
||||
#
|
||||
# Get metadata from GitHub about the release
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release
|
||||
print('Downloading release info from GitHub...')
|
||||
release_info_url = 'https://api.github.com/repos/{0}/{1}/releases/tags/{2}'.format(github_owner, github_repo, tag_version)
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.get(release_info_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Release not found: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
release_info = response.json()
|
||||
|
||||
#
|
||||
# Extract URL to raw package from metadata
|
||||
#
|
||||
|
||||
# Find url for uBlock0.firefox.xpi
|
||||
raw_xpi_url = ''
|
||||
for asset in release_info['assets']:
|
||||
if asset['name'] == signed_xpi_filename:
|
||||
print('Error: Found existing signed self-hosted package.')
|
||||
exit(1)
|
||||
if asset['name'] == raw_xpi_filename:
|
||||
raw_xpi_url = asset['url']
|
||||
if len(raw_xpi_url) == 0:
|
||||
print('Error: Release asset URL not found')
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Download raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#get-a-single-release-asset
|
||||
print('Downloading raw xpi package from GitHub...')
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Accept': 'application/octet-stream',
|
||||
}
|
||||
response = requests.get(raw_xpi_url, headers=headers)
|
||||
# Redirections are transparently handled:
|
||||
# http://docs.python-requests.org/en/master/user/quickstart/#redirection-and-history
|
||||
if response.status_code != 200:
|
||||
print('Error: Downloading raw package failed -- server error {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
with open(raw_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
print('Downloaded raw package saved as {0}'.format(raw_xpi_filepath))
|
||||
|
||||
#
|
||||
# Convert the package to a self-hosted one: add `update_url` to the manifest
|
||||
#
|
||||
min_browser_version = '114.0';
|
||||
|
||||
print('Converting raw xpi package into self-hosted xpi package...')
|
||||
with zipfile.ZipFile(raw_xpi_filepath, 'r') as zipin:
|
||||
with zipfile.ZipFile(unsigned_xpi_filepath, 'w') as zipout:
|
||||
for item in zipin.infolist():
|
||||
data = zipin.read(item.filename)
|
||||
if item.filename == 'manifest.json':
|
||||
manifest = json.loads(bytes.decode(data))
|
||||
min_browser_version = manifest['browser_specific_settings']['gecko']['strict_min_version']
|
||||
manifest['browser_specific_settings']['gecko']['update_url'] = 'https://raw.githubusercontent.com/{0}/{1}/master/dist/mv3/firefox/updates.json'.format(github_owner, github_repo)
|
||||
data = json.dumps(manifest, indent=2, separators=(',', ': '), sort_keys=True).encode()
|
||||
zipout.writestr(item, data)
|
||||
|
||||
#
|
||||
# Ask AMO to sign the self-hosted package
|
||||
# - https://developer.mozilla.org/en-US/Add-ons/Distribution#Distributing_your_add-on
|
||||
# - https://pyjwt.readthedocs.io/en/latest/usage.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/auth.html
|
||||
# - https://addons-server.readthedocs.io/en/latest/topics/api/signing.html
|
||||
#
|
||||
|
||||
amo_api_key = ''
|
||||
amo_secret = ''
|
||||
|
||||
def get_jwt_auth():
|
||||
global amo_api_key
|
||||
if amo_api_key == '':
|
||||
amo_api_key = input_secret('AMO API key', 'amo_api_key')
|
||||
global amo_secret
|
||||
if amo_secret == '':
|
||||
amo_secret = input_secret('AMO API secret', 'amo_secret')
|
||||
amo_nonce = os.urandom(8).hex()
|
||||
jwt_payload = {
|
||||
'iss': amo_api_key,
|
||||
'jti': amo_nonce,
|
||||
'iat': datetime.datetime.utcnow(),
|
||||
'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=15),
|
||||
}
|
||||
return 'JWT ' + jwt.encode(jwt_payload, amo_secret)
|
||||
|
||||
print('Ask AMO to sign self-hosted xpi package...')
|
||||
with open(unsigned_xpi_filepath, 'rb') as f:
|
||||
# https://blog.mozilla.org/addons/2019/11/11/security-improvements-in-amo-upload-tools/
|
||||
# "We recommend allowing up to 15 minutes."
|
||||
interval = 60 # check every 60 seconds
|
||||
countdown = 60 * 60 / interval # for at most 60 minutes
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
data = { 'channel': 'unlisted' }
|
||||
files = { 'upload': f, }
|
||||
signing_url = 'https://addons.mozilla.org/api/v4/addons/{0}/versions/{1}/'.format(extension_id, ext_version)
|
||||
print('Submitting package to be signed...')
|
||||
response = requests.put(signing_url, headers=headers, data=data, files=files)
|
||||
if response.status_code != 202:
|
||||
print('Error: Creating new version failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('Request for signing self-hosted xpi package succeeded.')
|
||||
signing_request_response = response.json();
|
||||
f.close()
|
||||
print('Waiting for AMO to process the request to sign the self-hosted xpi package...')
|
||||
# Wait for signed package to be ready
|
||||
signing_check_url = signing_request_response['url']
|
||||
while True:
|
||||
time.sleep(interval)
|
||||
sys.stdout.write('.')
|
||||
sys.stdout.flush()
|
||||
countdown -= 1
|
||||
if countdown <= 0:
|
||||
print('Error: AMO signing timed out')
|
||||
exit(1)
|
||||
headers = { 'Authorization': get_jwt_auth(), }
|
||||
response = requests.get(signing_check_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: AMO signing failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
signing_check_response = response.json()
|
||||
if not signing_check_response['processed']:
|
||||
continue
|
||||
if not signing_check_response['valid']:
|
||||
print('Error: AMO validation failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
if not signing_check_response['files'] or len(signing_check_response['files']) == 0:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['signed']:
|
||||
continue
|
||||
if not signing_check_response['files'][0]['download_url']:
|
||||
print('Error: AMO signing failed')
|
||||
print(response.text)
|
||||
exit(1)
|
||||
print('\r')
|
||||
print('Self-hosted xpi package successfully signed.')
|
||||
download_url = signing_check_response['files'][0]['download_url']
|
||||
print('Downloading signed self-hosted xpi package from {0}...'.format(download_url))
|
||||
response = requests.get(download_url, headers=headers)
|
||||
if response.status_code != 200:
|
||||
print('Error: Download signed package failed -- server error {0}'.format(response.status_code))
|
||||
print(response.text)
|
||||
exit(1)
|
||||
with open(signed_xpi_filepath, 'wb') as f:
|
||||
f.write(response.content)
|
||||
f.close()
|
||||
print('Signed self-hosted xpi package downloaded.')
|
||||
break
|
||||
|
||||
#
|
||||
# Upload signed package to GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#upload-a-release-asset
|
||||
print('Uploading signed self-hosted xpi package to GitHub...')
|
||||
with open(signed_xpi_filepath, 'rb') as f:
|
||||
url = release_info['upload_url'].replace('{?name,label}', '?name=' + signed_xpi_filename)
|
||||
headers = {
|
||||
'Authorization': github_auth,
|
||||
'Content-Type': 'application/zip',
|
||||
}
|
||||
response = requests.post(url, headers=headers, data=f.read())
|
||||
if response.status_code != 201:
|
||||
print('Error: Upload signed package failed -- server error: {0}'.format(response.status_code))
|
||||
exit(1)
|
||||
|
||||
#
|
||||
# Remove raw package from GitHub
|
||||
#
|
||||
|
||||
# https://developer.github.com/v3/repos/releases/#delete-a-release-asset
|
||||
print('Remove raw xpi package from GitHub...')
|
||||
headers = { 'Authorization': github_auth, }
|
||||
response = requests.delete(raw_xpi_url, headers=headers)
|
||||
if response.status_code != 204:
|
||||
print('Error: Deletion of raw package failed -- server error: {0}'.format(response.status_code))
|
||||
|
||||
#
|
||||
# Update updates.json to point to new package -- but only if just-signed
|
||||
# package is higher version than current one.
|
||||
#
|
||||
|
||||
# Be sure we are in sync with potentially modified files on remote
|
||||
r = subprocess.run(['git', 'pull', 'origin', 'master'], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
|
||||
def int_from_version(version):
|
||||
parts = version.split('.')
|
||||
if len(parts) == 3:
|
||||
parts.append('0')
|
||||
return int(parts[0])*10e9 + int(parts[1])*10e6 + int(parts[2])*10e3 + int(parts[3])
|
||||
|
||||
print('Update GitHub to point to newly signed self-hosted xpi package...')
|
||||
updates_json_filepath = os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.json')
|
||||
with open(updates_json_filepath) as f:
|
||||
updates_json = json.load(f)
|
||||
f.close()
|
||||
previous_version = updates_json['addons'][extension_id]['updates'][0]['version']
|
||||
if int_from_version(ext_version) > int_from_version(previous_version):
|
||||
with open(os.path.join(projdir, 'dist', 'mv3', 'firefox', 'updates.template.json')) as f:
|
||||
template_json = Template(f.read())
|
||||
f.close()
|
||||
updates_json = template_json.substitute(ext_version=ext_version, tag_version=tag_version, min_browser_version=min_browser_version)
|
||||
with open(updates_json_filepath, 'w') as f:
|
||||
f.write(updates_json)
|
||||
f.close()
|
||||
# - Stage the changed file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[1] == 'M':
|
||||
subprocess.run(['git', 'add', updates_json_filepath])
|
||||
# - Commit the staged file
|
||||
r = subprocess.run(['git', 'status', '-s', updates_json_filepath], stdout=subprocess.PIPE)
|
||||
rout = bytes.decode(r.stdout).strip()
|
||||
if len(rout) >= 2 and rout[0] == 'M':
|
||||
subprocess.run(['git', 'commit', '-m', 'Make Firefox dev build auto-update', updates_json_filepath])
|
||||
subprocess.run(['git', 'push', 'origin', 'HEAD'])
|
||||
|
||||
print('All done.')
|
13
dist/mv3/firefox/updates.json
vendored
13
dist/mv3/firefox/updates.json
vendored
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBOLite@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.0.23.8125",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "114.0" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/uBOLite_1.0.23.8125/uBOLite_1.0.23.8125.firefox.signed.mv3.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
13
dist/mv3/firefox/updates.template.json
vendored
13
dist/mv3/firefox/updates.template.json
vendored
@@ -1,13 +0,0 @@
|
||||
{
|
||||
"addons": {
|
||||
"uBOLite@raymondhill.net": {
|
||||
"updates": [
|
||||
{
|
||||
"version": "$ext_version",
|
||||
"browser_specific_settings": { "gecko": { "strict_min_version": "$min_browser_version" } },
|
||||
"update_link": "https://github.com/gorhill/uBlock/releases/download/$tag_version/$tag_version.firefox.signed.mv3.xpi"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
2
dist/version
vendored
2
dist/version
vendored
@@ -1 +1 @@
|
||||
1.65.1.7
|
||||
1.66.5.2
|
177
package-lock.json
generated
177
package-lock.json
generated
@@ -11,8 +11,8 @@
|
||||
"devDependencies": {
|
||||
"@eslint/compat": "^1.2.4",
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@eslint/json": "^0.9.0",
|
||||
"eslint": "^9.17.0",
|
||||
"@eslint/json": "^0.13.1",
|
||||
"eslint": "^9.34.0",
|
||||
"eslint-formatter-compact": "^8.40.0",
|
||||
"globals": "^15.14.0"
|
||||
},
|
||||
@@ -22,9 +22,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint-community/eslint-utils": {
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz",
|
||||
"integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==",
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
|
||||
"integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -64,16 +64,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/compat": {
|
||||
"version": "1.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.4.tgz",
|
||||
"integrity": "sha512-S8ZdQj/N69YAtuqFt7653jwcvuUj131+6qGLUyDqfDg1OIoBQ66OCuXC473YQfO2AaxITTutiRQiDwoo7ZLYyg==",
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.2.tgz",
|
||||
"integrity": "sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^9.10.0"
|
||||
"eslint": "^8.40 || 9"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"eslint": {
|
||||
@@ -82,13 +82,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-array": {
|
||||
"version": "0.19.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.1.tgz",
|
||||
"integrity": "sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==",
|
||||
"version": "0.21.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz",
|
||||
"integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/object-schema": "^2.1.5",
|
||||
"@eslint/object-schema": "^2.1.6",
|
||||
"debug": "^4.3.1",
|
||||
"minimatch": "^3.1.2"
|
||||
},
|
||||
@@ -96,10 +96,20 @@
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-helpers": {
|
||||
"version": "0.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.1.tgz",
|
||||
"integrity": "sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/core": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.1.tgz",
|
||||
"integrity": "sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==",
|
||||
"version": "0.15.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.2.tgz",
|
||||
"integrity": "sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -110,9 +120,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/eslintrc": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz",
|
||||
"integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==",
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
|
||||
"integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -147,33 +157,38 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "9.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.17.0.tgz",
|
||||
"integrity": "sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==",
|
||||
"version": "9.34.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.34.0.tgz",
|
||||
"integrity": "sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://eslint.org/donate"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/json": {
|
||||
"version": "0.9.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.9.0.tgz",
|
||||
"integrity": "sha512-PTLD0Kp7+BKhTthodns+hFbuZZ+hjb3lc/iVAg7mtBAnW5hLJhkST9O4m21oMkxG94GR2+GGZQNNurG9KP8pNA==",
|
||||
"version": "0.13.2",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/json/-/json-0.13.2.tgz",
|
||||
"integrity": "sha512-yWLyRE18rHgHXhWigRpiyv1LDPkvWtC6oa7QHXW7YdP6gosJoq7BiLZW2yCs9U7zN7X4U3ZeOJjepA10XAOIMw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/plugin-kit": "^0.2.3",
|
||||
"@humanwhocodes/momoa": "^3.3.4"
|
||||
"@eslint/core": "^0.15.2",
|
||||
"@eslint/plugin-kit": "^0.3.5",
|
||||
"@humanwhocodes/momoa": "^3.3.9",
|
||||
"natural-compare": "^1.4.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/object-schema": {
|
||||
"version": "2.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.5.tgz",
|
||||
"integrity": "sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==",
|
||||
"version": "2.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
|
||||
"integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -181,12 +196,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/plugin-kit": {
|
||||
"version": "0.2.4",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.4.tgz",
|
||||
"integrity": "sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==",
|
||||
"version": "0.3.5",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz",
|
||||
"integrity": "sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@eslint/core": "^0.15.2",
|
||||
"levn": "^0.4.1"
|
||||
},
|
||||
"engines": {
|
||||
@@ -246,9 +262,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/momoa": {
|
||||
"version": "3.3.6",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.6.tgz",
|
||||
"integrity": "sha512-7/sAGm3YsT6xG1bDkTSHvOpQB+cR4I2InfMVw110nuOCrxZvOQHgRqBMxSoTeUQrk9RS4OU9Aw2MBMZVJgLZMg==",
|
||||
"version": "3.3.9",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.9.tgz",
|
||||
"integrity": "sha512-LHw6Op4bJb3/3KZgOgwflJx5zY9XOy0NU1NuyUFKGdTwHYmP+PbnQGCYQJ8NVNlulLfQish34b0VuUlLYP3AXA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -256,9 +272,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/retry": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz",
|
||||
"integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==",
|
||||
"version": "0.4.3",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
|
||||
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -270,9 +286,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@types/estree": {
|
||||
"version": "1.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
|
||||
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
|
||||
"integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
@@ -284,9 +300,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.14.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
|
||||
"integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
@@ -434,9 +450,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/debug": {
|
||||
"version": "4.4.0",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
|
||||
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
|
||||
"version": "4.4.1",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
||||
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -472,22 +488,23 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "9.17.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.17.0.tgz",
|
||||
"integrity": "sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==",
|
||||
"version": "9.34.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.34.0.tgz",
|
||||
"integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
"@eslint/config-array": "^0.19.0",
|
||||
"@eslint/core": "^0.9.0",
|
||||
"@eslint/eslintrc": "^3.2.0",
|
||||
"@eslint/js": "9.17.0",
|
||||
"@eslint/plugin-kit": "^0.2.3",
|
||||
"@eslint/config-array": "^0.21.0",
|
||||
"@eslint/config-helpers": "^0.3.1",
|
||||
"@eslint/core": "^0.15.2",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "9.34.0",
|
||||
"@eslint/plugin-kit": "^0.3.5",
|
||||
"@humanfs/node": "^0.16.6",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@humanwhocodes/retry": "^0.4.1",
|
||||
"@humanwhocodes/retry": "^0.4.2",
|
||||
"@types/estree": "^1.0.6",
|
||||
"@types/json-schema": "^7.0.15",
|
||||
"ajv": "^6.12.4",
|
||||
@@ -495,9 +512,9 @@
|
||||
"cross-spawn": "^7.0.6",
|
||||
"debug": "^4.3.2",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"eslint-scope": "^8.2.0",
|
||||
"eslint-visitor-keys": "^4.2.0",
|
||||
"espree": "^10.3.0",
|
||||
"eslint-scope": "^8.4.0",
|
||||
"eslint-visitor-keys": "^4.2.1",
|
||||
"espree": "^10.4.0",
|
||||
"esquery": "^1.5.0",
|
||||
"esutils": "^2.0.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
@@ -542,9 +559,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-scope": {
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz",
|
||||
"integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==",
|
||||
"version": "8.4.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
|
||||
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
@@ -559,9 +576,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-visitor-keys": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
|
||||
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
|
||||
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -572,15 +589,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/espree": {
|
||||
"version": "10.3.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
|
||||
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
|
||||
"version": "10.4.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
|
||||
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"acorn": "^8.14.0",
|
||||
"acorn": "^8.15.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
"eslint-visitor-keys": "^4.2.0"
|
||||
"eslint-visitor-keys": "^4.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -701,9 +718,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/flatted": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz",
|
||||
"integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==",
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
|
||||
"integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
@@ -721,9 +738,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/globals": {
|
||||
"version": "15.14.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz",
|
||||
"integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==",
|
||||
"version": "15.15.0",
|
||||
"resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz",
|
||||
"integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -754,9 +771,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/import-fresh": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
|
||||
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
|
||||
"integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
@@ -2,6 +2,7 @@
|
||||
"name": "uBlock",
|
||||
"version": "1.0.0",
|
||||
"description": "npm dev tools",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"lint": "eslint --no-warn-ignored --ignore-pattern \"**/lib/\" --ignore-pattern \"**/npm/\" -- \"./src/js/*.js\" \"./src/js/**/*.js\" \"./**/*.json\" \"./platform/**/*.js\"",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
@@ -21,10 +22,10 @@
|
||||
"npm": ">=11"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^9.17.0",
|
||||
"@eslint/compat": "^1.2.4",
|
||||
"@eslint/js": "^9.17.0",
|
||||
"@eslint/json": "^0.9.0",
|
||||
"@eslint/json": "^0.13.1",
|
||||
"eslint": "^9.34.0",
|
||||
"eslint-formatter-compact": "^8.40.0",
|
||||
"globals": "^15.14.0"
|
||||
}
|
||||
|
@@ -48,7 +48,7 @@ vAPI.supportsUserStylesheets = vAPI.webextFlavor.soup.has('user_stylesheet');
|
||||
vAPI.app = {
|
||||
name: manifest.name.replace(/ dev\w+ build/, ''),
|
||||
version: (( ) => {
|
||||
let version = manifest.version;
|
||||
let version = manifest.version_name || manifest.version;
|
||||
const match = /(\d+\.\d+\.\d+)(?:\.(\d+))?/.exec(version);
|
||||
if ( match && match[2] ) {
|
||||
const v = parseInt(match[2], 10);
|
||||
|
@@ -166,7 +166,9 @@ vAPI.webextFlavor = {
|
||||
soup.add('ipaddress');
|
||||
|
||||
// Whether this is a dev build.
|
||||
if ( /^\d+\.\d+\.\d+\D/.test(browser.runtime.getManifest().version) ) {
|
||||
const manifest = browser.runtime.getManifest();
|
||||
const version = manifest.version_name || manifest.version;
|
||||
if ( /^\d+\.\d+\.\d+\D/.test(version) ) {
|
||||
soup.add('devbuild');
|
||||
}
|
||||
|
||||
@@ -178,8 +180,11 @@ vAPI.webextFlavor = {
|
||||
soup.add('native_css_has');
|
||||
}
|
||||
|
||||
const extensionOrigin = browser.runtime.getURL('');
|
||||
|
||||
// Order of tests is important
|
||||
if ( browser.runtime.getURL('').startsWith('moz-extension://') ) {
|
||||
flavor.isGecko = extensionOrigin.startsWith('moz-extension://');
|
||||
if ( flavor.isGecko ) {
|
||||
soup.add('firefox')
|
||||
.add('user_stylesheet')
|
||||
.add('html_filtering');
|
||||
|
@@ -21,7 +21,7 @@ Upon completion of the script, the resulting extension package will become prese
|
||||
|
||||
The folder `dist/build/mv3-data` will cache data fetched from remote servers, so as to avoid fetching repeatedly from remote servers with repeated build commands. Use `make cleanassets` to remove all locally cached filter lists if you want to build with latest versions of filter lists.
|
||||
|
||||
The file `dist/build/mv3-data/log.txt` will contain information about what happened during the build process.
|
||||
The file `dist/build/uBOLite.[platform]/log.txt` will contain information about what happened during the build process.
|
||||
|
||||
The entry in the `Makefile` which implement the build process is `tools/make-mv3.sh [platform]`.[1] This Bash script copy various files from uBlock Origin branch and MV3-specific branch into a single folder which will be the final extension package.
|
||||
|
||||
|
@@ -29,6 +29,7 @@
|
||||
"host_permissions": [
|
||||
"<all_urls>"
|
||||
],
|
||||
"incognito": "split",
|
||||
"icons": {
|
||||
"16": "img/icon_16.png",
|
||||
"32": "img/icon_32.png",
|
||||
|
@@ -1,12 +1,12 @@
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
uBO Lite (uBOL) je blokator sadržaja baziran na MV3.
|
||||
|
||||
Zadani skup pravila odgovara zadanom skupu filtera uBlock Origin:
|
||||
|
||||
- UBlock Origin ugrađene liste filtera
|
||||
- EasyList
|
||||
- EasyPrivacy
|
||||
- Oglas Peter Lowe i lista servera za praćenje
|
||||
- Peter Lowe-ova lista servera za oglase i praćenje
|
||||
|
||||
You can enable more rulesets by visiting the options page -- click the _Cogs_ icon in the popup panel.
|
||||
Možete omogućiti više skupova pravila posjetom stranice s opcijama -- kliknite na ikonu _Cogs_ u skočnom panelu.
|
||||
|
||||
uBOL je potpuno deklarativno, što znači da nema potrebe za trajnim uBOL procesom da bi se filtriranje dogodilo, a filtriranje sadržaja zasnovano na CSS/JS injekcijama se pouzdano izvodi od strane samog pretraživača, a ne ekstenzije. To znači da sam uBOL ne troši CPU/memorijske resurse dok je blokiranje sadržaja u toku -- proces uBOL-a servisnog radnika je potreban _samo_ kada stupite u interakciju sa iskačućim panelom ili stranicama sa opcijama.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
uBO Lite (uBOL) is an MV3-based content blocker.
|
||||
uBO Lite (uBOL) הוא חוסם תוכן מבוסס MV3.
|
||||
|
||||
ערכת הכללים ברירת מחדל שמתכתבת עם ערכת המסננים של uBlock Origin:
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
A uBO Lite (uBOL) egy *engedélyt nem igénylő* MV3-alapú tartalomblokkoló.
|
||||
A uBO Lite (uBOL) egy MV3-alapú tartalomblokkoló.
|
||||
|
||||
Az alapértelmezett szabálykészlet megfelel a uBlock Origin alapértelmezett szűrőkészletének:
|
||||
|
||||
|
@@ -4,11 +4,11 @@
|
||||
"description": "extension name."
|
||||
},
|
||||
"extShortDesc": {
|
||||
"message": "أداة لحظر المحتوى دون إذن. يحظر الإعلانات وأدوات التتبع وأدوات التعدين وغيرها فور التثبيت.",
|
||||
"message": "أداة فعالة لحجب المحتوى. تحجب الإعلانات والمتتبعين والمعدنين وغير ذلك فور تثبيتها.",
|
||||
"description": "this will be in the Chrome web store: must be 132 characters or less"
|
||||
},
|
||||
"perRulesetStats": {
|
||||
"message": "{{ruleCount}} قواعد، محولة من {{filterCount}} مرشحات الشبكة",
|
||||
"message": "{{ruleCount}} قواعد، محولة من {{filterCount}} فلاتر الشبكة",
|
||||
"description": "Appears aside each filter list in the _3rd-party filters_ pane"
|
||||
},
|
||||
"dashboardName": {
|
||||
@@ -19,6 +19,10 @@
|
||||
"message": "الإعدادات",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "فلاتر مخصصة",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "تطوير",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "نطاقات البرامج الضارة",
|
||||
"message": "الحماية من البرامج الضارة، الأمان",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,12 +87,20 @@
|
||||
"message": "المناطق واللغات",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "استيراد / تصدير",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "الصق هنا فلاتر تجميلية محددة لإضافتها",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "سجل التغييرات",
|
||||
"description": ""
|
||||
},
|
||||
"aboutCode": {
|
||||
"message": "شفرة المصدر (GPLv3)",
|
||||
"message": "كود المصدر (GPLv3)",
|
||||
"description": "English: Source code (GPLv3)"
|
||||
},
|
||||
"aboutContributors": {
|
||||
@@ -96,7 +108,7 @@
|
||||
"description": "English: Contributors"
|
||||
},
|
||||
"aboutSourceCode": {
|
||||
"message": "شيفرة المصدر",
|
||||
"message": "كود المصدر",
|
||||
"description": "Link text to source code repo"
|
||||
},
|
||||
"aboutTranslations": {
|
||||
@@ -104,7 +116,7 @@
|
||||
"description": "Link text to translations repo"
|
||||
},
|
||||
"aboutFilterLists": {
|
||||
"message": "قوائم التصفية",
|
||||
"message": "قوائم الفلاتر",
|
||||
"description": "Link text to uBO's own filter lists repo"
|
||||
},
|
||||
"aboutDependencies": {
|
||||
@@ -112,11 +124,11 @@
|
||||
"description": "Shown in the About pane"
|
||||
},
|
||||
"supportS6H": {
|
||||
"message": "الإبلاغ عن مشكلة في عوامل التصفية",
|
||||
"message": "الإبلاغ عن مشكلة في الفلاتر",
|
||||
"description": "Header of 'Report a filter issue' section in Support pane"
|
||||
},
|
||||
"supportS3P1": {
|
||||
"message": "الإبلاغ عن مشكلات الفلترة الخاصة بمواقع الويب المحددة إلى<span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">uBlockOrigin/uAssets</code></span>متتبع المشكلة</span>يتطلب حساب GitHub</u>",
|
||||
"message": "الإبلاغ عن مشكلات التصفية الخاصة بمواقع الويب المحددة إلى<span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\">uBlockOrigin/uAssets</code></span>متتبع المشكلة</span>يتطلب حساب GitHub</u>",
|
||||
"description": "First paragraph of 'Filter issues' section in Support pane"
|
||||
},
|
||||
"supportS5H": {
|
||||
@@ -132,11 +144,11 @@
|
||||
"description": "A clickable link in the filter issue reporter section"
|
||||
},
|
||||
"supportS6URL": {
|
||||
"message": "عنوان صفحة الويب",
|
||||
"message": "عنوان صفحة الويب:",
|
||||
"description": "Label for the URL of the page"
|
||||
},
|
||||
"supportS6Select1": {
|
||||
"message": "صفحة الويب...",
|
||||
"message": "صفحة الويب…",
|
||||
"description": "Label for widget to select type of issue"
|
||||
},
|
||||
"supportS6Select1Option0": {
|
||||
@@ -148,7 +160,7 @@
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option2": {
|
||||
"message": "يحتوي على تراكبات أو إزعاجات أخرى.",
|
||||
"message": "يحتوي على تراكبات أو إزعاجات أخرى",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option3": {
|
||||
@@ -160,15 +172,15 @@
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option5": {
|
||||
"message": "تعطل عند تفعيل uBO Lite.",
|
||||
"message": "تعطل عند تفعيل uBO Lite",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option6": {
|
||||
"message": "يفتح علامات تبويب أو نوافذ غير مرغوب فيها.",
|
||||
"message": "يفتح علامات تبويب أو نوافذ غير مرغوب فيها",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option7": {
|
||||
"message": "يؤدي إلى البرامج الضارة والإحتيال",
|
||||
"message": "يؤدي إلى برامج ضارة وتصيد احتيالي",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Checkbox1": {
|
||||
@@ -176,7 +188,7 @@
|
||||
"description": "A checkbox to use for NSFW sites"
|
||||
},
|
||||
"supportReportSpecificButton": {
|
||||
"message": "إنشاء تقرير جديد",
|
||||
"message": "إنشاء تقرير جديد علي GitHub",
|
||||
"description": "Text for button which open an external webpage in Support pane"
|
||||
},
|
||||
"defaultFilteringModeSectionLabel": {
|
||||
@@ -184,7 +196,7 @@
|
||||
"description": "The header text for the default filtering mode section"
|
||||
},
|
||||
"defaultFilteringModeDescription": {
|
||||
"message": "سيتم تجاوز وضع التصفية الافتراضي بواسطة أوضاع التصفية لكل موقع ويب. يمكنك ضبط وضع التصفية على أي موقع ويب معين وفقًا للوضع الذي يعمل بشكل أفضل على موقع الويب هذا. كل وضع له مزاياه وعيوبه.",
|
||||
"message": "سيتم تجاوز وضع التصفية الافتراضي بواسطة أوضاع التصفية الخاصة بكل موقع ويب. يمكنك ضبط وضع التصفية على أي موقع ويب وفقًا للوضع الذي يعمل بشكل أفضل على ذلك الموقع. لكل وضع مزاياه وعيوبه.",
|
||||
"description": "This describes the default filtering mode setting"
|
||||
},
|
||||
"filteringMode0Name": {
|
||||
@@ -216,11 +228,11 @@
|
||||
"description": "This describes the 'complete' filtering mode"
|
||||
},
|
||||
"noFilteringModeDescription": {
|
||||
"message": "قائمة بأسماء المضيفين التي لن تتم أي تصفية لها",
|
||||
"message": "قائمة المواقع الإلكترونية التي لن يتم تصفية محتواها.",
|
||||
"description": "A short description for the editable field which lists trusted sites"
|
||||
},
|
||||
"noFilteringModePlaceholder": {
|
||||
"message": "[أسماء النطاقات الرئيسية فقط]\nexample.com\ngames.example",
|
||||
"message": "[أسماء النطاقات الرئيسية فقط]\nexample.com\ngames.example\n...",
|
||||
"description": "Default text for in edit field"
|
||||
},
|
||||
"behaviorSectionLabel": {
|
||||
@@ -240,7 +252,7 @@
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"enableStrictBlockLegend": {
|
||||
"message": "سيتم حظر التنقل إلى المواقع غير المرغوب فيها، وسيتم تقديم خيار لك للمتابعة.",
|
||||
"message": "سيتم حظر الانتقال إلى المواقع غير المرغوب فيها، وسيُعرض عليك خيار المتابعة.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLabel": {
|
||||
@@ -248,9 +260,21 @@
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "يمكن الوصول إلى الميزات المناسبة للمستخدمين التقنيين.",
|
||||
"message": "يتيح الوصول إلى الميزات المناسبة للمستخدمين التقنيين.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "النسخ الاحتياطي",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "قم بنسخ الإعدادات المخصصة احتياطيًا إلى ملف، أو استعادة الإعدادات المخصصة من ملف.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "ستؤدي عملية الاستعادة إلى استبدال جميع إعداداتك المخصصة الحالية.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "البحث عن القوائم",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -292,11 +316,11 @@
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "دخول وضع تحديد العناصر السريع",
|
||||
"message": "إزالة عنصر",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
"message": "الخروج من وضع تحديد العناصر السريع",
|
||||
"message": "خروج من وضع مزيل العناصر",
|
||||
"description": "Tooltip for the button used to exit zapper mode"
|
||||
},
|
||||
"pickerTipEnter": {
|
||||
@@ -339,14 +363,26 @@
|
||||
"message": "إرجاع",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "أضِف",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "استيراد واضافة…",
|
||||
"message": "استيراد وإلحاق…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
},
|
||||
"exportButton": {
|
||||
"message": "تصدير...",
|
||||
"message": "تصدير…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "نسخ احتياطي…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "استعادة…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "لا تضف محتوى من مصادر غير موثوقة",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Tənzimləmələr",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Bölgələr, dillər",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Dəyişikliklər siyahısı",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Налады",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Уласныя фільтры",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Распрацоўка",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Рэгіёны, мовы",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Імпартаваць/экспартаваць",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Журнал змяненняў",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Забяспечвае доступ да функцый, прыдатным для тэхнічных карыстальнікаў.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Знайсці спісы",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Вярнуць",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Дадаць",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Імпартаваць ды дадаць…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Экспартаваць…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Не дадавайце кантэнт з ненадзейных крыніц",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Настройки",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Персонализирани филтри",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Разработка",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Региони, езици",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Импортиране / експортиране",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Поставете тук конкретни козметични филтри, които искате да добавите",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Списък с промени",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Активиране на достъпа до функции, подходящи за технически потребители.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Архивиране",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Архивирайте персонализираните си настройки във файл или ги възстановете от файл.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Възстановяването ще презапише всичките ви текущи персонализирани настройки.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Намиране на списъци",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Връщане",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Добавяне",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Импортиране и добавяне…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Експортиране…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Архивиране…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Възстановяване…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Не добавяйте съдържание от ненадеждни източници",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "সেটিংস",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "অঞ্চল, ভাষা",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "পরিবর্তনসূচি",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "প্রযুক্তিগত ব্যবহারকারীদের জন্য উপযুক্ত বৈশিষ্ট্যগুলিতে অ্যাক্সেস সক্ষম করুন",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "তালিকা খুঁজো",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Arventennoù",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Siloù personelaet",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Diorren",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Malware protection, security",
|
||||
"message": "Gwarez a-enep ar malware ha surentez",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Rannvroioù, broioù",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Enporzhiañ / Ezporzhiañ",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Eilañ amañ ar siloù kenedel resis da ouzhpennañ",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Deizlevr ar cheñchamantoù",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Gweredekaat a ra ar fonksionelezhioù azasaet d'an implijerien deknikel.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Gwared",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Kavout rolloù",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Nullañ",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Ouzhpennañ",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Enporzhiañ hag ouzhpennañ",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Ezporzhiañ",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Gwarediñ…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Arabat ouzhpennañ danvez a zeu diouzh mammennoù douetus.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,8 +19,12 @@
|
||||
"message": "Postavke",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"message": "Razvoj",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
},
|
||||
"aboutPageName": {
|
||||
@@ -36,11 +40,11 @@
|
||||
"description": "Label in the popup panel for the current filtering mode"
|
||||
},
|
||||
"popupLocalToolsLabel": {
|
||||
"message": "On this website",
|
||||
"message": "Na ovoj web stranici",
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
"message": "Report an issue",
|
||||
"message": "Prijavi problem",
|
||||
"description": "Tooltip used for the 'chat' icon in the panel"
|
||||
},
|
||||
"popupTipDashboard": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regije, jezici",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Dnevnik izmjena",
|
||||
"description": ""
|
||||
@@ -112,71 +124,71 @@
|
||||
"description": "Shown in the About pane"
|
||||
},
|
||||
"supportS6H": {
|
||||
"message": "Report a filter issue",
|
||||
"message": "Prijavi problem s filterom",
|
||||
"description": "Header of 'Report a filter issue' section in Support pane"
|
||||
},
|
||||
"supportS3P1": {
|
||||
"message": "Report filter issues with specific websites to the <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> issue tracker</span>. <u>Requires a GitHub account.</u>",
|
||||
"message": "Prijavite probleme s filterima na određenim web stranicama <span data-url=\"https://github.com/uBlockOrigin/uAssets/issues?q=is%3Aissue\"><code>uBlockOrigin/uAssets</code> sistemu za praćenje problema</span> . <u>Potreban je GitHub račun.</u>",
|
||||
"description": "First paragraph of 'Filter issues' section in Support pane"
|
||||
},
|
||||
"supportS5H": {
|
||||
"message": "Troubleshooting information",
|
||||
"message": "Informacije o rješavanju problema",
|
||||
"description": "Label of 'Troubleshooting information' section in 'Report a filter issue' page"
|
||||
},
|
||||
"supportS6P1S1": {
|
||||
"message": "To avoid burdening volunteers with duplicate reports, please verify that the issue has not already been reported. <b>Note:</b> clicking the button will cause the page's origin to be sent to GitHub.",
|
||||
"message": "Kako biste izbjegli opterećivanje volontera duplim prijavama, molimo vas da provjerite da problem već nije prijavljen. <b>Napomena:</b> klikom na dugme, porijeklo stranice će biti poslano GitHubu.",
|
||||
"description": "A paragraph in the filter issue reporter section"
|
||||
},
|
||||
"supportFindSpecificButton": {
|
||||
"message": "Find similar reports on GitHub",
|
||||
"message": "Pronađite slične izvještaje na GitHubu",
|
||||
"description": "A clickable link in the filter issue reporter section"
|
||||
},
|
||||
"supportS6URL": {
|
||||
"message": "Address of the webpage:",
|
||||
"message": "Adresa web stranice:",
|
||||
"description": "Label for the URL of the page"
|
||||
},
|
||||
"supportS6Select1": {
|
||||
"message": "The webpage…",
|
||||
"message": "Web stranica…",
|
||||
"description": "Label for widget to select type of issue"
|
||||
},
|
||||
"supportS6Select1Option0": {
|
||||
"message": "-- Pick an entry --",
|
||||
"message": "-- Odaberite unos --",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option1": {
|
||||
"message": "Shows ads or ad leftovers",
|
||||
"message": "Prikazuje oglase ili ostatke oglasa",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option2": {
|
||||
"message": "Has overlays or other nuisances",
|
||||
"message": "Ima prekrivajuće slojeve ili druge smetnje",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option3": {
|
||||
"message": "Detects uBO Lite",
|
||||
"message": "Detektira uBO Lite",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option4": {
|
||||
"message": "Has privacy-related issues",
|
||||
"message": "Ima problema s privatnošću",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option5": {
|
||||
"message": "Malfunctions when uBO Lite is enabled",
|
||||
"message": "Kvarovi kada je uBO Lite omogućen",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option6": {
|
||||
"message": "Opens unwanted tabs or windows",
|
||||
"message": "Otvara neželjene kartice ili prozore",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Select1Option7": {
|
||||
"message": "Leads to badware, phishing",
|
||||
"message": "Vodi do zlonamjernog softvera i phishinga",
|
||||
"description": "An entry in the widget used to select the type of issue"
|
||||
},
|
||||
"supportS6Checkbox1": {
|
||||
"message": "Label the webpage as “NSFW” (<a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">“Not Safe For Work”</a>)",
|
||||
"message": "Označite web stranicu kao \"NSFW\" ( <a href=\"https://wikipedia.org/wiki/Not_safe_for_work\">\"Nije sigurno za rad\"</a> )",
|
||||
"description": "A checkbox to use for NSFW sites"
|
||||
},
|
||||
"supportReportSpecificButton": {
|
||||
"message": "Create new report on GitHub",
|
||||
"message": "Kreiraj novi izvještaj na GitHubu",
|
||||
"description": "Text for button which open an external webpage in Support pane"
|
||||
},
|
||||
"defaultFilteringModeSectionLabel": {
|
||||
@@ -204,7 +216,7 @@
|
||||
"description": "Name of blocking mode 3"
|
||||
},
|
||||
"basicFilteringModeDescription": {
|
||||
"message": " Osnovno mrežno filtriranje sa odabranih lista filtera.\n\nNe zahtijeva dozvolu za čitanje i modificiranje podataka na web stranicama.",
|
||||
"message": "Osnovno filtriranje mreže iz odabranih lista filtera.\n\nNe zahtijeva dozvolu za čitanje i izmjenu podataka na web stranicama.",
|
||||
"description": "This describes the 'basic' filtering mode"
|
||||
},
|
||||
"optimalFilteringModeDescription": {
|
||||
@@ -216,11 +228,11 @@
|
||||
"description": "This describes the 'complete' filtering mode"
|
||||
},
|
||||
"noFilteringModeDescription": {
|
||||
"message": "Lista imena hostova za koja se neće vršiti filtriranje",
|
||||
"message": "Lista web stranica za koje se neće vršiti filtriranje.",
|
||||
"description": "A short description for the editable field which lists trusted sites"
|
||||
},
|
||||
"noFilteringModePlaceholder": {
|
||||
"message": "[hostnames only]\nexample.com\ngames.example\n...",
|
||||
"message": "[samo imena hostova]\nexample.com\ngames.example\n...",
|
||||
"description": "Default text for in edit field"
|
||||
},
|
||||
"behaviorSectionLabel": {
|
||||
@@ -236,143 +248,167 @@
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"enableStrictBlockLabel": {
|
||||
"message": "Enable strict blocking",
|
||||
"message": "Omogući strogo blokiranje",
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"enableStrictBlockLegend": {
|
||||
"message": "Navigation to potentially undesirable sites will be blocked, and you will be offered the option to proceed.",
|
||||
"message": "Navigacija do potencijalno neželjenih stranica bit će blokirana i bit će vam ponuđena mogućnost da nastavite.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLabel": {
|
||||
"message": "Developer mode",
|
||||
"message": "Režim za razvojne programere",
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"message": "Omogućava pristup funkcijama pogodnim za tehničke korisnike.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"message": "Pronađi liste",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
},
|
||||
"strictblockTitle": {
|
||||
"message": "Page blocked",
|
||||
"message": "Stranica je blokirana",
|
||||
"description": "Webpage title for the strict-blocked page"
|
||||
},
|
||||
"strictblockSentence1": {
|
||||
"message": "uBO Lite has prevented the following page from loading:",
|
||||
"message": "uBO Lite je spriječio učitavanje sljedeće stranice:",
|
||||
"description": "Sentence used in the strict-blocked page"
|
||||
},
|
||||
"strictblockReasonSentence1": {
|
||||
"message": "The page was blocked because of a matching filter in {{listname}}.",
|
||||
"message": "Stranica je blokirana zbog odgovarajućeg filtera u {{listname}}.",
|
||||
"description": "Text informing about what is causing the page to be blocked"
|
||||
},
|
||||
"strictblockRedirectSentence1": {
|
||||
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
|
||||
"message": "Blokirana stranica želi preusmjeriti na drugu stranicu. Ako odlučite nastaviti, bit ćete direktno na: {{url}}",
|
||||
"description": "Text warning about an incoming redirect"
|
||||
},
|
||||
"strictblockNoParamsPrompt": {
|
||||
"message": "without parameters",
|
||||
"message": "bez parametara",
|
||||
"description": "Label to be used for the parameter-less URL"
|
||||
},
|
||||
"strictblockBack": {
|
||||
"message": "Go back",
|
||||
"message": "Nazad",
|
||||
"description": "A button to go back to the previous webpage"
|
||||
},
|
||||
"strictblockClose": {
|
||||
"message": "Close this window",
|
||||
"message": "Zatvori ovaj prozor",
|
||||
"description": "A button to close the current tab"
|
||||
},
|
||||
"strictblockDontWarn": {
|
||||
"message": "Don't warn me again about this site",
|
||||
"message": "Ne upozoravaj me više o ovoj stranici",
|
||||
"description": "Label for checkbox in document-blocked page"
|
||||
},
|
||||
"strictblockProceed": {
|
||||
"message": "Proceed",
|
||||
"message": "Nastavite",
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "Remove an element",
|
||||
"message": "Ukloni element",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
"message": "Exit element zapper mode",
|
||||
"message": "Izlaz iz načina rada za zatvaranje elemenata",
|
||||
"description": "Tooltip for the button used to exit zapper mode"
|
||||
},
|
||||
"pickerTipEnter": {
|
||||
"message": "Create a custom filter",
|
||||
"message": "Kreirajte prilagođeni filter",
|
||||
"description": "Label for the menu entry to create cosmetic filters"
|
||||
},
|
||||
"unpickerTipEnter": {
|
||||
"message": "Remove a custom filter",
|
||||
"message": "Uklonite prilagođeni filter",
|
||||
"description": "Label for the menu entry to delete cosmetic filters"
|
||||
},
|
||||
"developDropdownLabel": {
|
||||
"message": "View:",
|
||||
"message": "Prikaz:",
|
||||
"description": "A label of a dropdown list"
|
||||
},
|
||||
"developOptionFilteringModeDetails": {
|
||||
"message": "Filtering mode details",
|
||||
"message": "Detalji načina filtriranja",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionCustomDnrRules": {
|
||||
"message": "Custom DNR rules",
|
||||
"message": "Prilagođena pravila DNR-a",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionDnrRulesOf": {
|
||||
"message": "DNR rules of …",
|
||||
"message": "DNR pravila …",
|
||||
"description": "A section header in a dropdown list"
|
||||
},
|
||||
"developOptionDynamicRuleset": {
|
||||
"message": "Dynamic ruleset",
|
||||
"message": "Dinamički skup pravila",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionSessionRuleset": {
|
||||
"message": "Session ruleset",
|
||||
"message": "Skup pravila sesije",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"saveButton": {
|
||||
"message": "Save",
|
||||
"message": "Sačuvaj",
|
||||
"description": "Text for buttons used to save changes"
|
||||
},
|
||||
"revertButton": {
|
||||
"message": "Revert",
|
||||
"message": "Vrati",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"message": "Uvezi i dodaj…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
},
|
||||
"exportButton": {
|
||||
"message": "Export…",
|
||||
"message": "Izvoz…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"message": "Ne dodavajte sadržaj iz nepouzdanih izvora",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
},
|
||||
"dnrRulesCountInfo": {
|
||||
"message": "Number of registered rules: {count}",
|
||||
"message": "Broj registrovanih pravila: {count}",
|
||||
"description": "Short sentence to report the number of currently registered DNR rules"
|
||||
},
|
||||
"pickerSliderLabel": {
|
||||
"message": "Move the slider to select the best match",
|
||||
"message": "Pomaknite klizač da biste odabrali najbolje podudaranje",
|
||||
"description": "Label to describe the purpose of the slider"
|
||||
},
|
||||
"pickerPick": {
|
||||
"message": "Pick",
|
||||
"message": "Odaberite",
|
||||
"description": "Text for the button to re-enter element-picking mode"
|
||||
},
|
||||
"pickerPreview": {
|
||||
"message": "Preview",
|
||||
"message": "Pregled",
|
||||
"description": "Text for the button to activate preview mode"
|
||||
},
|
||||
"pickerCreate": {
|
||||
"message": "Create",
|
||||
"message": "Napravi",
|
||||
"description": "Text for the button to create the filter"
|
||||
},
|
||||
"unpickerUsage": {
|
||||
"message": "Select a filter below to highlight matching elements in the webpage. Click the trash can to remove a filter.",
|
||||
"message": "Odaberite filter ispod da biste istaknuli odgovarajuće elemente na web stranici. Kliknite na kantu za smeće da biste uklonili filter.",
|
||||
"description": "Summary description on how to use the tool to remove custom filters"
|
||||
}
|
||||
}
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Configuració",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtres personalitzats",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Desenvolupament",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, llengües",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importa/Exporta",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Enganxeu aquí els filtres cosmètics que voleu afegir",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Registre de canvis",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Habilita l'accés a funcions adequades per a usuaris tècnics.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Còpia de seguretat / Restaura",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Feu una còpia de seguretat de la vostra configuració personalitzada a un fitxer o restaureu la vostra configuració personalitzada des d'un fitxer.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "La restauració sobreescriurà tots els paràmetres personalitzats actuals.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Cerca llistes",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Restaura",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Afegeix",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importa i annexa…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exporta…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Còpia de seguretat…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restaura…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "No afegiu contingut de fonts no fiables",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Nastavení",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Vlastní filtry",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Vývoj",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regionální, jazykové",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Vložte sem konkrétní kosmetické filtry, které chcete přidat",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Přehled změn",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Umožňuje přístup k funkcím vhodným pro technicky zdatné uživatele.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Záloha",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Zálohování vlastních nastavení do souboru nebo obnovení vlastních nastavení ze souboru.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Obnovení přepíše všechna vaše aktuální vlastní nastavení.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Najít seznamy",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Vrátit",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Přidat",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importovat a připojit…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportovat…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Zálohovat…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Obnovit…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Nepřidávat filtry z nedůvěryhodných zdrojů",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Gosodiadau",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Datblygu",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -36,7 +40,7 @@
|
||||
"description": "Label in the popup panel for the current filtering mode"
|
||||
},
|
||||
"popupLocalToolsLabel": {
|
||||
"message": "On this website",
|
||||
"message": "Ar y wefan hon",
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Rhanbarthau, ieithoedd",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Cofnod newidiadau",
|
||||
"description": ""
|
||||
@@ -244,13 +256,25 @@
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLabel": {
|
||||
"message": "Developer mode",
|
||||
"message": "Modd datblygwr",
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -336,17 +360,29 @@
|
||||
"description": "Text for buttons used to save changes"
|
||||
},
|
||||
"revertButton": {
|
||||
"message": "Revert",
|
||||
"message": "Dychwelwch",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Ychwanegwch",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
},
|
||||
"exportButton": {
|
||||
"message": "Export…",
|
||||
"message": "Allforio",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Indstillinger",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Tilpassede filtre",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Udvikl",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -40,7 +44,7 @@
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
"message": "Anmeld et problem på dette websted",
|
||||
"message": "Anmeld et problem",
|
||||
"description": "Tooltip used for the 'chat' icon in the panel"
|
||||
},
|
||||
"popupTipDashboard": {
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Malware-domæner",
|
||||
"message": "Malware-beskyttelse, sikkerhed",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regioner, sprog",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import/ Eksport",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Indsæt bestemte kosmetiske filtre hér for at tilføje",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Ændringslog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Aktiverer adgang til funktioner egnede for tekniske brugere.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Sikkerhedskopiér",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Sikkerhedskopiér tilpassede indstillinger til en fil, eller gendan tilpassede indstillinger fra en fil.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Gendannelse overskriver alle nuværende tilpassede indstillinger.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lister",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -292,7 +316,7 @@
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "Gå til elementdræbertilstand",
|
||||
"message": "Fjern et element",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Tilbagefør",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Tilføj",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importér og tilføj…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Eksportér…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Sikkerhedskopiér…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Gendan…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Tilføj ikke indhold fra ikke-betroede kilder.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Einstellungen",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Eigene Filter",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Entwickeln",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regionen, Sprachen",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importieren und exportieren",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Kosmetische Filter zum Hinzufügen einfügen",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Änderungsprotokoll",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Ermöglicht den Zugriff auf Funktionen, die für technisch Versierte bestimmt sind.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Sichern und wiederherstellen",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Alle angepassten Einstellungen können in eine Datei gesichert oder aus einer Datei wiederhergestellt werden.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Durch das Wiederherstellen werden alle angepassten Einstellungen überschrieben.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Listen suchen",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Rückgängig machen",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Hinzufügen",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importieren und ergänzen …",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportieren …",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Sichern …",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Wiederherstellen …",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Verwenden Sie keine Regeln aus unseriösen Quellen",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Ρυθμίσεις",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Προσαρμοσμένα φίλτρα",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Ανάπτυξη",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Περιοχές, γλώσσες",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Εισαγωγή / Εξαγωγή",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Επικολλήστε εδώ για προσθέσετε φίλτρα για συγκεκριμένα διακοσμητικά",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Αρχείο αλλαγών",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Ενεργοποίηση πρόσβασης σε δυνατότητες κατάλληλες για τεχνικούς χρήστες.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Αντίγραφα ασφαλείας",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Δημιουργήστε ένα αντίγραφο ασφαλείας των προσαρμοσμένων ρυθμίσεών σας ή επαναφέρετε τις προσαρμοσμένες ρυθμίσεις από ένα αρχείο αντιγράφου ασφαλείας.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Η επαναφορά θα έχει ως αποτέλεσμα την αντικατάσταση των τρεχόντων προσαρμοσμένων ρυθμίσεών σας.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Εύρεση λιστών",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Επαναφορά",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Προσθήκη",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Εισαγωγή και προσθήκη…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Εξαγωγή…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Δημιουργία αντιγράφου ασφαλείας…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Επαναφορά ρυθμίσεων…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Να μην προστίθενται περιεχόμενο από μη αξιόπιστες πηγές.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Change-log",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enable access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Backup your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Backup…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Agordoj",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Ŝanĝprotokolo",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Configuración",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtros personalizados",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Desarrollo",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regiones, idiomas",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importar / Exportar",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Pega aquí los filtros cosméticos específicos a añadir",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Registro de cambios",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Habilita acceso a características aptas para usuarios técnicos.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Respaldar",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Haz un respaldo de tu configuración personalizada en un archivo o restaura tu configuración personalizada desde uno.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "La restauración sobrescribirá toda tu configuración personalizada actual.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Encontrar listas",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revertir",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Añadir",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importar y anexar…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportar…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Respaldar…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restaurar…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "No añadas contenido de fuentes no confiables",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Sätted",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Isetehtud filtrid",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Arendajale",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regioonid, keeled",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Impordi/ekspordi",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Kindlate kosmeetiliste filtrite lisamiseks asetage need siia",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Muudatuste logi",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Luba juurdepääs tehnilise taibuga kasutajatele mõeldud võimalustele.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Varundamine / taastamine",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Varunda eriseadistused faili või taasta need failist.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Taastamine asendab olemasolevad seadistused.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Otsi nimekirju",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Taasta",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Lisa",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Impordi ja lisa…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Ekspordi…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Varunda…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Taasta…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Lisa sisu vaid usaldusväärsetest allikatest",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Ezarpenak",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Eskualdeak, hizkuntzak",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Aldaketen erregistroa",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "تنظیمات",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "مناطق، زبانها",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "گزارش دگرگونی",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Asetukset",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Omat suodattimet",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Kehitys",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Haittaohjelmia jakelevat verkkotunnukset",
|
||||
"message": "Haittaohjelmasuojaus, tietoturva",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Alueet, kielet",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Tuonti / Vienti",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Liitä lisättävät kosmeettiset suodattimet tähän",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Muutoshistoria",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Aktivoi teknisille käyttäjille suunnatut ominaisuudet.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Varmuuskopioi / Palauta",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Varmuuskopioi asetuksesi tiedostoon, tai palauta aiempi varmuuskopio.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Palautus korvaa kaikki nykyiset asetuksesi.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Etsi listoja",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Palauta",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Lisää",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Tuo ja lisää…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Vie…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Varmuuskopioi…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Palauta…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Älä lisää sisältöä lähteistä, joihin et luota.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Mga Setting",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Bumuo",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Mga rehiyon o wika",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Talaan ng mga pagbabago",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Nagbibigay ng mga katangian para sa mga teknikal na gumagamit.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Maghanap ng mga listahan",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Ibalik",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "I-import at idagdag...",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "I-export...",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Paramètres",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtres personnalisés",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Développement",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Régions, langues",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importer / Exporter",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Coller ici les filtres cosmétiques spécifiques à ajouter",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Journal des changements",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Active l'accès aux fonctionnalités adaptées aux utilisateurs techniques.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Sauvegarde",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Sauvegardez vos paramètres personnalisés dans un fichier, ou restaurez vos paramètres personnalisés depuis un fichier.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "La restauration remplacera tous vos paramètres personnalisés actuels.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Trouver des listes",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Rétablir",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Ajouter",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importer",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exporter",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Sauvegarder…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restaurer…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Ne pas ajouter de contenu provenant de sources non fiables",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Ynstellingen",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Oanpaste filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Untwikkelje",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Malwaredomeinen",
|
||||
"message": "Beskerming tsjin malware, befeiliging",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Gebieden, talen",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Ymportearje / Eksportearje",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Plak hjir spesifike kosmetyske filters om ta te foegjen",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Wizigingslochboek",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Skeakelet tagong ta foar technyske brûkers geskikte funksjes yn.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Reservekopy",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Meitsje i reservekopy fan jo oanpaste ynstellingen neiei bestân, of set jo oanpaste ynstellingen werom fan in bestân út.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Weromsette oerskriuwt al jo aktuele oanpaste ynstellingen.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Listen sykje",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Ungedien meitsje",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Tafoegje",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Ymportearje en tafoegje…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Eksportearje…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Reservekopy meitje…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Weromsette…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Foegje gjin ynhâld fan net-fertroude boarnen ta.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Axustes",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtros persoais",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Desenvolvemento",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Malware protection, security",
|
||||
"message": "Protección contra malware, seguridade",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Rexións, linguas",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importar/Exportar",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Pega aquí os filtros cosméticos a engadir",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Rexistro de cambios",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Permitir acceso a funcións pensadas para persoas con experiencia técnica.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Copia de apoio",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Garda nun ficheiro a túa configuración ou restablece os axustes desde un ficheiro.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Ao restablecer vas sobrescribir a configuración actual.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Atopa listas",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Reverter",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Engadir",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importar e engadir…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportar…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Gardar axustes…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restablecer…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Non engadir contido desde orixes non fiables",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "הגדרות",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "מסננים בהתאמה אישית",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "פיתוח",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "אזורים, שפות",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "יבוא / יצוא",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "העתיקו לכאן מסננים קוסמטים ספציפים לשם הוספה",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "יומן שינויים",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "מאפשר גישה ליכולות עבור משתמשים טכניים.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "גיבוי / שחזור",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "גיבוי של ההגדרות האישיות לקובץ, או שחזור של ההגדרות האישיות מקובץ.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "השחזור יחליף את כל ההגדרות האישיות הנוכחיות.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "חיפוש רשימות",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -292,11 +316,11 @@
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "Remove an element",
|
||||
"message": "הסר אלמנט",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
"message": "Exit element zapper mode",
|
||||
"message": "צא ממצב מחיקת אלמנטים",
|
||||
"description": "Tooltip for the button used to exit zapper mode"
|
||||
},
|
||||
"pickerTipEnter": {
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "ביטול שינויים",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "הוספה",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "ייבא וצרף…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "ייצוא…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "גיבוי…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "שחזור…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "אל תוסיפו תוכן ממקורות לא מהיימנים",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "सेटिंग्स",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "विकास",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "क्षेत्र, भाषाएँ",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "परिवर्तन पत्र",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "पूर्ववत",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "इम्पोर्ट करें और जोड़ें…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "निर्यात…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "अविश्वसनीय स्रोतों से सामग्री न जोड़ें",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Postavke",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Prilagođeni filteri",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Razvoj",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regije, jezici",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Uvoz / Izvoz",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Ovdje zalijepite određene vizualne filtere koje želite dodati",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Popis promjena",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Omogućuje pristup značajkama prikladnim za tehničke korisnike.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Sigurnosna kopija",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Napravite sigurnosnu kopiju prilagođenih postavki u datoteku ili ih vratite iz datoteke.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Vraćanje će prebrisati sve vaše trenutne prilagođene postavke.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Pronađi liste",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Poništi",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Dodaj",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Uvesti i dodati...",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Izvoz...",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Sigurnosno kopiranje…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Vraćanje…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Ne dodavajte sadržaj iz nepouzdanih izvora",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Beállítások",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Saját szűrők",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Fejlesztés",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Régiók, nyelvek",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importálás/exportálás",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Illessze be ide a hozzáadandó kozmetikai szűrőket",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Változások listája",
|
||||
"description": ""
|
||||
@@ -176,7 +188,7 @@
|
||||
"description": "A checkbox to use for NSFW sites"
|
||||
},
|
||||
"supportReportSpecificButton": {
|
||||
"message": "Új jelentés létrehozása",
|
||||
"message": "Új jelentés létrehozása GitHub-ra",
|
||||
"description": "Text for button which open an external webpage in Support pane"
|
||||
},
|
||||
"defaultFilteringModeSectionLabel": {
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Hozzáférést biztosít a képzettebb felhasználóknak való funkciókhoz.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Listák keresése",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Visszaállítás",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Hozzáadás",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importálás és hozzáadás…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportálás…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Ne adjon hozzá megbízhatatlan forrásokból származó tartalmat.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Կարգավորումներ",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Տարածաշրջաններ, լեզուներ",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Փոփոխությունների մատյան",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Pengaturan",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Mengembangkan",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Wilayah, bahasa",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Catatan perubahan",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Mengaktifkan akses ke fitur yang sesuai untuk pengguna teknis.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Temukan daftar",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Kembalikan",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Impor dan tambahkan…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Ekspor…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Jangan tambahkan konten dari sumber tidak terpercaya",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Impostazioni",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtri personalizzati",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Sviluppo",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Lingue e regioni",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importa / Esporta",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Incolla qui i filtri cosmetici specifici da aggiungere",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Reg. modifiche",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Abilita l'accesso a funzioni adatte a utenti tecnici.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Copia le impostazioni personali in un file, o rimuovile da un file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Il ripristino sovrascriverà le impostazioni personali in uso.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Trova elenchi",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Ritorna",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Aggiungi",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importa e accoda…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Esporta…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Copia…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Ripristina…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Non aggiungere contenuti da fonti non affidabili",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "設定",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "開発",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "地域・言語",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "更新履歴",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "技術ユーザーに適した機能へのアクセスを有効にします。",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "バックアップ",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "カスタムした設定をファイルとしてバックアップしたり、ファイルからリストアしたりできます。",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "リストアすると現在のカスタムした設定がすべて上書きされます。",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "リストを検索",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "元に戻す",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "インポートと追加",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "エクスポート…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "バックアップ…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "リストア…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "信頼できないソースから追加しないでください。",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "პარამეტრები",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "მორგებული ფილტრები",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "შემუშავება",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "მხარეები, ენები",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "შემოტანა / გატანა",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "აქ ჩასვით გარეგნული ნაწილების ცალკეული ფილტრები დასამატებლად",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "ცვლილებები",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "შესაძლებლობები გამოცდილი მომხმარებლებისთვის.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "მარქაფი",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "დაამარქაფეთ მითითებული პარამეტრები ფაილში ან აღადგინეთ ფაილიდან.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "აღდგენისას ყველა მიმდინარე პარამეტრი ჩანაცვლდება.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "სიების მოძიება",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "დაბრუნება",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "დამატება",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "შეტანა და დამატება…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "გატანა…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "დამარქფება…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "აღდგენა…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "ნუ დაამატებთ შიგთავსს არასანდო წყაროებიდან.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "ಸಂಯೋಜನೆಗಳು",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "ಪ್ರದೇಶಗಳು, ಭಾಷೆಗಳು\n",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "ಬದಲಾವಣೆಗಳು",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "설정",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "개발자용",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "지역, 언어",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "변경 로그",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "기술적 사용자를 위한 기능에 접근할 수 있도록 합니다.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "목록 찾기",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "되돌리기",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "가져오기 및 추가하기…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "내보내기…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "신뢰할 수 없는 출처의 콘텐츠를 추가하지 마십시오",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Nustatymai",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regionai, kalbos",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Pakeitimų žurnalas",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Iestatījumi",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Pielāgoti atsijātāji",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Izstrādāt",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Apgabali, valodas",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Ievietot/izgūt",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Šeit ir ielīmējami noteikti kosmētiskie aizturētāji, kurus pievienot",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Izmaiņu žurnāls",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Iespējot piekļuvi iespējām, kas piemērotas tehniskiem lietotājiem.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Rezerves kopija",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Pielāgoto iestatījumu rezerves kopēšana datnē vai to atjaunošana no datnes.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Atjaunošana pārrakstīs visus pašreizējos pielāgotos iestatījumus.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Atrast sarakstus",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Atjaunot",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Pievienot",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Ievietot un pievienot…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Izgūt…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Veikt rezerves kopēšanu…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Atjaunot…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Nevajag pievienot saturu no neuzticamiem avotiem.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Прилагодби",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Региони, Јазици",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Промени",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Најди листи",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "ക്രമീകരണങ്ങൾ",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "പ്രാദേശികം, ഭാഷകള്",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "ചേഞ്ച് ലോഗ്",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Tetapan",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Wilayah, bahasa",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Log perubahan",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,8 +19,12 @@
|
||||
"message": "Innstillinger",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Egendefinerte filtre",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"message": "Utvikle",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
},
|
||||
"aboutPageName": {
|
||||
@@ -36,7 +40,7 @@
|
||||
"description": "Label in the popup panel for the current filtering mode"
|
||||
},
|
||||
"popupLocalToolsLabel": {
|
||||
"message": "On this website",
|
||||
"message": "På denne nettsiden",
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regioner, språk",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importér/Eksportér",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Lim inn her spesifikke kosmetiske filtre som skal legges til",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Endringslogg",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Aktiver tilgang til funksjoner som er egnet for tekniske brukere.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Finn lister",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -300,35 +324,35 @@
|
||||
"description": "Tooltip for the button used to exit zapper mode"
|
||||
},
|
||||
"pickerTipEnter": {
|
||||
"message": "Create a custom filter",
|
||||
"message": "Lag et egendefinert filter",
|
||||
"description": "Label for the menu entry to create cosmetic filters"
|
||||
},
|
||||
"unpickerTipEnter": {
|
||||
"message": "Remove a custom filter",
|
||||
"message": "Fjern et egendefinert filter",
|
||||
"description": "Label for the menu entry to delete cosmetic filters"
|
||||
},
|
||||
"developDropdownLabel": {
|
||||
"message": "View:",
|
||||
"message": "Vis:",
|
||||
"description": "A label of a dropdown list"
|
||||
},
|
||||
"developOptionFilteringModeDetails": {
|
||||
"message": "Filtering mode details",
|
||||
"message": "Filtreringsmodusdetaljer",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionCustomDnrRules": {
|
||||
"message": "Custom DNR rules",
|
||||
"message": "Egendefinerte DNR-regler",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionDnrRulesOf": {
|
||||
"message": "DNR rules of …",
|
||||
"message": "DNR-regler for …",
|
||||
"description": "A section header in a dropdown list"
|
||||
},
|
||||
"developOptionDynamicRuleset": {
|
||||
"message": "Dynamic ruleset",
|
||||
"message": "Dynamisk regelsett",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionSessionRuleset": {
|
||||
"message": "Session ruleset",
|
||||
"message": "Regelsett for økter",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"saveButton": {
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Tilbakestill",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Legg til",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importer og legg til...",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,32 +375,40 @@
|
||||
"message": "Eksporter...",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"message": "Ikke legg til innhold fra upålitelige kilder",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
},
|
||||
"dnrRulesCountInfo": {
|
||||
"message": "Number of registered rules: {count}",
|
||||
"message": "Antall registrerte regler: {count}",
|
||||
"description": "Short sentence to report the number of currently registered DNR rules"
|
||||
},
|
||||
"pickerSliderLabel": {
|
||||
"message": "Move the slider to select the best match",
|
||||
"message": "Flytt glidebryteren for å velge den beste matchen",
|
||||
"description": "Label to describe the purpose of the slider"
|
||||
},
|
||||
"pickerPick": {
|
||||
"message": "Pick",
|
||||
"message": "Velg",
|
||||
"description": "Text for the button to re-enter element-picking mode"
|
||||
},
|
||||
"pickerPreview": {
|
||||
"message": "Preview",
|
||||
"message": "Forhåndsvis",
|
||||
"description": "Text for the button to activate preview mode"
|
||||
},
|
||||
"pickerCreate": {
|
||||
"message": "Create",
|
||||
"message": "Opprett",
|
||||
"description": "Text for the button to create the filter"
|
||||
},
|
||||
"unpickerUsage": {
|
||||
"message": "Select a filter below to highlight matching elements in the webpage. Click the trash can to remove a filter.",
|
||||
"message": "Velg et filter nedenfor for å fremheve samsvarende elementer på nettsiden. Klikk på papirkurven for å fjerne et filter.",
|
||||
"description": "Summary description on how to use the tool to remove custom filters"
|
||||
}
|
||||
}
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Instellingen",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Aangepaste filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Ontwikkelen",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Gebieden, talen",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importeren / Exporteren",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Plak hier specifieke cosmetische filters om toe te voegen",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Wijzigingenlogboek",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Schakelt toegang tot voor technische gebruikers geschikte functies in.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Back-up",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Maak een back-up van uw aangepaste instellingen naar een bestand, of zet uw aangepaste instellingen terug vanuit een bestand.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Terugzetten overschrijft al uw huidige aangepaste instellingen.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Lijsten zoeken",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Ongedaan maken",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Toevoegen",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importeren en toevoegen…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exporteren…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back-up maken…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Terugzetten…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Voeg geen inhoud van niet-vertrouwde bronnen toe.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "ਸੈਟਿੰਗਾਂ",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "ਖੇਤਰ, ਭਾਸ਼ਾਵਾਂ",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "ਤਬਦੀਲੀ-ਸੂਚੀ",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Ustawienia",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Własne filtry",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Programowanie",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regiony, języki",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import i eksport",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Wklej tutaj określone filtry kosmetyczne do dodania",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Informacje o wydaniu",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Włącz dostęp do odpowiednich funkcji dla użytkowników technicznych.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Tworzenie i przywracanie kopii zapasowej",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Utwórz kopię zapasową własnych ustawień w pliku lub przywróć je z pliku.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Przywrócenie kopii zapasowej spowoduje nadpisanie wszystkich bieżących ustawień własnych.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Znajdź listy",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Przywróć",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Dodaj",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importuj i dołącz…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Eksportuj…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Utwórz kopię zapasową…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Przywróć kopię zapasową…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Nie dodawaj zawartości z niezaufanych źródeł",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Configurações",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtros personalizados",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Desenvolver",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Domínios de malware",
|
||||
"message": "Proteção contra malware, segurança",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regiões, idiomas",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importação e exportação",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Cole filtros cosméticos específicos aqui para adicioná-los",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Notas de lançamento",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Ativa o acesso à funcionalidade destinada a usuários técnicos.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Faça backup das suas configurações personalizadas em um arquivo ou restaure suas configurações personalizadas de um arquivo.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "A restauração sobrescreverá todas as suas configurações personalizadas atuais.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Procurar listas",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Reverter",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Adicionar",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importar e anexar…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportar…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Fazer backup…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restaurar…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Não adicione conteúdo de fontes não confiáveis.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Definições",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Programação",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Domínios maliciosos",
|
||||
"message": "Proteção contra malware, segurança",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regiões, idiomas",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Registo de alterações",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Permite acesso a funcionalidades adequadas a utilizadores técnicos",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Encontrar listas",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Reverter",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importar e anexar…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportar…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Não adicione conteúdo de fontes não fidedignas",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Opțiuni",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regiuni, limbi",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Jurnal de modificări",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Căutați liste",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
@@ -372,7 +408,7 @@
|
||||
"description": "Text for the button to create the filter"
|
||||
},
|
||||
"unpickerUsage": {
|
||||
"message": "Select a filter below to highlight matching elements in the webpage. Click the trash can to remove a filter.",
|
||||
"message": "Alege un filtru de mai jos pentru a evidenția elementele cu potriviri în pagina web. Clic pe [Coș de gunoi] pentru a îndepărta un filtru.",
|
||||
"description": "Summary description on how to use the tool to remove custom filters"
|
||||
}
|
||||
}
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Настройки",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Пользовательские фильтры",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Разработка",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Регионы, языки",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Импорт / Экспорт",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Вставьте сюда отдельные косметические фильтры для добавления",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Список изменений",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Включает доступ к функциям, предназначенным для технических пользователей.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Резервная копия",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Создайте резервную копию пользовательских настроек в файле, или восстановите настройки из файла.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Восстановление перезапишет все ваши текущие пользовательские настройки.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Найти списки",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Вернуть",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Добавить",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Импортировать и добавить…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Экспортировать…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Создать рез. копию…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Восстановить…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Не добавлять содержимое из ненадёжных источников",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "සැකසුම්",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "කලාපීය, භාෂා",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "වෙනස්කම් සටහන",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "ලැයිස්තු සොයන්න",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Nastavenia",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Vlastné filtre",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Vývoj",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -40,7 +44,7 @@
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
"message": "Nahlásiť problém na tejto webovej stránke",
|
||||
"message": "Nahlásiť problém",
|
||||
"description": "Tooltip used for the 'chat' icon in the panel"
|
||||
},
|
||||
"popupTipDashboard": {
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Domény malvéru",
|
||||
"message": "Ochrana pred škodlivým softvérom, bezpečnosť",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regióny, jazyky",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import/export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Sem vložte špecifické kozmetické filtre, ktoré chcete pridať",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Zoznam zmien",
|
||||
"description": ""
|
||||
@@ -128,7 +140,7 @@
|
||||
"description": "A paragraph in the filter issue reporter section"
|
||||
},
|
||||
"supportFindSpecificButton": {
|
||||
"message": "Vyhľadať podobné hlásenia",
|
||||
"message": "Vyhľadať podobné hlásenia na Githube",
|
||||
"description": "A clickable link in the filter issue reporter section"
|
||||
},
|
||||
"supportS6URL": {
|
||||
@@ -176,7 +188,7 @@
|
||||
"description": "A checkbox to use for NSFW sites"
|
||||
},
|
||||
"supportReportSpecificButton": {
|
||||
"message": "Vytvoriť nové hlásenie",
|
||||
"message": "Vytvoriť nové hlásenie na Githube",
|
||||
"description": "Text for button which open an external webpage in Support pane"
|
||||
},
|
||||
"defaultFilteringModeSectionLabel": {
|
||||
@@ -248,9 +260,21 @@
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "Povoliť prístup k funkciám vhodným pre technických používateľov.",
|
||||
"message": "Umožňuje prístup k funkciám vhodným pre technických používateľov.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Zálohovať/Obnoviť",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Zálohujte si vlastné nastavenia do súboru alebo obnovte vlastné nastavenia zo súboru.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Obnovením sa prepíšu všetky vaše aktuálne vlastné nastavenia.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Nájsť zoznamy",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -292,7 +316,7 @@
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "Prejsť do režimu dočasného skrytia prvkov",
|
||||
"message": "Odstrániť prvok",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Vrátiť späť",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Pridať",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importovať a pripojiť…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportovať…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Zálohovať…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Obnoviť…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Nepridávajte obsah z nedôveryhodných zdrojov",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,8 +19,12 @@
|
||||
"message": "Parametrat",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Filtrat e personalizuar",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Zhvilloni",
|
||||
"message": "Zhvillimi",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
},
|
||||
"aboutPageName": {
|
||||
@@ -36,11 +40,11 @@
|
||||
"description": "Label in the popup panel for the current filtering mode"
|
||||
},
|
||||
"popupLocalToolsLabel": {
|
||||
"message": "Në këtë faqe interneti",
|
||||
"message": "Në këtë uebsajt",
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
"message": "Raportoj problemin me uebsajtin",
|
||||
"message": "Raportoj problemin",
|
||||
"description": "Tooltip used for the 'chat' icon in the panel"
|
||||
},
|
||||
"popupTipDashboard": {
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Domenet e dëmshme",
|
||||
"message": "Domenet e dëmshme, siguria",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Sipas rajonit, gjuhës",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importoj / Eksportoj",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Filtrat specifikë të personalizuar kalohen këtu",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Ditari i ndryshimeve",
|
||||
"description": ""
|
||||
@@ -244,13 +256,25 @@
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLabel": {
|
||||
"message": "Modaliteti i zhvilluesit",
|
||||
"message": "Këndi i zhvilluesit",
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "Mundëson qasjen në funksione të përshtatshme për përdoruesit teknikë.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Kopja rezervë",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Mbani një kopje rezervë të parametrave që keni personalizuar ose riktheni parametrat e mëparshëm.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Rikthimi do të fshijë gjithë parametrat që keni personalizuar.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Gjej listat",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -292,7 +316,7 @@
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "Aktivizoj asgjësuesin e elementeve",
|
||||
"message": "Heq elementin",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
@@ -300,11 +324,11 @@
|
||||
"description": "Tooltip for the button used to exit zapper mode"
|
||||
},
|
||||
"pickerTipEnter": {
|
||||
"message": "Krijo filtër të personalizuar",
|
||||
"message": "Krijoj filtër të personalizuar",
|
||||
"description": "Label for the menu entry to create cosmetic filters"
|
||||
},
|
||||
"unpickerTipEnter": {
|
||||
"message": "Hiq një filtër të personalizuar",
|
||||
"message": "Heq filtrin e personalizuar",
|
||||
"description": "Label for the menu entry to delete cosmetic filters"
|
||||
},
|
||||
"developDropdownLabel": {
|
||||
@@ -312,7 +336,7 @@
|
||||
"description": "A label of a dropdown list"
|
||||
},
|
||||
"developOptionFilteringModeDetails": {
|
||||
"message": "Detalet e mënyrës së filtërimit",
|
||||
"message": "Detajet e mënyrës së filtrimit",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionCustomDnrRules": {
|
||||
@@ -320,7 +344,7 @@
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionDnrRulesOf": {
|
||||
"message": "Rregullat DNR të ...",
|
||||
"message": "Rregullat DNR të…",
|
||||
"description": "A section header in a dropdown list"
|
||||
},
|
||||
"developOptionDynamicRuleset": {
|
||||
@@ -328,17 +352,21 @@
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionSessionRuleset": {
|
||||
"message": "Rregullat e sesionit",
|
||||
"message": "Rregullat e seancës",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"saveButton": {
|
||||
"message": "Ruaj",
|
||||
"message": "Regjistroj",
|
||||
"description": "Text for buttons used to save changes"
|
||||
},
|
||||
"revertButton": {
|
||||
"message": "Rikthej",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Shtoj",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importoj dhe shtoj…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,8 +375,16 @@
|
||||
"message": "Eksportoj…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Rezervoj…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Rikthej…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Mos shtoni filtra nga burime të pabesueshme.",
|
||||
"message": "Mos shtoni materiale nga burime të pabesueshme",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
},
|
||||
"dnrRulesCountInfo": {
|
||||
@@ -356,15 +392,15 @@
|
||||
"description": "Short sentence to report the number of currently registered DNR rules"
|
||||
},
|
||||
"pickerSliderLabel": {
|
||||
"message": "Lëvizni rrëshqitësin për të zgjedhur përputhjen më të mirë",
|
||||
"message": "Lëvizeni për të zgjedhur pikën më të përshtatshme",
|
||||
"description": "Label to describe the purpose of the slider"
|
||||
},
|
||||
"pickerPick": {
|
||||
"message": "Përzgjedh",
|
||||
"message": "Zgjedh",
|
||||
"description": "Text for the button to re-enter element-picking mode"
|
||||
},
|
||||
"pickerPreview": {
|
||||
"message": "Parapamje",
|
||||
"message": "Parashikoj",
|
||||
"description": "Text for the button to activate preview mode"
|
||||
},
|
||||
"pickerCreate": {
|
||||
@@ -372,7 +408,7 @@
|
||||
"description": "Text for the button to create the filter"
|
||||
},
|
||||
"unpickerUsage": {
|
||||
"message": "Zgjidh një filtër më poshtë për të nxjerrë në pah elementët që përputhen në faqen e internetit. Klikoni te koshi për të hequr një filtër.",
|
||||
"message": "Zgjidhni ndër filtrat më poshtë për të parë elementin që i korrespondon në faqe. Filtrat hiqen duke klikuar koshin.",
|
||||
"description": "Summary description on how to use the tool to remove custom filters"
|
||||
}
|
||||
}
|
||||
|
@@ -19,8 +19,12 @@
|
||||
"message": "Подешавања",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Прилагођени филтери",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"message": "Развити",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
},
|
||||
"aboutPageName": {
|
||||
@@ -36,7 +40,7 @@
|
||||
"description": "Label in the popup panel for the current filtering mode"
|
||||
},
|
||||
"popupLocalToolsLabel": {
|
||||
"message": "On this website",
|
||||
"message": "На овој веб страници",
|
||||
"description": "Label in the popup panel for the local tools section"
|
||||
},
|
||||
"popupTipReport": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Регионални, језички",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Увоз / извоз",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Овде налепите одређене козметичке филтере које желите додати",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Списак измена",
|
||||
"description": ""
|
||||
@@ -120,7 +132,7 @@
|
||||
"description": "First paragraph of 'Filter issues' section in Support pane"
|
||||
},
|
||||
"supportS5H": {
|
||||
"message": "Troubleshooting information",
|
||||
"message": "Информације о решавању проблема",
|
||||
"description": "Label of 'Troubleshooting information' section in 'Report a filter issue' page"
|
||||
},
|
||||
"supportS6P1S1": {
|
||||
@@ -244,13 +256,25 @@
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLabel": {
|
||||
"message": "Developer mode",
|
||||
"message": "Режим за програмере",
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"message": "Омогућава приступ функцијама погодним за техничке кориснике.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Пронађи листе",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -264,11 +288,11 @@
|
||||
"description": "Sentence used in the strict-blocked page"
|
||||
},
|
||||
"strictblockReasonSentence1": {
|
||||
"message": "The page was blocked because of a matching filter in {{listname}}.",
|
||||
"message": "Страница је блокирана због одговарајућег филтера у {{listname}}.",
|
||||
"description": "Text informing about what is causing the page to be blocked"
|
||||
},
|
||||
"strictblockRedirectSentence1": {
|
||||
"message": "The blocked page wants to redirect to another site. If you choose to proceed, you will navigate directly to: {{url}}",
|
||||
"message": "Блокирана страница жели да преусмери на други сајт. Ако одлучите да наставите, бићете директно на: {{url}}",
|
||||
"description": "Text warning about an incoming redirect"
|
||||
},
|
||||
"strictblockNoParamsPrompt": {
|
||||
@@ -292,87 +316,99 @@
|
||||
"description": "A button to navigate to the blocked page"
|
||||
},
|
||||
"zapperTipEnter": {
|
||||
"message": "Remove an element",
|
||||
"message": "Уклоните елемент",
|
||||
"description": "Tooltip for the button used to enter zapper mode"
|
||||
},
|
||||
"zapperTipQuit": {
|
||||
"message": "Exit element zapper mode",
|
||||
"message": "Изађи из режима за затварање елемената",
|
||||
"description": "Tooltip for the button used to exit zapper mode"
|
||||
},
|
||||
"pickerTipEnter": {
|
||||
"message": "Create a custom filter",
|
||||
"message": "Направите прилагођени филтер",
|
||||
"description": "Label for the menu entry to create cosmetic filters"
|
||||
},
|
||||
"unpickerTipEnter": {
|
||||
"message": "Remove a custom filter",
|
||||
"message": "Уклоните прилагођени филтер",
|
||||
"description": "Label for the menu entry to delete cosmetic filters"
|
||||
},
|
||||
"developDropdownLabel": {
|
||||
"message": "View:",
|
||||
"message": "Приказ:",
|
||||
"description": "A label of a dropdown list"
|
||||
},
|
||||
"developOptionFilteringModeDetails": {
|
||||
"message": "Filtering mode details",
|
||||
"message": "Детаљи режима филтрирања",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionCustomDnrRules": {
|
||||
"message": "Custom DNR rules",
|
||||
"message": "Прилагођена правила за DNR",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionDnrRulesOf": {
|
||||
"message": "DNR rules of …",
|
||||
"message": "ДНР правила …",
|
||||
"description": "A section header in a dropdown list"
|
||||
},
|
||||
"developOptionDynamicRuleset": {
|
||||
"message": "Dynamic ruleset",
|
||||
"message": "Динамички скуп правила",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"developOptionSessionRuleset": {
|
||||
"message": "Session ruleset",
|
||||
"message": "Скуп правила сесије",
|
||||
"description": "An option in a dropdown list"
|
||||
},
|
||||
"saveButton": {
|
||||
"message": "Save",
|
||||
"message": "Сачувај",
|
||||
"description": "Text for buttons used to save changes"
|
||||
},
|
||||
"revertButton": {
|
||||
"message": "Revert",
|
||||
"message": "Врати",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Додај",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"message": "Увези и додај…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
},
|
||||
"exportButton": {
|
||||
"message": "Export…",
|
||||
"message": "Извоз…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"message": "Не додајте садржај из непоузданих извора",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
},
|
||||
"dnrRulesCountInfo": {
|
||||
"message": "Number of registered rules: {count}",
|
||||
"message": "Број регистрованих правила: {count}",
|
||||
"description": "Short sentence to report the number of currently registered DNR rules"
|
||||
},
|
||||
"pickerSliderLabel": {
|
||||
"message": "Move the slider to select the best match",
|
||||
"message": "Померите клизач да бисте изабрали најбоље подударање",
|
||||
"description": "Label to describe the purpose of the slider"
|
||||
},
|
||||
"pickerPick": {
|
||||
"message": "Pick",
|
||||
"message": "Изаберите",
|
||||
"description": "Text for the button to re-enter element-picking mode"
|
||||
},
|
||||
"pickerPreview": {
|
||||
"message": "Preview",
|
||||
"message": "Прегледај",
|
||||
"description": "Text for the button to activate preview mode"
|
||||
},
|
||||
"pickerCreate": {
|
||||
"message": "Create",
|
||||
"message": "Креирај",
|
||||
"description": "Text for the button to create the filter"
|
||||
},
|
||||
"unpickerUsage": {
|
||||
"message": "Select a filter below to highlight matching elements in the webpage. Click the trash can to remove a filter.",
|
||||
"message": "Изаберите филтер испод да бисте истакли одговарајуће елементе на веб страници. Кликните на канту за смеће да бисте уклонили филтер.",
|
||||
"description": "Summary description on how to use the tool to remove custom filters"
|
||||
}
|
||||
}
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Inställningar",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Anpassade filter",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Utveckla",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regioner, språk",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Importera / Exportera",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Här klistrar du in specifika kosmetiska filter att lägga till",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Ändringslogg",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Aktivera åtkomst till funktioner som är lämpliga för tekniska användare.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Säkerhetskopiering",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Säkerhetskopiera dina anpassade inställningar till en fil, eller återställ dina anpassade inställningar från en fil.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Återställningen kommer att skriva över alla dina nuvarande anpassade inställningar.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Hitta listor",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Ångra",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Lägg till",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Importera och lägg till…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Exportera…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Säkerhetskopiera…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Återställ…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Lägg inte till filter från obetrodda källor.",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Settings",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "ఐచ్చికాలు",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Regions, languages",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Changelog",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "การตั้งค่า",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "พัฒนา",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -68,7 +72,7 @@
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupMalware": {
|
||||
"message": "Malware protection, security",
|
||||
"message": "การป้องกันมัลแวร์ ความปลอดภัย",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"3pGroupAnnoyances": {
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "ภูมิภาค, ภาษา",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "บันทึการเปลี่ยนแปลง",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "เปิดใช้งานฟีเจอร์สำหรับผู้ใช้ทางเทคนิค",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "หารายการ",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "ย้อนกลับ",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "นำเข้าและต่อท้าย…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "ส่งออก…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "อย่าเพิ่มเนื้อหาจากแหล่งที่ไม่น่าเชื่อถือ",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Ayarlar",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Özel filtreler",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Geliştir",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Bölgeler, diller",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "İçeri/Dışarı aktar",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Eklenmesi için kozmetik filtreleri buraya yapıştırın",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Değişiklik günlüğü",
|
||||
"description": ""
|
||||
@@ -248,9 +260,21 @@
|
||||
"description": "Label for a checkbox in the options page"
|
||||
},
|
||||
"developerModeLegend": {
|
||||
"message": "Teknik kullanıcılara uygun özelliklere erişime izin ver",
|
||||
"message": "Teknik kullanıcılara uygun özelliklere erişime izin ver.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Yedekle",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Ayarlarınızı bir dosyaya yedekleyin veya yedeklenmiş bir dosyadan alın.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Yedekten geri yükleyince şu anki ayarlarınızın yerine geçecek.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Liste bul",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Geri al",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Ekle",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "İçe aktar ve ekle…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Dışa aktar…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Yedekle…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Geri yükle…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Güvenilmeyen kaynaklardan içerik eklemeyin",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Налаштування",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Розробка",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Регіони, мови",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Журнал змін",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Відкрити доступ до можливостей, які актуальні для технічних користувачів",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Знайти списки",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Повернути",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Імпортувати та додати…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Експортувати…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Не додавати вміст з невідомих джерел",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "ترتیبات",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Develop",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "علاقے، زبانیں۔",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "چینج لاگ",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Enables access to features suitable for technical users.",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Backup",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Back up your custom settings to a file, or restore your custom settings from a file.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Find lists",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "Revert",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Import and append…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "Export…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Back up…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Restore…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Do not add content from untrusted sources",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "Cài đặt",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "Custom filters",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "Phát triển",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "Khu vực, ngôn ngữ",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "Import / Export",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "Paste here specific cosmetic filters to add",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "Nhật ký thay đổi",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "Cho phép truy cập các tính năng dành cho người dùng nâng cao",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "Sao lưu",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "Sao lưu cài đặt tùy chỉnh của bạn vào một tệp hoặc khôi phục cài đặt tùy chỉnh từ một tệp.",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "Restoring will overwrite all your current custom settings.",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "Tìm danh sách",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,14 +363,26 @@
|
||||
"message": "Đặt lại",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "Add",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "Nhập và thêm vào",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
},
|
||||
"exportButton": {
|
||||
"message": "Xuất...",
|
||||
"message": "Xuất…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "Sao lưu…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "Khôi phục…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "Không thêm các bộ lọc từ các nguồn không đáng tin cậy",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
@@ -19,6 +19,10 @@
|
||||
"message": "设置",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"customFiltersPageName": {
|
||||
"message": "自定义过滤规则",
|
||||
"description": "appears as tab name in dashboard"
|
||||
},
|
||||
"developPageName": {
|
||||
"message": "开发",
|
||||
"description": "appears as tab name in dashboard. Inspired from 'Develop' menu in Safari, see https://developer.apple.com/documentation/safari-developer-tools/develop-menu"
|
||||
@@ -83,6 +87,14 @@
|
||||
"message": "区域、语言",
|
||||
"description": "Header for a ruleset section in 'Filter lists pane'"
|
||||
},
|
||||
"customFiltersImportExportLabel": {
|
||||
"message": "导入/导出",
|
||||
"description": "Text label heading the import/export area of custom filters"
|
||||
},
|
||||
"customFiltersImportTextareaPlaceholder": {
|
||||
"message": "在此粘贴要添加的特定元素过滤规则",
|
||||
"description": "Placeholder text which describes the purpose of the textarea widget"
|
||||
},
|
||||
"aboutChangelog": {
|
||||
"message": "更新日志",
|
||||
"description": ""
|
||||
@@ -251,6 +263,18 @@
|
||||
"message": "启用访问适合技术用户的功能。",
|
||||
"description": "Short description for a checkbox in the options page"
|
||||
},
|
||||
"settingsBackupRestoreLabel": {
|
||||
"message": "备份",
|
||||
"description": "The header text for the back up/restore section"
|
||||
},
|
||||
"settingsBackupRestoreSummary": {
|
||||
"message": "将自定义设置备份到文件,或从文件还原自定义设置。",
|
||||
"description": "A summary description of the back up/restore section."
|
||||
},
|
||||
"settingsBackupRestoreLegend": {
|
||||
"message": "还原将覆盖当前所有自定义设置。",
|
||||
"description": "Important information about the back up/restore section."
|
||||
},
|
||||
"findListsPlaceholder": {
|
||||
"message": "查找列表",
|
||||
"description": "Placeholder for the input field used to find lists"
|
||||
@@ -339,6 +363,10 @@
|
||||
"message": "还原",
|
||||
"description": "Text for buttons used to revert changes"
|
||||
},
|
||||
"addButton": {
|
||||
"message": "添加",
|
||||
"description": "Text for buttons used to add content"
|
||||
},
|
||||
"importAndAppendButton": {
|
||||
"message": "导入并添加…",
|
||||
"description": "Text for buttons used to import and append content"
|
||||
@@ -347,6 +375,14 @@
|
||||
"message": "导出…",
|
||||
"description": "Text for buttons used to export content"
|
||||
},
|
||||
"backupButton": {
|
||||
"message": "备份…",
|
||||
"description": "Text for buttons used to back up content"
|
||||
},
|
||||
"restoreButton": {
|
||||
"message": "还原…",
|
||||
"description": "Text for buttons used to restore content"
|
||||
},
|
||||
"dnrRulesWarning": {
|
||||
"message": "请勿添加来自不可信来源的内容",
|
||||
"description": "Short description of the DNR rules editor pane"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user