1
1
mirror of https://github.com/gorhill/uBlock.git synced 2025-10-05 21:32:39 +02:00

Compare commits

...

116 Commits

Author SHA1 Message Date
Raymond Hill
2a2e223fd9 Import translation work from https://crowdin.com/project/ublock 2025-10-05 10:41:10 -04:00
Raymond Hill
cdc5a4a0e7 [mv3] Use "split" mode for "incognito" manifest key
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/336
2025-10-05 10:29:58 -04:00
Raymond Hill
be14670b76 [mv3] Decrease granularity of hashes of generic cosmetic selectors
This reduces the size of content scripts with no downside.
2025-10-04 13:32:16 -04:00
Raymond Hill
4ee38a056e Remove stray character 2025-10-04 12:53:07 -04:00
Raymond Hill
0d4f55ff30 Update changelog 2025-10-04 10:27:24 -04:00
Raymond Hill
a43d1d8c42 Improve href-sanitizer scriptlet
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3650
2025-10-04 10:22:47 -04:00
Raymond Hill
41a65315f9 [mv3] Minor code change 2025-10-03 14:45:46 -04:00
Raymond Hill
5bcdf3731d New revision for dev build 2025-10-02 12:39:24 -04:00
Raymond Hill
cc30763c57 Update changelog 2025-10-02 12:38:35 -04:00
Raymond Hill
d376adaae8 Fix editInboundObjectFn utility scriptlet 2025-10-02 12:31:13 -04:00
Raymond Hill
d8ed2c2866 Update in-source code documentation 2025-10-02 12:30:06 -04:00
Raymond Hill
52bc354bce Improve trusted-replace-argument scriptlet 2025-10-02 12:27:45 -04:00
Raymond Hill
bf09ec0b99 Update submodules 2025-10-02 07:39:59 -04:00
Raymond Hill
a03de94729 import translation work from https://crowdin.com/project/ublock 2025-10-02 07:32:16 -04:00
Raymond Hill
f36d2b8496 Add ability to test against regex in JSONPath expressions
Related discussion:
https://github.com/uBlockOrigin/uAssets/issues/30157#issuecomment-3356048999
2025-10-01 11:35:15 -04:00
Raymond Hill
2b8ef3ee8e Revert "Make Firefox dev build auto-update"
This reverts commit 9f8d74b60f.
2025-10-01 11:23:47 -04:00
Raymond Hill
9f8d74b60f Make Firefox dev build auto-update 2025-10-01 11:22:48 -04:00
Raymond Hill
0ee49bcc29 Make Firefox dev build auto-update 2025-10-01 10:19:57 -04:00
Raymond Hill
8d721f6a68 Make Firefox dev build auto-update 2025-10-01 10:14:43 -04:00
Raymond Hill
bbd12ec2f3 New revision for dev build 2025-10-01 09:26:15 -04:00
Raymond Hill
54326a350b Update changelog 2025-10-01 09:25:43 -04:00
Raymond Hill
dd4f764920 Improve proxy-apply utility scriptlet 2025-10-01 09:21:43 -04:00
Raymond Hill
6623889920 [mv3] Improve details of troublshooting info
Also, avoid loading troubleshooting module in service worker as it's
of use only as a user interface component.
2025-09-29 13:07:59 -04:00
Raymond Hill
4b1f87710c [mv3] Minor CSS changes 2025-09-29 12:19:11 -04:00
Raymond Hill
e91c47846b [mv3] Fix issues with restore from file 2025-09-28 15:04:26 -04:00
Raymond Hill
bb8e3d4d47 Import translation work from https://crowdin.com/project/ublock 2025-09-28 14:35:14 -04:00
Raymond Hill
be1502feb3 [mv3] Avoid mouseenter/mouseleave on mobile devices
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/478
2025-09-28 11:24:23 -04:00
Raymond Hill
80cf4d9286 [mv3] Use manifest's path value to access static rulesets
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/503
2025-09-28 11:08:48 -04:00
Raymond Hill
f40dac91b9 Import translation work from https://crowdin.com/project/ublock 2025-09-28 09:28:14 -04:00
Raymond Hill
575f018c69 [mv3] Fine tuning details 2025-09-27 15:59:32 -04:00
Raymond Hill
6a9357e903 [mv3] Group toggle-based options all under same section 2025-09-27 13:57:00 -04:00
Raymond Hill
12418ae664 Import translation work from https://crowdin.com/project/ublock 2025-09-27 13:54:09 -04:00
Raymond Hill
2581004e8f [mv3] Add ability to backup/restore settings
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/482
2025-09-27 12:53:58 -04:00
Raymond Hill
f89de42364 Import translation work from https://crowdin.com/project/ublock 2025-09-27 12:34:44 -04:00
Raymond Hill
10e48d7ec5 Import translation work from https://crowdin.com/project/ublock 2025-09-27 12:31:08 -04:00
Raymond Hill
f441773f30 Update changelog 2025-09-26 11:57:51 -04:00
Raymond Hill
3e5ea3b03f Fix removeparam for multiple query parameters with same name
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/30090
2025-09-26 11:55:38 -04:00
Raymond Hill
34d202f79d Import translation work from https://crowdin.com/project/ublock 2025-09-25 09:08:34 -04:00
Raymond Hill
93c5c077a0 [mv3] Minor CSS-related change 2025-09-25 08:57:55 -04:00
Raymond Hill
91d36749bb [mv3] Export using human-readable hostnames 2025-09-24 11:01:50 -04:00
Raymond Hill
4598ef3edc Import translation work from https://crowdin.com/project/ublock 2025-09-24 10:48:18 -04:00
Raymond Hill
8af80be5b2 [mv3] Add dashboard pane to manage custom filters
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/418
2025-09-24 10:42:18 -04:00
Raymond Hill
4fb4aa1b25 New revision for dev build 2025-09-22 19:10:56 -04:00
Raymond Hill
e2325f5e79 Update changelog 2025-09-22 19:10:34 -04:00
Raymond Hill
9aa91ba111 Improve trusted-click-element scriptlet
Related discussion/issue:
- https://github.com/uBlockOrigin/uBlock-issues/issues/2917
- https://github.com/uBlockOrigin/uAssets/discussions/30124

The "list of selectors" parameter is now a "list of steps". A step
can be:

- A selector, which tells the scriptlet to click a matching element. If
  no matching element is found, the scriptlet will wait for a matching
  element  to become available.
- An integer, which tells the scriptlet to wait n ms before processing
  the next step
- A directive, which is a string starting with `!` (not implemented yet)

If the last item in the list is an integer, this tells the scriplet to
override the built-in timeout value of 10s, such that the life time of
the scriptlet can now be extended beyond 10s.

Example:

  ..##+js(trusted-click-element, '1000, a, 500, b, c, 15000')

The scriptlet filter above will perform the following steps, in order:

- Prepare the scriptlet to timeout at 15s from now
- Wait 1000 ms
- Wait for element `a` to become available then click on it
- Wait 500 ms
- Wait for element `b` to become available then click on it
- Wait for element `c` to become available then click on it
- Abort if all the steps cannot be completed before 15s

The changes keep compatiblity with older syntax or with AdGuard
syntax.
2025-09-22 18:50:58 -04:00
Raymond Hill
705e6329eb Import translation work from https://crowdin.com/project/ublock 2025-09-22 12:46:13 -04:00
Raymond Hill
8de47f250d Improve google-ima shim
Related issue:
https://github.com/uBlockOrigin/uAssets/issues/30134
2025-09-22 10:41:36 -04:00
Raymond Hill
5127e17573 Update submodules 2025-09-21 09:53:25 -04:00
Raymond Hill
511a59584d [mv3][safari] Internally disable strict-blocking in Safari
Related discussion:
https://github.com/uBlockOrigin/uAssets/issues/30118#issuecomment-3315925462
2025-09-21 09:43:21 -04:00
Raymond Hill
1209119206 Unreference obsolete npm scripts
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3805
2025-09-20 09:21:14 -04:00
Raymond Hill
87dddb7d78 Add back a uBO-specific version of "CERT.PL's Warning List"
Related discussion:
https://github.com/uBlockOrigin/uBlock-issues/discussions/3793
2025-09-18 10:17:38 -04:00
Raymond Hill
836e04d110 [mv3][safari] Remove doc from removeParams rules
Related issues:
- https://github.com/uBlockOrigin/uBOL-home/issues/476
- https://github.com/uBlockOrigin/uBOL-home/issues/409
2025-09-17 13:34:28 -04:00
Raymond Hill
b3b2142fb6 [mv3][safari] Exclude "AdGuard URL Tracking Protection"
Related issues:
- https://github.com/uBlockOrigin/uBOL-home/issues/476
- https://github.com/uBlockOrigin/uBOL-home/issues/409
2025-09-16 09:15:12 -04:00
Raymond Hill
e9e1626f8e Update changelog 2025-09-15 09:34:21 -04:00
Raymond Hill
889c0eb208 Fix potential infinite loop when scanning for $ anchor
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3799

An infinite loop in the network filter parser was triggered when
the following conditions were fulfilled:

- There was a network option `$` anchor
- There were only whitespace character(s) preceding the anchor
- There was an invalid filter option following the anchor
2025-09-15 09:26:09 -04:00
Raymond Hill
cb767f4534 Remove obsolete files 2025-09-12 11:05:15 -04:00
Raymond Hill
edd26d27eb Remove obsolete files 2025-09-12 11:04:43 -04:00
Raymond Hill
9a5703fa0d Fix revision for next dev build 2025-09-12 10:52:56 -04:00
Raymond Hill
b7f4c1f5d7 Update submodules 2025-09-12 10:52:25 -04:00
Raymond Hill
3609ea66ed Make Firefox dev build auto-update 2025-09-12 09:24:50 -04:00
Raymond Hill
087bef3837 Update submodules 2025-09-11 09:52:57 -04:00
Raymond Hill
2943ef5112 [mv3] Don't use push() when large collections are possible
Otherwise this opens potential stack overflow issues.
2025-09-11 09:29:39 -04:00
Raymond Hill
e016a63f7b Lower maintenance burden: Drop assets that never result in feedback 2025-09-08 14:40:45 -04:00
Raymond Hill
126495d17a Update changelog 2025-09-08 14:20:21 -04:00
Raymond Hill
30e5e8c8ce Remove obsolete code 2025-09-08 14:09:55 -04:00
Raymond Hill
23056514cc New revision for dev build 2025-09-08 14:06:53 -04:00
Raymond Hill
e1028c299f Update changelog 2025-09-08 08:14:30 -04:00
Raymond Hill
8ce7a8d1e4 Update changelog 2025-09-08 08:13:35 -04:00
Raymond Hill
50cb780107 Fix version snafu
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3792
2025-09-08 08:11:20 -04:00
Raymond Hill
52dba4116e Allow generic exception for replace= option
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3791
2025-09-08 07:32:03 -04:00
Raymond Hill
5d88b72b47 Update README.md 2025-09-07 08:39:45 -04:00
Raymond Hill
f290d0a142 New revision for stable release 2025-09-06 12:26:03 -04:00
Raymond Hill
946a3d202c Update submodules 2025-09-06 10:23:09 -04:00
Raymond Hill
7eab358165 Fix makefile 2025-09-06 10:22:45 -04:00
Raymond Hill
0936b9b8b7 Import translation work from https://crowdin.com/project/ublock 2025-09-06 08:23:05 -04:00
Raymond Hill
abe144a79d Update submodules 2025-09-05 09:25:01 -04:00
Raymond Hill
80f7bd155a Make Firefox dev build auto-update 2025-09-05 09:17:31 -04:00
Raymond Hill
da9491c94e Update makefile 2025-09-04 09:51:02 -04:00
Raymond Hill
4fbcabbc66 [mv3] Move redirect/removeParams/modifyHeaders rules to static rulesets
Since permissions are now managed by the browsers, the browser will take
care whether to enforce those "usafe" rules according to the permissions
in effect on a given site.
2025-09-02 12:29:41 -04:00
Raymond Hill
8281eaba17 Update submodules 2025-09-02 10:19:49 -04:00
Raymond Hill
e86e1db87b New revision for release candidate 2025-09-02 10:03:51 -04:00
Raymond Hill
a0a996916f Update changelog 2025-09-02 10:03:28 -04:00
Raymond Hill
d2bce26e7d Improve prevent-fetch scriptlet
Add vararg `throttle, n` where `n` is the time to wait in ms before
returning a response from proxied `fetch()`.

As discussed with filter list maintainers.
2025-09-02 10:00:27 -04:00
Raymond Hill
8cdada4899 Update npm 2025-09-01 10:10:03 -04:00
Raymond Hill
7cdd78b595 Update submodules 2025-09-01 10:00:26 -04:00
Raymond Hill
07056c2de5 Update submodules 2025-08-31 11:09:15 -04:00
Raymond Hill
64858e9b9e Minor 2025-08-30 09:58:33 -04:00
Raymond Hill
17c6334cbd Import translation work from https://crowdin.com/project/ublock 2025-08-30 09:15:19 -04:00
Raymond Hill
d1a29d9899 [mv3] Ensure ui is visible even after failure 2025-08-29 11:19:24 -04:00
Raymond Hill
bc05f31cc2 [mv3] Merge AdGuard mobile filters with uBO's own mobile filters
Related discussion:
https://github.com/uBlockOrigin/uAssets/issues/20299#issuecomment-3228879091
2025-08-29 09:23:51 -04:00
Raymond Hill
57557ea116 New revision for release candidate 2025-08-28 11:19:33 -04:00
Raymond Hill
6f6724ce1a Update changelog 2025-08-28 11:17:51 -04:00
Raymond Hill
6327aae56c Add support to strict-block from ipaddress= option
As discussed with filter list maintainers.
2025-08-28 11:13:43 -04:00
Raymond Hill
31cd8b3983 Remove unused file 2025-08-25 17:01:20 -04:00
Raymond Hill
0d442f097f File moved to its own repo 2025-08-25 15:58:47 -04:00
Raymond Hill
353e1bacc1 Update submodules 2025-08-25 15:36:22 -04:00
Raymond Hill
aab425719c Move publish scripts in their own repo for easy reuse 2025-08-25 15:26:56 -04:00
Raymond Hill
30266e5107 Improve publish scripts 2025-08-25 15:10:36 -04:00
Raymond Hill
69fa0c2e09 [mv3] Fix regression in managing redirect rules
Regression cause by:
fad0af591f
2025-08-25 11:55:36 -04:00
Raymond Hill
f9ee5e2a64 Move to nodejs for publishing scripts 2025-08-24 17:26:04 -04:00
Raymond Hill
0e821284ab Update changelog 2025-08-23 13:05:43 -04:00
Raymond Hill
052c36aada [mv3] Fix placeholder references for regexSubstitution 2025-08-22 12:35:13 -04:00
Raymond Hill
cb62e38f50 [mv3] Improve built-in parser to convert filters to DNR rules
Ultimately and eventually, the built-in parser will be used to
convert filters to DNR rules at extension building time.
2025-08-22 08:14:52 -04:00
Raymond Hill
23d51b80df Make Firefox dev build auto-update 2025-08-21 11:08:23 -04:00
Raymond Hill
e8f6b7cd00 Update RELEASE.HEAD.md 2025-08-20 11:49:32 -04:00
Raymond Hill
c7e4ac48c3 New revision for dev build 2025-08-20 11:06:27 -04:00
Raymond Hill
9711039726 Update changelog 2025-08-20 11:06:04 -04:00
Raymond Hill
5d7e5ee3a0 Improve rendering with high-contrast theme
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3385
2025-08-20 11:02:35 -04:00
Raymond Hill
bc4e829427 [mv3] Support custom filters using CSS pseudo-elements
Related issue:
https://github.com/uBlockOrigin/uBOL-home/issues/448
2025-08-20 10:26:45 -04:00
Raymond Hill
807d1b6cdb Fix checkbox visual when using high contrast
Related issue:
https://github.com/uBlockOrigin/uBlock-issues/issues/3385
2025-08-19 11:50:58 -04:00
Raymond Hill
da025fef26 Update README.md 2025-08-18 09:40:32 -04:00
Raymond Hill
69b2fdf396 Reverting change of toolbar icon 2025-08-18 09:38:49 -04:00
Raymond Hill
060442c636 Revert "Add Safari toolbar icon"
This reverts commit 3f73887e47.
2025-08-18 09:36:33 -04:00
Raymond Hill
4b33b7bd7a Make Firefox dev build auto-update 2025-08-18 09:15:31 -04:00
Raymond Hill
f5d3d776d5 Make Firefox dev build auto-update 2025-08-18 09:15:17 -04:00
Raymond Hill
4814992c54 Import translation work from https://crowdin.com/project/ublock 2025-08-17 10:27:46 -04:00
165 changed files with 4799 additions and 3054 deletions

View File

@@ -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).

View File

@@ -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
View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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.

View File

@@ -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",

View File

@@ -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",

View File

@@ -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.')

View File

@@ -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);
});

View File

@@ -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.')

View File

@@ -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.')

View File

@@ -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"
}
]
}
]
}
}
}
}

View File

@@ -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"
}
]
}
}
}

View File

@@ -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
View File

@@ -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;
})();

View File

@@ -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.')

View File

@@ -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.')

View File

@@ -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"
}
]
}
}
}

View File

@@ -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
View File

@@ -1 +1 @@
1.65.1.7
1.66.5.2

177
package-lock.json generated
View File

@@ -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": {

View File

@@ -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"
}

View File

@@ -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);

View File

@@ -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');

View File

@@ -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.

View File

@@ -29,6 +29,7 @@
"host_permissions": [
"<all_urls>"
],
"incognito": "split",
"icons": {
"16": "img/icon_16.png",
"32": "img/icon_32.png",

View File

@@ -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.

View File

@@ -1,4 +1,4 @@
uBO Lite (uBOL) is an MV3-based content blocker.
uBO Lite (uBOL) הוא חוסם תוכן מבוסס MV3.
ערכת הכללים ברירת מחדל שמתכתבת עם ערכת המסננים של uBlock Origin:

View File

@@ -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:

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"
}
}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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æber­tilstand",
"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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"
}
}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"
}
}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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ëtpë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ë elementini korrespondon në faqe. Filtrat hiqen duke klikuar koshin.",
"description": "Summary description on how to use the tool to remove custom filters"
}
}

View File

@@ -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"
}
}

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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